Merge branch 'master' into dev
53
.github/workflows/publish.yml
vendored
@@ -1,53 +0,0 @@
|
||||
name: Build, Test & Publish
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- master
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: macOS-latest
|
||||
env:
|
||||
ACTIONS_ALLOW_UNSECURE_COMMANDS: true
|
||||
steps:
|
||||
|
||||
- uses: actions/checkout@v1
|
||||
|
||||
- name: Install GPG
|
||||
uses: olafurpg/setup-gpg@v2
|
||||
|
||||
- name: Decrypt secrets
|
||||
env:
|
||||
GPG_PASSWORD: ${{ secrets.GPG_PASSWORD }}
|
||||
run: .secret/decrypt.sh
|
||||
|
||||
- name: Install Java Development Kit 1.8
|
||||
uses: actions/setup-java@v1
|
||||
with:
|
||||
java-version: 1.8
|
||||
|
||||
- name: Install flock
|
||||
run: brew install util-linux
|
||||
|
||||
- name: Build APK & Run small tests
|
||||
env:
|
||||
RELEASE: 1
|
||||
run: ./build.sh build
|
||||
|
||||
- name: Run medium tests
|
||||
uses: ReactiveCircus/android-emulator-runner@v2.2.0
|
||||
env:
|
||||
RELEASE: 1
|
||||
with:
|
||||
api-level: 29
|
||||
script: ./build.sh medium-tests
|
||||
|
||||
- name: Upload build to GitHub
|
||||
uses: actions/upload-artifact@v1
|
||||
with:
|
||||
name: Build
|
||||
path: uhabits-android/uhabits-android/build/outputs/
|
||||
|
||||
- name: Upload APK to Google Play
|
||||
run: cd uhabits-android && ./gradlew publishReleaseApk
|
||||
@@ -1,6 +1,6 @@
|
||||
# Changelog
|
||||
|
||||
## [2.0.1] - 2021-04-30
|
||||
## [2.0.1] - 2021-05-09
|
||||
|
||||
### Added
|
||||
- Make midnight delay optional and disabled by default (@hiqua)
|
||||
|
||||
24
README.md
@@ -111,18 +111,18 @@ contribute, even if you are not a software developer.
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
[screen1]: screenshots/uhabits1.png
|
||||
[screen2]: screenshots/uhabits2.png
|
||||
[screen3]: screenshots/uhabits3.png
|
||||
[screen4]: screenshots/uhabits4.png
|
||||
[screen5]: screenshots/uhabits5.png
|
||||
[screen6]: screenshots/uhabits6.png
|
||||
[screen1th]: screenshots/uhabits1_th.png
|
||||
[screen2th]: screenshots/uhabits2_th.png
|
||||
[screen3th]: screenshots/uhabits3_th.png
|
||||
[screen4th]: screenshots/uhabits4_th.png
|
||||
[screen5th]: screenshots/uhabits5_th.png
|
||||
[screen6th]: screenshots/uhabits6_th.png
|
||||
[screen1]: screenshots/1.png
|
||||
[screen2]: screenshots/2.png
|
||||
[screen3]: screenshots/3.png
|
||||
[screen4]: screenshots/4.png
|
||||
[screen5]: screenshots/5.png
|
||||
[screen6]: screenshots/6.png
|
||||
[screen1th]: screenshots/1.thumb.png
|
||||
[screen2th]: screenshots/2.thumb.png
|
||||
[screen3th]: screenshots/3.thumb.png
|
||||
[screen4th]: screenshots/4.thumb.png
|
||||
[screen5th]: screenshots/5.thumb.png
|
||||
[screen6th]: screenshots/6.thumb.png
|
||||
[poedit]: http://translate.loophabits.org
|
||||
[playstore]: https://play.google.com/store/apps/details?id=org.isoron.uhabits
|
||||
[releases]: https://github.com/iSoron/uhabits/releases
|
||||
|
||||
BIN
screenshots/1.png
Normal file
|
After Width: | Height: | Size: 118 KiB |
BIN
screenshots/1.thumb.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
screenshots/2.png
Normal file
|
After Width: | Height: | Size: 107 KiB |
BIN
screenshots/2.thumb.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
screenshots/3.png
Normal file
|
After Width: | Height: | Size: 128 KiB |
BIN
screenshots/3.thumb.png
Normal file
|
After Width: | Height: | Size: 40 KiB |
BIN
screenshots/4.png
Normal file
|
After Width: | Height: | Size: 120 KiB |
BIN
screenshots/4.thumb.png
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
screenshots/5.png
Normal file
|
After Width: | Height: | Size: 173 KiB |
BIN
screenshots/5.thumb.png
Normal file
|
After Width: | Height: | Size: 45 KiB |
BIN
screenshots/6.png
Normal file
|
After Width: | Height: | Size: 2.0 MiB |
BIN
screenshots/6.thumb.png
Normal file
|
After Width: | Height: | Size: 94 KiB |
|
Before Width: | Height: | Size: 105 KiB |
|
Before Width: | Height: | Size: 24 KiB |
|
Before Width: | Height: | Size: 112 KiB |
|
Before Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 118 KiB |
|
Before Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 2.0 MiB |
|
Before Width: | Height: | Size: 142 KiB |
|
Before Width: | Height: | Size: 105 KiB |
|
Before Width: | Height: | Size: 25 KiB |
|
Before Width: | Height: | Size: 116 KiB |
|
Before Width: | Height: | Size: 28 KiB |
@@ -26,7 +26,6 @@ task("updateTranslators") {
|
||||
val name = entry["Name"]!!
|
||||
if (!translators.containsKey(lang)) {
|
||||
translators[lang] = mutableListOf()
|
||||
println(lang)
|
||||
}
|
||||
translators[lang]!!.add(name)
|
||||
translators[lang]!!.sort()
|
||||
@@ -87,7 +86,6 @@ task("updateTranslators") {
|
||||
}
|
||||
if (!translators.containsKey(lang)) {
|
||||
translators[lang] = mutableListOf()
|
||||
println(lang)
|
||||
}
|
||||
if (translators[lang]!!.contains(name)) continue
|
||||
translators[lang]!!.add(name)
|
||||
|
||||
@@ -45,10 +45,24 @@ android {
|
||||
testInstrumentationRunner("androidx.test.runner.AndroidJUnitRunner")
|
||||
}
|
||||
|
||||
signingConfigs {
|
||||
if (System.getenv("LOOP_KEY_ALIAS") != null) {
|
||||
create("release") {
|
||||
keyAlias = System.getenv("LOOP_KEY_ALIAS")
|
||||
keyPassword = System.getenv("LOOP_KEY_PASSWORD")
|
||||
storeFile = file(System.getenv("LOOP_KEY_STORE"))
|
||||
storePassword = System.getenv("LOOP_STORE_PASSWORD")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
getByName("release") {
|
||||
minifyEnabled(true)
|
||||
proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.txt")
|
||||
if (signingConfigs.findByName("release") != null) {
|
||||
signingConfig = signingConfigs.getByName("release")
|
||||
}
|
||||
}
|
||||
|
||||
getByName("debug") {
|
||||
|
||||
@@ -37,6 +37,7 @@ import org.isoron.uhabits.inject.HabitsApplicationComponent
|
||||
import org.isoron.uhabits.utils.InterfaceUtils.getDimension
|
||||
import org.isoron.uhabits.utils.PaletteUtils.getAndroidTestColor
|
||||
import org.isoron.uhabits.utils.StyledResources
|
||||
import kotlin.math.max
|
||||
import kotlin.math.min
|
||||
|
||||
class CheckmarkWidgetView : HabitWidgetView {
|
||||
@@ -95,7 +96,7 @@ class CheckmarkWidgetView : HabitWidgetView {
|
||||
|
||||
private val text: String
|
||||
get() = if (isNumerical) {
|
||||
(entryValue / 1000.0).toShortString()
|
||||
(max(0, entryValue) / 1000.0).toShortString()
|
||||
} else when (entryState) {
|
||||
YES_MANUAL, YES_AUTO -> resources.getString(R.string.fa_check)
|
||||
SKIP -> resources.getString(R.string.fa_skipped)
|
||||
@@ -130,7 +131,11 @@ class CheckmarkWidgetView : HabitWidgetView {
|
||||
val maxTextSize = getDimension(context, R.dimen.smallerTextSize)
|
||||
textSize = min(textSize, maxTextSize)
|
||||
label.setTextSize(TypedValue.COMPLEX_UNIT_PX, textSize)
|
||||
ring.setTextSize(textSize)
|
||||
if (isNumerical) {
|
||||
ring.setTextSize(textSize * 0.75f)
|
||||
} else {
|
||||
ring.setTextSize(textSize)
|
||||
}
|
||||
ring.setThickness(0.15f * textSize)
|
||||
super.onMeasure(newWidthMeasureSpec, newHeightMeasureSpec)
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 105 KiB After Width: | Height: | Size: 118 KiB |
|
Before Width: | Height: | Size: 112 KiB After Width: | Height: | Size: 107 KiB |
|
Before Width: | Height: | Size: 118 KiB After Width: | Height: | Size: 128 KiB |
|
Before Width: | Height: | Size: 2.0 MiB After Width: | Height: | Size: 134 KiB |
|
Before Width: | Height: | Size: 105 KiB After Width: | Height: | Size: 120 KiB |
|
Before Width: | Height: | Size: 116 KiB After Width: | Height: | Size: 2.0 MiB |
@@ -1,3 +1,10 @@
|
||||
1.8.12:
|
||||
* Fix bug that caused incorrect check marks to show after scrolling
|
||||
* Fix issue preventing widgets from updating at midnight
|
||||
2.0:
|
||||
* Track numeric habits (e.g. how many pages did you read?)
|
||||
* Skip days without breaking your streak
|
||||
* Show question marks for days with missing data
|
||||
* Extend day a few hours past midnight
|
||||
* Show multiple habits in a single widget
|
||||
* Export daily backups automatically
|
||||
* Sort habits by status and in reverse
|
||||
* Add notes to habits
|
||||
* Improve theme and accessibility
|
||||
|
||||