From 727e88b7b11cff79bdc666406af1fd989ac7e76a Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Sun, 4 Jun 2023 17:30:38 -0500 Subject: [PATCH 01/80] Fix skip button in locales that use comma instead of dot Fixes #1721 --- uhabits-android/build.gradle.kts | 4 ++-- .../isoron/uhabits/activities/common/dialogs/NumberDialog.kt | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/uhabits-android/build.gradle.kts b/uhabits-android/build.gradle.kts index 49fb4c8b7..22c9c6bc3 100644 --- a/uhabits-android/build.gradle.kts +++ b/uhabits-android/build.gradle.kts @@ -35,8 +35,8 @@ android { compileSdk = 31 defaultConfig { - versionCode = 20102 - versionName = "2.1.2" + versionCode = 20103 + versionName = "2.1.3" minSdk = 23 targetSdk = 31 applicationId = "org.isoron.uhabits" diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/NumberDialog.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/NumberDialog.kt index 7e10baa51..38c0a5756 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/NumberDialog.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/NumberDialog.kt @@ -65,7 +65,7 @@ class NumberDialog : AppCompatDialogFragment() { save() } view.skipBtnNumber.setOnClickListener { - view.value.setText((Entry.SKIP.toDouble() / 1000).toString()) + view.value.setText(DecimalFormat("#.###").format((Entry.SKIP.toDouble() / 1000))) save() } view.notes.setOnEditorActionListener { v, actionId, event -> From 8b55ffb147cb3d015e60b2db7aec5a3a0854270e Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Sun, 4 Jun 2023 18:25:33 -0500 Subject: [PATCH 02/80] Fix timezone bug in MidnightTimer; increase logging --- .../org/isoron/uhabits/core/utils/DateUtils.kt | 2 +- .../org/isoron/uhabits/core/utils/MidnightTimer.kt | 14 +++++++++++--- .../isoron/uhabits/core/utils/MidnightTimerTest.kt | 3 ++- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/utils/DateUtils.kt b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/utils/DateUtils.kt index b06513140..d0ca726a5 100644 --- a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/utils/DateUtils.kt +++ b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/utils/DateUtils.kt @@ -227,7 +227,7 @@ abstract class DateUtils { fun getStartOfTodayWithOffset(): Long = getStartOfDayWithOffset(getLocalTime()) @JvmStatic - fun millisecondsUntilTomorrowWithOffset(): Long = getStartOfTomorrowWithOffset() - getLocalTime() + fun millisecondsUntilTomorrowWithOffset(): Long = getStartOfTomorrowWithOffset() - applyTimezone(getLocalTime()) @JvmStatic fun getStartOfTodayCalendar(): GregorianCalendar = getCalendar(getStartOfToday()) diff --git a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/utils/MidnightTimer.kt b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/utils/MidnightTimer.kt index 903099293..b63569533 100644 --- a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/utils/MidnightTimer.kt +++ b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/utils/MidnightTimer.kt @@ -19,6 +19,7 @@ package org.isoron.uhabits.core.utils import org.isoron.uhabits.core.AppScope +import org.isoron.uhabits.core.io.Logging import java.util.LinkedList import java.util.concurrent.Executors import java.util.concurrent.ScheduledExecutorService @@ -29,9 +30,10 @@ import javax.inject.Inject * A class that emits events when a new day starts. */ @AppScope -open class MidnightTimer @Inject constructor() { +open class MidnightTimer @Inject constructor(logging: Logging) { private val listeners: MutableList = LinkedList() private lateinit var executor: ScheduledExecutorService + private val logger = logging.getLogger("MidnightTimer") @Synchronized fun addListener(listener: MidnightListener) { @@ -39,7 +41,10 @@ open class MidnightTimer @Inject constructor() { } @Synchronized - fun onPause(): MutableList? = executor.shutdownNow() + fun onPause(): MutableList? { + logger.info("Pausing timer") + return executor.shutdownNow() + } @Synchronized fun onResume( @@ -47,9 +52,11 @@ open class MidnightTimer @Inject constructor() { testExecutor: ScheduledExecutorService? = null ) { executor = testExecutor ?: Executors.newSingleThreadScheduledExecutor() + val initialDelay = DateUtils.millisecondsUntilTomorrowWithOffset() + delayOffsetInMillis + logger.info("Scheduling refresh for $initialDelay ms from now") executor.scheduleAtFixedRate( { notifyListeners() }, - DateUtils.millisecondsUntilTomorrowWithOffset() + delayOffsetInMillis, + initialDelay, DateUtils.DAY_LENGTH, TimeUnit.MILLISECONDS ) @@ -60,6 +67,7 @@ open class MidnightTimer @Inject constructor() { @Synchronized private fun notifyListeners() { + logger.info("Midnight refresh") for (l in listeners) { l.atMidnight() } diff --git a/uhabits-core/src/jvmTest/java/org/isoron/uhabits/core/utils/MidnightTimerTest.kt b/uhabits-core/src/jvmTest/java/org/isoron/uhabits/core/utils/MidnightTimerTest.kt index b92507da0..c0eb3fe2d 100644 --- a/uhabits-core/src/jvmTest/java/org/isoron/uhabits/core/utils/MidnightTimerTest.kt +++ b/uhabits-core/src/jvmTest/java/org/isoron/uhabits/core/utils/MidnightTimerTest.kt @@ -4,6 +4,7 @@ import kotlinx.coroutines.asCoroutineDispatcher import kotlinx.coroutines.runBlocking import kotlinx.coroutines.withContext import org.isoron.uhabits.core.BaseUnitTest +import org.isoron.uhabits.core.io.StandardLogging import org.junit.Test import java.util.Calendar import java.util.TimeZone @@ -34,7 +35,7 @@ class MidnightTimerTest : BaseUnitTest() { ) val suspendedListener = suspendCoroutine { continuation -> - MidnightTimer().apply { + MidnightTimer(StandardLogging()).apply { addListener { continuation.resume(true) } // When onResume(1, executor) From ba57ebad310a8e39e4e7a68303239be66293edd5 Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Mon, 5 Jun 2023 20:01:41 -0500 Subject: [PATCH 03/80] Fix an invisible color in widgets; adjust another color --- .../isoron/uhabits/core/ui/views/Themes.kt | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/views/Themes.kt b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/views/Themes.kt index 1b1d989e4..eef7f26d0 100644 --- a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/views/Themes.kt +++ b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/views/Themes.kt @@ -125,4 +125,30 @@ class WidgetTheme : LightTheme() { override val highContrastTextColor = Color.WHITE override val mediumContrastTextColor = Color.WHITE.withAlpha(0.50) override val lowContrastTextColor = Color.WHITE.withAlpha(0.10) + + override fun color(paletteIndex: Int): Color { + return when (paletteIndex) { + 0 -> Color(0xD32F2F) + 1 -> Color(0xE64A19) + 2 -> Color(0xF57C00) + 3 -> Color(0xFF8F00) + 4 -> Color(0xF9A825) + 5 -> Color(0xAFB42B) + 6 -> Color(0x7CB342) + 7 -> Color(0x388E3C) + 8 -> Color(0x00897B) + 9 -> Color(0x00ACC1) + 10 -> Color(0x039BE5) + 11 -> Color(0x1976D2) + 12 -> Color(0x6275f0) + 13 -> Color(0x5E35B1) + 14 -> Color(0x8E24AA) + 15 -> Color(0xD81B60) + 16 -> Color(0x5D4037) + 17 -> Color(0x757575) + 18 -> Color(0x757575) + 19 -> Color(0x9E9E9E) + else -> Color(0x000000) + } + } } From 9ca1aa911a2a73cbb10e00303aa51fd490fd2741 Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Mon, 5 Jun 2023 20:04:20 -0500 Subject: [PATCH 04/80] Minor layout fixes --- uhabits-android/src/main/res/layout/checkmark_popup.xml | 2 +- uhabits-android/src/main/res/layout/widget_graph.xml | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/uhabits-android/src/main/res/layout/checkmark_popup.xml b/uhabits-android/src/main/res/layout/checkmark_popup.xml index e21c2fb54..59f5c81a1 100644 --- a/uhabits-android/src/main/res/layout/checkmark_popup.xml +++ b/uhabits-android/src/main/res/layout/checkmark_popup.xml @@ -36,7 +36,7 @@ android:layout_height="0dp" android:layout_weight="1" android:gravity="center" - android:inputType="textCapSentences" + android:inputType="textCapSentences|textMultiLine" android:textSize="@dimen/smallTextSize" android:padding="4dp" android:background="@color/transparent" diff --git a/uhabits-android/src/main/res/layout/widget_graph.xml b/uhabits-android/src/main/res/layout/widget_graph.xml index 6ee9cfb8b..6349717bd 100644 --- a/uhabits-android/src/main/res/layout/widget_graph.xml +++ b/uhabits-android/src/main/res/layout/widget_graph.xml @@ -44,6 +44,7 @@ android:layout_height="wrap_content" android:gravity="center" android:textSize="@dimen/smallTextSize" + android:maxLines="2" android:textColor="@color/white"/> From d4f4f8b4a95dc7ee238636e5c107b9a8a90d144d Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Mon, 5 Jun 2023 20:25:00 -0500 Subject: [PATCH 05/80] Prevent crash if exact alarm permission is revoked --- .../main/java/org/isoron/uhabits/intents/IntentScheduler.kt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentScheduler.kt b/uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentScheduler.kt index 089af4af2..007b7f08d 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentScheduler.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentScheduler.kt @@ -25,6 +25,7 @@ import android.app.AlarmManager.RTC_WAKEUP import android.app.PendingIntent import android.content.Context import android.content.Context.ALARM_SERVICE +import android.os.Build import android.util.Log import org.isoron.uhabits.core.AppScope import org.isoron.uhabits.core.models.Habit @@ -56,6 +57,10 @@ class IntentScheduler ) return SchedulerResult.IGNORED } + if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.S && !manager.canScheduleExactAlarms()) { + Log.e("IntentScheduler", "No permission to schedule exact alarms") + return SchedulerResult.IGNORED + } manager.setExactAndAllowWhileIdle(alarmType, timestamp, intent) return SchedulerResult.OK } From 88df8d2552bb6af5b15dd0a689b21b5d85cb4230 Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Sat, 8 Jul 2023 17:13:45 -0500 Subject: [PATCH 06/80] Format source code --- .../src/main/java/org/isoron/uhabits/intents/IntentScheduler.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentScheduler.kt b/uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentScheduler.kt index 007b7f08d..047474d67 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentScheduler.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/intents/IntentScheduler.kt @@ -57,7 +57,7 @@ class IntentScheduler ) return SchedulerResult.IGNORED } - if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.S && !manager.canScheduleExactAlarms()) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S && !manager.canScheduleExactAlarms()) { Log.e("IntentScheduler", "No permission to schedule exact alarms") return SchedulerResult.IGNORED } From 5df3ee0d610d57b149437ed1cd649b3e2306826e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Aug 2023 19:59:11 +0000 Subject: [PATCH 07/80] Bump org.jlleitschuh.gradle.ktlint from 11.4.2 to 11.5.1 Bumps org.jlleitschuh.gradle.ktlint from 11.4.2 to 11.5.1. --- updated-dependencies: - dependency-name: org.jlleitschuh.gradle.ktlint dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index d5daa6c76..651afb945 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,7 +4,7 @@ plugins { id("org.jetbrains.kotlin.android") version kotlinVersion apply (false) id("org.jetbrains.kotlin.kapt") version kotlinVersion apply (false) id("org.jetbrains.kotlin.multiplatform") version kotlinVersion apply (false) - id("org.jlleitschuh.gradle.ktlint") version "11.4.2" + id("org.jlleitschuh.gradle.ktlint") version "11.5.1" } apply { From f4e5b68258d031dfd3a4dc8a03878f29ba51dd7b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Aug 2023 21:23:23 +0000 Subject: [PATCH 08/80] Bump org.apache.commons:commons-lang3 from 3.12.0 to 3.13.0 Bumps org.apache.commons:commons-lang3 from 3.12.0 to 3.13.0. --- updated-dependencies: - dependency-name: org.apache.commons:commons-lang3 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- uhabits-core/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uhabits-core/build.gradle.kts b/uhabits-core/build.gradle.kts index 26cece397..6ff4c3b64 100644 --- a/uhabits-core/build.gradle.kts +++ b/uhabits-core/build.gradle.kts @@ -50,7 +50,7 @@ kotlin { implementation("com.google.code.findbugs:jsr305:3.0.2") implementation("com.opencsv:opencsv:5.7.1") implementation("commons-codec:commons-codec:1.15") - implementation("org.apache.commons:commons-lang3:3.12.0") + implementation("org.apache.commons:commons-lang3:3.13.0") } } From f58d8a52ff1539bb67c439254d4f9bcce4a56bf2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Aug 2023 21:23:19 +0000 Subject: [PATCH 09/80] Bump kxCoroutinesVersion from 1.6.4 to 1.7.3 Bumps `kxCoroutinesVersion` from 1.6.4 to 1.7.3. Updates `org.jetbrains.kotlinx:kotlinx-coroutines-android` from 1.6.4 to 1.7.3 - [Release notes](https://github.com/Kotlin/kotlinx.coroutines/releases) - [Changelog](https://github.com/Kotlin/kotlinx.coroutines/blob/master/CHANGES.md) - [Commits](https://github.com/Kotlin/kotlinx.coroutines/compare/1.6.4...1.7.3) Updates `org.jetbrains.kotlinx:kotlinx-coroutines-core` from 1.6.4 to 1.7.3 - [Release notes](https://github.com/Kotlin/kotlinx.coroutines/releases) - [Changelog](https://github.com/Kotlin/kotlinx.coroutines/blob/master/CHANGES.md) - [Commits](https://github.com/Kotlin/kotlinx.coroutines/compare/1.6.4...1.7.3) --- updated-dependencies: - dependency-name: org.jetbrains.kotlinx:kotlinx-coroutines-android dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: org.jetbrains.kotlinx:kotlinx-coroutines-core dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- uhabits-android/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uhabits-android/build.gradle.kts b/uhabits-android/build.gradle.kts index 5bcfef429..912b5eb68 100644 --- a/uhabits-android/build.gradle.kts +++ b/uhabits-android/build.gradle.kts @@ -81,7 +81,7 @@ android { dependencies { val daggerVersion = "2.46" val kotlinVersion = "1.7.21" - val kxCoroutinesVersion = "1.6.4" + val kxCoroutinesVersion = "1.7.3" val ktorVersion = "1.6.8" val espressoVersion = "3.5.1" From 761fe59c5ead3eca553a21ccc97bbe9ba3784829 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 7 Aug 2023 22:58:00 +0000 Subject: [PATCH 10/80] Bump commons-codec:commons-codec from 1.15 to 1.16.0 Bumps [commons-codec:commons-codec](https://github.com/apache/commons-codec) from 1.15 to 1.16.0. - [Changelog](https://github.com/apache/commons-codec/blob/master/RELEASE-NOTES.txt) - [Commits](https://github.com/apache/commons-codec/compare/rel/commons-codec-1.15...rel/commons-codec-1.16.0) --- updated-dependencies: - dependency-name: commons-codec:commons-codec dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- uhabits-core/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uhabits-core/build.gradle.kts b/uhabits-core/build.gradle.kts index 6ff4c3b64..dd86d53ed 100644 --- a/uhabits-core/build.gradle.kts +++ b/uhabits-core/build.gradle.kts @@ -49,7 +49,7 @@ kotlin { implementation("androidx.annotation:annotation:1.5.0") implementation("com.google.code.findbugs:jsr305:3.0.2") implementation("com.opencsv:opencsv:5.7.1") - implementation("commons-codec:commons-codec:1.15") + implementation("commons-codec:commons-codec:1.16.0") implementation("org.apache.commons:commons-lang3:3.13.0") } } From 80f783b6697db5a7ec3fddacda7fa8c696f69ed7 Mon Sep 17 00:00:00 2001 From: Quentin Hibon Date: Tue, 8 Aug 2023 02:44:41 +0200 Subject: [PATCH 11/80] Bump mockito-kotlin from 2.2.11 to 4.1.0 --- uhabits-android/build.gradle.kts | 4 ++-- uhabits-core/build.gradle.kts | 2 +- .../uhabits/core/ui/widgets/WidgetBehaviorTest.kt | 10 +++++----- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/uhabits-android/build.gradle.kts b/uhabits-android/build.gradle.kts index 912b5eb68..032c2115f 100644 --- a/uhabits-android/build.gradle.kts +++ b/uhabits-android/build.gradle.kts @@ -95,7 +95,7 @@ dependencies { androidTestImplementation("androidx.test.ext:junit:1.1.5") androidTestImplementation("androidx.test.uiautomator:uiautomator:2.2.0") androidTestImplementation("androidx.test:rules:1.5.0") - androidTestImplementation("org.mockito.kotlin:mockito-kotlin:2.2.11") + androidTestImplementation("org.mockito.kotlin:mockito-kotlin:4.1.0") compileOnly("javax.annotation:jsr250-api:1.0") coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.3") implementation("com.github.AppIntro:AppIntro:6.2.0") @@ -119,7 +119,7 @@ dependencies { kaptAndroidTest("com.google.dagger:dagger-compiler:$daggerVersion") testImplementation("com.google.dagger:dagger:$daggerVersion") testImplementation("junit:junit:4.13.2") - testImplementation("org.mockito.kotlin:mockito-kotlin:2.2.11") + testImplementation("org.mockito.kotlin:mockito-kotlin:4.1.0") } kapt { diff --git a/uhabits-core/build.gradle.kts b/uhabits-core/build.gradle.kts index dd86d53ed..2b4beec0f 100644 --- a/uhabits-core/build.gradle.kts +++ b/uhabits-core/build.gradle.kts @@ -61,7 +61,7 @@ kotlin { implementation("org.xerial:sqlite-jdbc:3.40.0.0") implementation("org.hamcrest:hamcrest:2.2") implementation("org.apache.commons:commons-io:1.3.2") - implementation("org.mockito.kotlin:mockito-kotlin:2.2.11") + implementation("org.mockito.kotlin:mockito-kotlin:4.1.0") implementation("org.junit.jupiter:junit-jupiter:5.8.1") } } diff --git a/uhabits-core/src/jvmTest/java/org/isoron/uhabits/core/ui/widgets/WidgetBehaviorTest.kt b/uhabits-core/src/jvmTest/java/org/isoron/uhabits/core/ui/widgets/WidgetBehaviorTest.kt index 27a1c8cba..e173cdb5e 100644 --- a/uhabits-core/src/jvmTest/java/org/isoron/uhabits/core/ui/widgets/WidgetBehaviorTest.kt +++ b/uhabits-core/src/jvmTest/java/org/isoron/uhabits/core/ui/widgets/WidgetBehaviorTest.kt @@ -32,7 +32,7 @@ import org.junit.Test import org.mockito.kotlin.mock import org.mockito.kotlin.reset import org.mockito.kotlin.verify -import org.mockito.kotlin.verifyZeroInteractions +import org.mockito.kotlin.verifyNoInteractions import org.mockito.kotlin.whenever class WidgetBehaviorTest : BaseUnitTest() { @@ -61,7 +61,7 @@ class WidgetBehaviorTest : BaseUnitTest() { CreateRepetitionCommand(habitList, habit, today, Entry.YES_MANUAL, "") ) verify(notificationTray).cancel(habit) - verifyZeroInteractions(preferences) + verifyNoInteractions(preferences) } @Test @@ -71,7 +71,7 @@ class WidgetBehaviorTest : BaseUnitTest() { CreateRepetitionCommand(habitList, habit, today, Entry.NO, "") ) verify(notificationTray).cancel(habit) - verifyZeroInteractions(preferences) + verifyNoInteractions(preferences) } @Test @@ -113,7 +113,7 @@ class WidgetBehaviorTest : BaseUnitTest() { CreateRepetitionCommand(habitList, habit, today, 600, "") ) verify(notificationTray).cancel(habit) - verifyZeroInteractions(preferences) + verifyNoInteractions(preferences) } @Test @@ -126,6 +126,6 @@ class WidgetBehaviorTest : BaseUnitTest() { CreateRepetitionCommand(habitList, habit, today, 400, "") ) verify(notificationTray).cancel(habit) - verifyZeroInteractions(preferences) + verifyNoInteractions(preferences) } } From 19de2a2d1cbd2020d1572ec66732024a8fe0383e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 8 Aug 2023 00:54:22 +0000 Subject: [PATCH 12/80] Bump androidx.annotation:annotation from 1.5.0 to 1.6.0 Bumps androidx.annotation:annotation from 1.5.0 to 1.6.0. --- updated-dependencies: - dependency-name: androidx.annotation:annotation dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- uhabits-android/build.gradle.kts | 2 +- uhabits-core/build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/uhabits-android/build.gradle.kts b/uhabits-android/build.gradle.kts index 032c2115f..56ba98c75 100644 --- a/uhabits-android/build.gradle.kts +++ b/uhabits-android/build.gradle.kts @@ -91,7 +91,7 @@ dependencies { androidTestImplementation("com.linkedin.dexmaker:dexmaker-mockito:2.28.3") androidTestImplementation("io.ktor:ktor-client-mock:$ktorVersion") androidTestImplementation("io.ktor:ktor-jackson:$ktorVersion") - androidTestImplementation("androidx.annotation:annotation:1.5.0") + androidTestImplementation("androidx.annotation:annotation:1.6.0") androidTestImplementation("androidx.test.ext:junit:1.1.5") androidTestImplementation("androidx.test.uiautomator:uiautomator:2.2.0") androidTestImplementation("androidx.test:rules:1.5.0") diff --git a/uhabits-core/build.gradle.kts b/uhabits-core/build.gradle.kts index 2b4beec0f..d9cc33a9a 100644 --- a/uhabits-core/build.gradle.kts +++ b/uhabits-core/build.gradle.kts @@ -46,7 +46,7 @@ kotlin { compileOnly("com.google.dagger:dagger:2.46") implementation("com.google.guava:guava:31.1-android") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4") - implementation("androidx.annotation:annotation:1.5.0") + implementation("androidx.annotation:annotation:1.6.0") implementation("com.google.code.findbugs:jsr305:3.0.2") implementation("com.opencsv:opencsv:5.7.1") implementation("commons-codec:commons-codec:1.16.0") From 98b2c9cce2155f6e0e9db2c3a3c32bfc0b26cbdd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 8 Aug 2023 07:32:58 +0000 Subject: [PATCH 13/80] Bump com.google.guava:guava from 31.1-android to 32.1.2-android Bumps [com.google.guava:guava](https://github.com/google/guava) from 31.1-android to 32.1.2-android. - [Release notes](https://github.com/google/guava/releases) - [Commits](https://github.com/google/guava/commits) --- updated-dependencies: - dependency-name: com.google.guava:guava dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- uhabits-android/build.gradle.kts | 2 +- uhabits-core/build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/uhabits-android/build.gradle.kts b/uhabits-android/build.gradle.kts index 56ba98c75..6de56ada6 100644 --- a/uhabits-android/build.gradle.kts +++ b/uhabits-android/build.gradle.kts @@ -101,7 +101,7 @@ dependencies { implementation("com.github.AppIntro:AppIntro:6.2.0") implementation("com.google.code.findbugs:jsr305:3.0.2") implementation("com.google.dagger:dagger:$daggerVersion") - implementation("com.google.guava:guava:31.1-android") + implementation("com.google.guava:guava:32.1.2-android") implementation("io.ktor:ktor-client-android:$ktorVersion") implementation("io.ktor:ktor-client-core:$ktorVersion") implementation("io.ktor:ktor-client-jackson:$ktorVersion") diff --git a/uhabits-core/build.gradle.kts b/uhabits-core/build.gradle.kts index d9cc33a9a..9835e47b5 100644 --- a/uhabits-core/build.gradle.kts +++ b/uhabits-core/build.gradle.kts @@ -44,7 +44,7 @@ kotlin { dependencies { implementation(kotlin("stdlib-jdk8")) compileOnly("com.google.dagger:dagger:2.46") - implementation("com.google.guava:guava:31.1-android") + implementation("com.google.guava:guava:32.1.2-android") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4") implementation("androidx.annotation:annotation:1.6.0") implementation("com.google.code.findbugs:jsr305:3.0.2") From 9951525cbe64faa034b9e64c0fcb4eb77084d91d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 8 Aug 2023 07:33:07 +0000 Subject: [PATCH 14/80] Bump com.opencsv:opencsv from 5.7.1 to 5.8 Bumps com.opencsv:opencsv from 5.7.1 to 5.8. --- updated-dependencies: - dependency-name: com.opencsv:opencsv dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- uhabits-android/build.gradle.kts | 2 +- uhabits-core/build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/uhabits-android/build.gradle.kts b/uhabits-android/build.gradle.kts index 6de56ada6..257e7f44f 100644 --- a/uhabits-android/build.gradle.kts +++ b/uhabits-android/build.gradle.kts @@ -113,7 +113,7 @@ dependencies { implementation("androidx.legacy:legacy-preference-v14:1.0.0") implementation("androidx.legacy:legacy-support-v4:1.0.0") implementation("com.google.android.material:material:1.8.0") - implementation("com.opencsv:opencsv:5.7.1") + implementation("com.opencsv:opencsv:5.8") implementation(project(":uhabits-core")) kapt("com.google.dagger:dagger-compiler:$daggerVersion") kaptAndroidTest("com.google.dagger:dagger-compiler:$daggerVersion") diff --git a/uhabits-core/build.gradle.kts b/uhabits-core/build.gradle.kts index 9835e47b5..811fbb7f4 100644 --- a/uhabits-core/build.gradle.kts +++ b/uhabits-core/build.gradle.kts @@ -48,7 +48,7 @@ kotlin { implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4") implementation("androidx.annotation:annotation:1.6.0") implementation("com.google.code.findbugs:jsr305:3.0.2") - implementation("com.opencsv:opencsv:5.7.1") + implementation("com.opencsv:opencsv:5.8") implementation("commons-codec:commons-codec:1.16.0") implementation("org.apache.commons:commons-lang3:3.13.0") } From ca0a9dd85fcbad9ff2fd8b65d4eb990049305619 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 8 Aug 2023 12:20:56 +0000 Subject: [PATCH 15/80] Bump org.xerial:sqlite-jdbc from 3.40.0.0 to 3.42.0.0 Bumps [org.xerial:sqlite-jdbc](https://github.com/xerial/sqlite-jdbc) from 3.40.0.0 to 3.42.0.0. - [Release notes](https://github.com/xerial/sqlite-jdbc/releases) - [Changelog](https://github.com/xerial/sqlite-jdbc/blob/master/CHANGELOG) - [Commits](https://github.com/xerial/sqlite-jdbc/compare/3.40.0.0...3.42.0.0) --- updated-dependencies: - dependency-name: org.xerial:sqlite-jdbc dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- uhabits-core/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uhabits-core/build.gradle.kts b/uhabits-core/build.gradle.kts index 811fbb7f4..5bd703f6c 100644 --- a/uhabits-core/build.gradle.kts +++ b/uhabits-core/build.gradle.kts @@ -58,7 +58,7 @@ kotlin { dependencies { implementation(kotlin("test")) implementation(kotlin("test-junit")) - implementation("org.xerial:sqlite-jdbc:3.40.0.0") + implementation("org.xerial:sqlite-jdbc:3.42.0.0") implementation("org.hamcrest:hamcrest:2.2") implementation("org.apache.commons:commons-io:1.3.2") implementation("org.mockito.kotlin:mockito-kotlin:4.1.0") From b9253d41eacf64783ef6e0d04c0aa71df2e91aff Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 8 Aug 2023 17:37:52 +0000 Subject: [PATCH 16/80] Bump daggerVersion from 2.46 to 2.47 Bumps `daggerVersion` from 2.46 to 2.47. Updates `com.google.dagger:dagger` from 2.46 to 2.47 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.46...dagger-2.47) Updates `com.google.dagger:dagger-compiler` from 2.46 to 2.47 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.46...dagger-2.47) --- updated-dependencies: - dependency-name: com.google.dagger:dagger dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: com.google.dagger:dagger-compiler dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- uhabits-android/build.gradle.kts | 2 +- uhabits-core/build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/uhabits-android/build.gradle.kts b/uhabits-android/build.gradle.kts index 257e7f44f..fe4a7a196 100644 --- a/uhabits-android/build.gradle.kts +++ b/uhabits-android/build.gradle.kts @@ -79,7 +79,7 @@ android { } dependencies { - val daggerVersion = "2.46" + val daggerVersion = "2.47" val kotlinVersion = "1.7.21" val kxCoroutinesVersion = "1.7.3" val ktorVersion = "1.6.8" diff --git a/uhabits-core/build.gradle.kts b/uhabits-core/build.gradle.kts index 5bd703f6c..5350965f8 100644 --- a/uhabits-core/build.gradle.kts +++ b/uhabits-core/build.gradle.kts @@ -43,7 +43,7 @@ kotlin { val jvmMain by getting { dependencies { implementation(kotlin("stdlib-jdk8")) - compileOnly("com.google.dagger:dagger:2.46") + compileOnly("com.google.dagger:dagger:2.47") implementation("com.google.guava:guava:32.1.2-android") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4") implementation("androidx.annotation:annotation:1.6.0") From b465ee588b519eeae65fed3e17da89d3b1376753 Mon Sep 17 00:00:00 2001 From: Quentin Hibon Date: Tue, 8 Aug 2023 19:48:04 +0200 Subject: [PATCH 17/80] Update dependabot.yml Increase PR limit from 5 (default) to 10 for gradle --- .github/dependabot.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index f770db0a4..430126a0e 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -4,6 +4,7 @@ updates: directory: "/" schedule: interval: "monthly" + open-pull-requests-limit: 10 - package-ecosystem: "github-actions" directory: "/" schedule: From 5add03bf2310f84d840cfb0e8ffd67af9e3885ce Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 8 Aug 2023 17:38:27 +0000 Subject: [PATCH 18/80] Bump org.junit.jupiter:junit-jupiter from 5.8.1 to 5.10.0 Bumps [org.junit.jupiter:junit-jupiter](https://github.com/junit-team/junit5) from 5.8.1 to 5.10.0. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.8.1...r5.10.0) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- uhabits-core/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uhabits-core/build.gradle.kts b/uhabits-core/build.gradle.kts index 5350965f8..9756ef058 100644 --- a/uhabits-core/build.gradle.kts +++ b/uhabits-core/build.gradle.kts @@ -62,7 +62,7 @@ kotlin { implementation("org.hamcrest:hamcrest:2.2") implementation("org.apache.commons:commons-io:1.3.2") implementation("org.mockito.kotlin:mockito-kotlin:4.1.0") - implementation("org.junit.jupiter:junit-jupiter:5.8.1") + implementation("org.junit.jupiter:junit-jupiter:5.10.0") } } } From b53ef758ecdc58268c7bd78aaae836107a2a3d21 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 8 Aug 2023 17:49:07 +0000 Subject: [PATCH 19/80] Bump ch.qos.logback:logback-classic from 1.4.5 to 1.4.9 Bumps [ch.qos.logback:logback-classic](https://github.com/qos-ch/logback) from 1.4.5 to 1.4.9. - [Commits](https://github.com/qos-ch/logback/compare/v_1.4.5...v_1.4.9) --- updated-dependencies: - dependency-name: ch.qos.logback:logback-classic dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- uhabits-server/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uhabits-server/build.gradle.kts b/uhabits-server/build.gradle.kts index a96d02131..f09768e3d 100644 --- a/uhabits-server/build.gradle.kts +++ b/uhabits-server/build.gradle.kts @@ -35,7 +35,7 @@ application { dependencies { val ktorVersion = "1.6.8" val kotlinVersion = "1.7.21" - val logbackVersion = "1.4.5" + val logbackVersion = "1.4.9" implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion") implementation("io.ktor:ktor-server-netty:$ktorVersion") implementation("ch.qos.logback:logback-classic:$logbackVersion") From 5cd616f9670e7dff5eb48dc1db09b8673d94a318 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 8 Aug 2023 17:49:15 +0000 Subject: [PATCH 20/80] Bump org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm Bumps [org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm](https://github.com/Kotlin/kotlinx.coroutines) from 1.6.4 to 1.7.3. - [Release notes](https://github.com/Kotlin/kotlinx.coroutines/releases) - [Changelog](https://github.com/Kotlin/kotlinx.coroutines/blob/master/CHANGES.md) - [Commits](https://github.com/Kotlin/kotlinx.coroutines/compare/1.6.4...1.7.3) --- updated-dependencies: - dependency-name: org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- uhabits-core/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uhabits-core/build.gradle.kts b/uhabits-core/build.gradle.kts index 9756ef058..5c20c59ce 100644 --- a/uhabits-core/build.gradle.kts +++ b/uhabits-core/build.gradle.kts @@ -45,7 +45,7 @@ kotlin { implementation(kotlin("stdlib-jdk8")) compileOnly("com.google.dagger:dagger:2.47") implementation("com.google.guava:guava:32.1.2-android") - implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.6.4") + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3") implementation("androidx.annotation:annotation:1.6.0") implementation("com.google.code.findbugs:jsr305:3.0.2") implementation("com.opencsv:opencsv:5.8") From f0e8643e6be96e7f7d3ab1a8cc71ba9651506af3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 8 Aug 2023 17:49:22 +0000 Subject: [PATCH 21/80] Bump com.google.android.material:material from 1.8.0 to 1.9.0 Bumps [com.google.android.material:material](https://github.com/material-components/material-components-android) from 1.8.0 to 1.9.0. - [Release notes](https://github.com/material-components/material-components-android/releases) - [Commits](https://github.com/material-components/material-components-android/compare/1.8.0...1.9.0) --- updated-dependencies: - dependency-name: com.google.android.material:material dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- uhabits-android/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uhabits-android/build.gradle.kts b/uhabits-android/build.gradle.kts index fe4a7a196..ece9bae2c 100644 --- a/uhabits-android/build.gradle.kts +++ b/uhabits-android/build.gradle.kts @@ -112,7 +112,7 @@ dependencies { implementation("androidx.appcompat:appcompat:1.5.1") implementation("androidx.legacy:legacy-preference-v14:1.0.0") implementation("androidx.legacy:legacy-support-v4:1.0.0") - implementation("com.google.android.material:material:1.8.0") + implementation("com.google.android.material:material:1.9.0") implementation("com.opencsv:opencsv:5.8") implementation(project(":uhabits-core")) kapt("com.google.dagger:dagger-compiler:$daggerVersion") From b2fc79a3abb7259f8cb54649488b1887f368edd4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 8 Aug 2023 17:48:53 +0000 Subject: [PATCH 22/80] Bump com.github.triplet.play from 3.7.0 to 3.8.4 Bumps com.github.triplet.play from 3.7.0 to 3.8.4. --- updated-dependencies: - dependency-name: com.github.triplet.play dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- uhabits-android/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uhabits-android/build.gradle.kts b/uhabits-android/build.gradle.kts index ece9bae2c..d713eb8a2 100644 --- a/uhabits-android/build.gradle.kts +++ b/uhabits-android/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("com.github.triplet.play") version "3.7.0" + id("com.github.triplet.play") version "3.8.4" id("com.android.application") version "7.4.2" id("org.jetbrains.kotlin.android") id("org.jetbrains.kotlin.kapt") From 334dabb40792a974b913190e6e57c436b9300cae Mon Sep 17 00:00:00 2001 From: Felix Schlegel <40503329+Slartibartfass2@users.noreply.github.com> Date: Fri, 18 Aug 2023 18:35:54 +0200 Subject: [PATCH 23/80] Use default locale instead of hardcoded US locale (#1763) --- .../isoron/uhabits/activities/habits/show/views/BarCardView.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/BarCardView.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/BarCardView.kt index 980f6c1d1..f9e857261 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/BarCardView.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/views/BarCardView.kt @@ -38,7 +38,7 @@ class BarCardView(context: Context, attrs: AttributeSet) : LinearLayout(context, fun setState(state: BarCardState) { val androidColor = state.theme.color(state.color).toInt() - binding.chart.view = BarChart(state.theme, JavaLocalDateFormatter(Locale.US)).apply { + binding.chart.view = BarChart(state.theme, JavaLocalDateFormatter(Locale.getDefault())).apply { series = mutableListOf(state.entries.map { it.value / 1000.0 }) colors = mutableListOf(theme.color(state.color.paletteIndex)) axis = state.entries.map { it.timestamp.toLocalDate() } From b0a4284b66d1f407d457dfb1d7be828615a049bd Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Sat, 8 Jul 2023 18:05:01 -0500 Subject: [PATCH 24/80] NumberDialog: Use text input on Samsung devices Fixes #1719 --- .../uhabits/activities/common/dialogs/NumberDialog.kt | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/NumberDialog.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/NumberDialog.kt index 38c0a5756..423e90958 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/NumberDialog.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/dialogs/NumberDialog.kt @@ -2,11 +2,13 @@ package org.isoron.uhabits.activities.common.dialogs import android.app.Dialog import android.os.Bundle +import android.provider.Settings import android.text.method.DigitsKeyListener import android.view.KeyEvent import android.view.LayoutInflater import android.view.MotionEvent import android.view.View +import android.view.inputmethod.EditorInfo import androidx.appcompat.app.AppCompatDialogFragment import org.isoron.uhabits.HabitsApplication import org.isoron.uhabits.R @@ -86,6 +88,15 @@ class NumberDialog : AppCompatDialogFragment() { // https://stackoverflow.com/a/34256139 val separator = DecimalFormatSymbols.getInstance().decimalSeparator view.value.keyListener = DigitsKeyListener.getInstance("0123456789$separator") + + // https://github.com/flutter/flutter/issues/61175 + val currKeyboard = Settings.Secure.getString( + requireContext().contentResolver, + Settings.Secure.DEFAULT_INPUT_METHOD + ) + if (currKeyboard.contains("swiftkey") || currKeyboard.contains("samsung")) { + view.value.inputType = EditorInfo.TYPE_CLASS_TEXT + } } fun save() { From 8801960615dccbb3d9277f7f1685d7df66121e88 Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Mon, 28 Aug 2023 05:43:12 -0500 Subject: [PATCH 25/80] Update CHANGELOG --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bbc344341..d927bfe39 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## [2.1.3] -- 2023-08-28 +### Fixed +- Use text input on Samsung devices (@iSoron, #1719) +- Prevent crash if alarm permission is revoked (@iSoron) +- Adjust widget colors (@iSoron) +- Fix bug preventing screens from updating at midnight (@iSoron) +- Fix skip button in locales that use comma instead of dot (@iSoron, #1721) + ## [2.1.2] -- 2023-05-26 ### Fixed - Fix bug that caused widget to enter checkmark on wrong date (@iSoron, #1541) From cc7178eb215148754da5cea60884e5fbc6daed06 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 1 Sep 2023 03:39:30 +0000 Subject: [PATCH 26/80] Bump daggerVersion from 2.47 to 2.48 Bumps `daggerVersion` from 2.47 to 2.48. Updates `com.google.dagger:dagger` from 2.47 to 2.48 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.47...dagger-2.48) Updates `com.google.dagger:dagger-compiler` from 2.47 to 2.48 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.47...dagger-2.48) --- updated-dependencies: - dependency-name: com.google.dagger:dagger dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: com.google.dagger:dagger-compiler dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- uhabits-android/build.gradle.kts | 2 +- uhabits-core/build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/uhabits-android/build.gradle.kts b/uhabits-android/build.gradle.kts index d713eb8a2..7dfbee50b 100644 --- a/uhabits-android/build.gradle.kts +++ b/uhabits-android/build.gradle.kts @@ -79,7 +79,7 @@ android { } dependencies { - val daggerVersion = "2.47" + val daggerVersion = "2.48" val kotlinVersion = "1.7.21" val kxCoroutinesVersion = "1.7.3" val ktorVersion = "1.6.8" diff --git a/uhabits-core/build.gradle.kts b/uhabits-core/build.gradle.kts index 5c20c59ce..1eb749305 100644 --- a/uhabits-core/build.gradle.kts +++ b/uhabits-core/build.gradle.kts @@ -43,7 +43,7 @@ kotlin { val jvmMain by getting { dependencies { implementation(kotlin("stdlib-jdk8")) - compileOnly("com.google.dagger:dagger:2.47") + compileOnly("com.google.dagger:dagger:2.48") implementation("com.google.guava:guava:32.1.2-android") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3") implementation("androidx.annotation:annotation:1.6.0") From 248ff2ec62da8e76071413c2f771bd9409ddad35 Mon Sep 17 00:00:00 2001 From: Quentin Hibon Date: Tue, 8 Aug 2023 22:04:29 +0200 Subject: [PATCH 27/80] Bump mockito-kotlin from 2.2.11 to 4.1.0 in -server --- uhabits-server/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uhabits-server/build.gradle.kts b/uhabits-server/build.gradle.kts index f09768e3d..2db1384e6 100644 --- a/uhabits-server/build.gradle.kts +++ b/uhabits-server/build.gradle.kts @@ -47,7 +47,7 @@ dependencies { implementation("io.prometheus:simpleclient_httpserver:0.16.0") implementation("io.prometheus:simpleclient_hotspot:0.16.0") testImplementation("io.ktor:ktor-server-tests:$ktorVersion") - testImplementation("org.mockito.kotlin:mockito-kotlin:2.2.11") + testImplementation("org.mockito.kotlin:mockito-kotlin:4.1.0") testImplementation(kotlin("test")) testImplementation(kotlin("test-junit")) } From 4139f09fb7b5b3b530aac85fa36fff5f1b445c35 Mon Sep 17 00:00:00 2001 From: Quentin Hibon Date: Tue, 8 Aug 2023 22:12:38 +0200 Subject: [PATCH 28/80] Add @Deprecated when overriding @Deprecated methods --- .../uhabits/activities/habits/list/ListHabitsActivity.kt | 1 + .../isoron/uhabits/activities/settings/SettingsFragment.kt | 2 ++ .../main/java/org/isoron/uhabits/tasks/AndroidTaskRunner.kt | 4 ++++ 3 files changed, 7 insertions(+) diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.kt index b7ca3235f..918e28180 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.kt @@ -127,6 +127,7 @@ class ListHabitsActivity : AppCompatActivity(), Preferences.Listener { return menu.onItemSelected(item) } + @Deprecated("Deprecated in Java") override fun onActivityResult(request: Int, result: Int, data: Intent?) { super.onActivityResult(request, result, data) screen.onResult(request, result, data) diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/settings/SettingsFragment.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/settings/SettingsFragment.kt index e67f6a567..0fc1f43c8 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/settings/SettingsFragment.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/settings/SettingsFragment.kt @@ -53,6 +53,8 @@ class SettingsFragment : PreferenceFragmentCompat(), OnSharedPreferenceChangeLis private var ringtoneManager: RingtoneManager? = null private lateinit var prefs: Preferences private var widgetUpdater: WidgetUpdater? = null + + @Deprecated("Deprecated in Java") override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { if (requestCode == RINGTONE_REQUEST_CODE) { ringtoneManager!!.update(data) diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/tasks/AndroidTaskRunner.kt b/uhabits-android/src/main/java/org/isoron/uhabits/tasks/AndroidTaskRunner.kt index aa96604c2..70abc8f7f 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/tasks/AndroidTaskRunner.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/tasks/AndroidTaskRunner.kt @@ -60,12 +60,14 @@ class AndroidTaskRunner : TaskRunner { publishProgress(progress) } + @Deprecated("Deprecated in Java") override fun doInBackground(vararg params: Void?): Void? { if (isCancelled) return null task.doInBackground() return null } + @Deprecated("Deprecated in Java") override fun onPostExecute(aVoid: Void?) { if (isCancelled) return task.onPostExecute() @@ -74,6 +76,7 @@ class AndroidTaskRunner : TaskRunner { for (l in listeners) l.onTaskFinished(task) } + @Deprecated("Deprecated in Java") override fun onPreExecute() { if (isCancelled) return for (l in listeners) l.onTaskStarted(task) @@ -82,6 +85,7 @@ class AndroidTaskRunner : TaskRunner { task.onPreExecute() } + @Deprecated("Deprecated in Java") override fun onProgressUpdate(vararg values: Int?) { values[0]?.let { task.onProgressUpdate(it) } } From 3b0fba12f5c77cccd091459ac5c91a73e5bbc49f Mon Sep 17 00:00:00 2001 From: Quentin Hibon Date: Tue, 8 Aug 2023 22:24:16 +0200 Subject: [PATCH 29/80] Remove unused imports in datetimepicker --- .../java/com/android/datetimepicker/date/DayPickerView.java | 1 - .../main/java/com/android/datetimepicker/date/MonthView.java | 3 +-- .../java/com/android/datetimepicker/time/AmPmCirclesView.java | 1 - .../com/android/datetimepicker/time/RadialPickerLayout.java | 1 - 4 files changed, 1 insertion(+), 5 deletions(-) diff --git a/uhabits-android/src/main/java/com/android/datetimepicker/date/DayPickerView.java b/uhabits-android/src/main/java/com/android/datetimepicker/date/DayPickerView.java index b18c358b0..1433f849f 100644 --- a/uhabits-android/src/main/java/com/android/datetimepicker/date/DayPickerView.java +++ b/uhabits-android/src/main/java/com/android/datetimepicker/date/DayPickerView.java @@ -22,7 +22,6 @@ import java.util.Locale; import android.annotation.SuppressLint; import android.content.Context; -import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.util.AttributeSet; diff --git a/uhabits-android/src/main/java/com/android/datetimepicker/date/MonthView.java b/uhabits-android/src/main/java/com/android/datetimepicker/date/MonthView.java index b9df53cce..c3052fdde 100644 --- a/uhabits-android/src/main/java/com/android/datetimepicker/date/MonthView.java +++ b/uhabits-android/src/main/java/com/android/datetimepicker/date/MonthView.java @@ -23,14 +23,13 @@ import android.graphics.Paint.*; import android.os.*; import androidx.core.view.*; import androidx.core.view.accessibility.*; -import androidx.core.widget.*; + import android.text.format.*; import android.view.*; import android.view.accessibility.*; import androidx.customview.widget.ExploreByTouchHelper; -import com.android.*; import com.android.datetimepicker.*; import com.android.datetimepicker.date.MonthAdapter.*; diff --git a/uhabits-android/src/main/java/com/android/datetimepicker/time/AmPmCirclesView.java b/uhabits-android/src/main/java/com/android/datetimepicker/time/AmPmCirclesView.java index ad9f6ce2e..2cebe7cfa 100644 --- a/uhabits-android/src/main/java/com/android/datetimepicker/time/AmPmCirclesView.java +++ b/uhabits-android/src/main/java/com/android/datetimepicker/time/AmPmCirclesView.java @@ -23,7 +23,6 @@ import android.graphics.Paint.*; import android.util.*; import android.view.*; -import com.android.*; import com.android.datetimepicker.*; import org.isoron.uhabits.R; diff --git a/uhabits-android/src/main/java/com/android/datetimepicker/time/RadialPickerLayout.java b/uhabits-android/src/main/java/com/android/datetimepicker/time/RadialPickerLayout.java index e18ee1143..bbd171a07 100644 --- a/uhabits-android/src/main/java/com/android/datetimepicker/time/RadialPickerLayout.java +++ b/uhabits-android/src/main/java/com/android/datetimepicker/time/RadialPickerLayout.java @@ -28,7 +28,6 @@ import android.view.View.*; import android.view.accessibility.*; import android.widget.*; -import com.android.*; import com.android.datetimepicker.*; import org.isoron.uhabits.R; From a9f028a34b67d7af412710def2f48188d6ef0c94 Mon Sep 17 00:00:00 2001 From: Quentin Hibon Date: Tue, 8 Aug 2023 22:28:03 +0200 Subject: [PATCH 30/80] Target JVM 11 --- uhabits-android/build.gradle.kts | 18 ++++++++++++++++-- uhabits-core/build.gradle.kts | 3 ++- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/uhabits-android/build.gradle.kts b/uhabits-android/build.gradle.kts index 7dfbee50b..26d785db5 100644 --- a/uhabits-android/build.gradle.kts +++ b/uhabits-android/build.gradle.kts @@ -29,6 +29,17 @@ tasks.compileLint { dependsOn("updateTranslators") } +/* +Added on top of kotlinOptions to work around this issue: +https://youtrack.jetbrains.com/issue/KTIJ-24311/task-current-target-is-17-and-kaptGenerateStubsProductionDebugKotlin-task-current-target-is-1.8-jvm-target-compatibility-should#focus=Comments-27-6798448.0-0 +Updating gradle might fix this, so try again in the future to remove this and run: +./gradlew --rerun-tasks :uhabits-android:kaptGenerateStubsReleaseKotlin +If this doesn't produce any warning, try to remove it. + */ +kotlin { + jvmToolchain(11) +} + android { compileSdk = 32 @@ -69,8 +80,11 @@ android { compileOptions { isCoreLibraryDesugaringEnabled = true - targetCompatibility(JavaVersion.VERSION_1_8) - sourceCompatibility(JavaVersion.VERSION_1_8) + targetCompatibility(JavaVersion.VERSION_11) + sourceCompatibility(JavaVersion.VERSION_11) + } + kotlinOptions { + jvmTarget = JavaVersion.VERSION_11.toString() } buildFeatures { diff --git a/uhabits-core/build.gradle.kts b/uhabits-core/build.gradle.kts index 1eb749305..caa41617c 100644 --- a/uhabits-core/build.gradle.kts +++ b/uhabits-core/build.gradle.kts @@ -24,6 +24,7 @@ plugins { kotlin { jvm().withJava() + jvmToolchain(11) sourceSets { val commonMain by getting { @@ -61,7 +62,7 @@ kotlin { implementation("org.xerial:sqlite-jdbc:3.42.0.0") implementation("org.hamcrest:hamcrest:2.2") implementation("org.apache.commons:commons-io:1.3.2") - implementation("org.mockito.kotlin:mockito-kotlin:4.1.0") + implementation("org.mockito.kotlin:mockito-kotlin:5.0.0") implementation("org.junit.jupiter:junit-jupiter:5.10.0") } } From a013635224a9fca83f8f638dda685ddde1e5e239 Mon Sep 17 00:00:00 2001 From: Quentin Hibon Date: Tue, 8 Aug 2023 22:53:27 +0200 Subject: [PATCH 31/80] Bump mockito-kotlin from 4.1.0 to 5.0.0 --- uhabits-android/build.gradle.kts | 4 ++-- uhabits-server/build.gradle.kts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/uhabits-android/build.gradle.kts b/uhabits-android/build.gradle.kts index 26d785db5..6c3e81e1e 100644 --- a/uhabits-android/build.gradle.kts +++ b/uhabits-android/build.gradle.kts @@ -109,7 +109,7 @@ dependencies { androidTestImplementation("androidx.test.ext:junit:1.1.5") androidTestImplementation("androidx.test.uiautomator:uiautomator:2.2.0") androidTestImplementation("androidx.test:rules:1.5.0") - androidTestImplementation("org.mockito.kotlin:mockito-kotlin:4.1.0") + androidTestImplementation("org.mockito.kotlin:mockito-kotlin:5.0.0") compileOnly("javax.annotation:jsr250-api:1.0") coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.3") implementation("com.github.AppIntro:AppIntro:6.2.0") @@ -133,7 +133,7 @@ dependencies { kaptAndroidTest("com.google.dagger:dagger-compiler:$daggerVersion") testImplementation("com.google.dagger:dagger:$daggerVersion") testImplementation("junit:junit:4.13.2") - testImplementation("org.mockito.kotlin:mockito-kotlin:4.1.0") + testImplementation("org.mockito.kotlin:mockito-kotlin:5.0.0") } kapt { diff --git a/uhabits-server/build.gradle.kts b/uhabits-server/build.gradle.kts index 2db1384e6..00dd57706 100644 --- a/uhabits-server/build.gradle.kts +++ b/uhabits-server/build.gradle.kts @@ -47,7 +47,7 @@ dependencies { implementation("io.prometheus:simpleclient_httpserver:0.16.0") implementation("io.prometheus:simpleclient_hotspot:0.16.0") testImplementation("io.ktor:ktor-server-tests:$ktorVersion") - testImplementation("org.mockito.kotlin:mockito-kotlin:4.1.0") + testImplementation("org.mockito.kotlin:mockito-kotlin:5.0.0") testImplementation(kotlin("test")) testImplementation(kotlin("test-junit")) } From b51f6abfce30a015163ce3ccf8687f3bcae8c7e8 Mon Sep 17 00:00:00 2001 From: Quentin Hibon Date: Wed, 9 Aug 2023 00:30:07 +0200 Subject: [PATCH 32/80] Target JVM 17 in uhabits-server --- uhabits-server/build.gradle.kts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/uhabits-server/build.gradle.kts b/uhabits-server/build.gradle.kts index 00dd57706..c022dc3a9 100644 --- a/uhabits-server/build.gradle.kts +++ b/uhabits-server/build.gradle.kts @@ -25,6 +25,10 @@ plugins { id("com.github.johnrengelman.shadow") version "7.1.2" } +kotlin { + jvmToolchain(17) +} + application { group = "org.isoron.uhabits" @@ -57,3 +61,4 @@ tasks.withType { archiveClassifier.set("") archiveVersion.set("") } + From ef7454ae7556a7f3f3e77f6613752b49955b8ecf Mon Sep 17 00:00:00 2001 From: Quentin Hibon Date: Wed, 9 Aug 2023 00:14:10 +0200 Subject: [PATCH 33/80] Bump kotlin from 1.7.21 to 1.8.20 --- build.gradle.kts | 2 +- uhabits-android/build.gradle.kts | 2 +- uhabits-server/build.gradle.kts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 651afb945..858ef5b05 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - val kotlinVersion = "1.7.21" + val kotlinVersion = "1.8.20" id("com.android.application") version "7.4.2" apply (false) id("org.jetbrains.kotlin.android") version kotlinVersion apply (false) id("org.jetbrains.kotlin.kapt") version kotlinVersion apply (false) diff --git a/uhabits-android/build.gradle.kts b/uhabits-android/build.gradle.kts index 6c3e81e1e..bae9f482d 100644 --- a/uhabits-android/build.gradle.kts +++ b/uhabits-android/build.gradle.kts @@ -94,7 +94,7 @@ android { dependencies { val daggerVersion = "2.48" - val kotlinVersion = "1.7.21" + val kotlinVersion = "1.8.20" val kxCoroutinesVersion = "1.7.3" val ktorVersion = "1.6.8" val espressoVersion = "3.5.1" diff --git a/uhabits-server/build.gradle.kts b/uhabits-server/build.gradle.kts index c022dc3a9..c19e68c69 100644 --- a/uhabits-server/build.gradle.kts +++ b/uhabits-server/build.gradle.kts @@ -38,7 +38,7 @@ application { dependencies { val ktorVersion = "1.6.8" - val kotlinVersion = "1.7.21" + val kotlinVersion = "1.8.20" val logbackVersion = "1.4.9" implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion") implementation("io.ktor:ktor-server-netty:$ktorVersion") From 8a9b719c501b2b2ebdb116b268521d4d451a2c14 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 Sep 2023 19:07:22 +0000 Subject: [PATCH 34/80] Bump org.mockito.kotlin:mockito-kotlin from 2.2.11 to 5.1.0 Bumps [org.mockito.kotlin:mockito-kotlin](https://github.com/mockito/mockito-kotlin) from 2.2.11 to 5.1.0. - [Release notes](https://github.com/mockito/mockito-kotlin/releases) - [Commits](https://github.com/mockito/mockito-kotlin/compare/2.2.11...5.1.0) --- updated-dependencies: - dependency-name: org.mockito.kotlin:mockito-kotlin dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- uhabits-android/build.gradle.kts | 4 ++-- uhabits-core/build.gradle.kts | 2 +- uhabits-server/build.gradle.kts | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/uhabits-android/build.gradle.kts b/uhabits-android/build.gradle.kts index bae9f482d..2cb5be48a 100644 --- a/uhabits-android/build.gradle.kts +++ b/uhabits-android/build.gradle.kts @@ -109,7 +109,7 @@ dependencies { androidTestImplementation("androidx.test.ext:junit:1.1.5") androidTestImplementation("androidx.test.uiautomator:uiautomator:2.2.0") androidTestImplementation("androidx.test:rules:1.5.0") - androidTestImplementation("org.mockito.kotlin:mockito-kotlin:5.0.0") + androidTestImplementation("org.mockito.kotlin:mockito-kotlin:5.1.0") compileOnly("javax.annotation:jsr250-api:1.0") coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.3") implementation("com.github.AppIntro:AppIntro:6.2.0") @@ -133,7 +133,7 @@ dependencies { kaptAndroidTest("com.google.dagger:dagger-compiler:$daggerVersion") testImplementation("com.google.dagger:dagger:$daggerVersion") testImplementation("junit:junit:4.13.2") - testImplementation("org.mockito.kotlin:mockito-kotlin:5.0.0") + testImplementation("org.mockito.kotlin:mockito-kotlin:5.1.0") } kapt { diff --git a/uhabits-core/build.gradle.kts b/uhabits-core/build.gradle.kts index caa41617c..505605e91 100644 --- a/uhabits-core/build.gradle.kts +++ b/uhabits-core/build.gradle.kts @@ -62,7 +62,7 @@ kotlin { implementation("org.xerial:sqlite-jdbc:3.42.0.0") implementation("org.hamcrest:hamcrest:2.2") implementation("org.apache.commons:commons-io:1.3.2") - implementation("org.mockito.kotlin:mockito-kotlin:5.0.0") + implementation("org.mockito.kotlin:mockito-kotlin:5.1.0") implementation("org.junit.jupiter:junit-jupiter:5.10.0") } } diff --git a/uhabits-server/build.gradle.kts b/uhabits-server/build.gradle.kts index c19e68c69..c5434de6d 100644 --- a/uhabits-server/build.gradle.kts +++ b/uhabits-server/build.gradle.kts @@ -51,7 +51,7 @@ dependencies { implementation("io.prometheus:simpleclient_httpserver:0.16.0") implementation("io.prometheus:simpleclient_hotspot:0.16.0") testImplementation("io.ktor:ktor-server-tests:$ktorVersion") - testImplementation("org.mockito.kotlin:mockito-kotlin:5.0.0") + testImplementation("org.mockito.kotlin:mockito-kotlin:5.1.0") testImplementation(kotlin("test")) testImplementation(kotlin("test-junit")) } From b0944d3f1c102a8eeb3cde0f3b9ec89bc9fd62b9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Oct 2023 03:40:07 +0000 Subject: [PATCH 35/80] Bump actions/checkout from 3 to 4 Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 88be81258..1ddde7a9e 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -12,7 +12,7 @@ jobs: timeout-minutes: 30 steps: - name: Check out source code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Build project run: ./build.sh build From 21a512ae715f925810d857bad791ef607977e9c2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Oct 2023 03:23:30 +0000 Subject: [PATCH 36/80] Bump androidx.annotation:annotation from 1.6.0 to 1.7.0 Bumps androidx.annotation:annotation from 1.6.0 to 1.7.0. --- updated-dependencies: - dependency-name: androidx.annotation:annotation dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- uhabits-android/build.gradle.kts | 2 +- uhabits-core/build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/uhabits-android/build.gradle.kts b/uhabits-android/build.gradle.kts index 2cb5be48a..81e8599d4 100644 --- a/uhabits-android/build.gradle.kts +++ b/uhabits-android/build.gradle.kts @@ -105,7 +105,7 @@ dependencies { androidTestImplementation("com.linkedin.dexmaker:dexmaker-mockito:2.28.3") androidTestImplementation("io.ktor:ktor-client-mock:$ktorVersion") androidTestImplementation("io.ktor:ktor-jackson:$ktorVersion") - androidTestImplementation("androidx.annotation:annotation:1.6.0") + androidTestImplementation("androidx.annotation:annotation:1.7.0") androidTestImplementation("androidx.test.ext:junit:1.1.5") androidTestImplementation("androidx.test.uiautomator:uiautomator:2.2.0") androidTestImplementation("androidx.test:rules:1.5.0") diff --git a/uhabits-core/build.gradle.kts b/uhabits-core/build.gradle.kts index 505605e91..142c7e96d 100644 --- a/uhabits-core/build.gradle.kts +++ b/uhabits-core/build.gradle.kts @@ -47,7 +47,7 @@ kotlin { compileOnly("com.google.dagger:dagger:2.48") implementation("com.google.guava:guava:32.1.2-android") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3") - implementation("androidx.annotation:annotation:1.6.0") + implementation("androidx.annotation:annotation:1.7.0") implementation("com.google.code.findbugs:jsr305:3.0.2") implementation("com.opencsv:opencsv:5.8") implementation("commons-codec:commons-codec:1.16.0") From b32a6ad1b86033d3f7149f717d0b6ab4dd8f9134 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 1 Oct 2023 03:22:53 +0000 Subject: [PATCH 37/80] Bump org.jlleitschuh.gradle.ktlint from 11.5.1 to 11.6.0 Bumps org.jlleitschuh.gradle.ktlint from 11.5.1 to 11.6.0. --- updated-dependencies: - dependency-name: org.jlleitschuh.gradle.ktlint dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index 858ef5b05..c871a1ca6 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,7 +4,7 @@ plugins { id("org.jetbrains.kotlin.android") version kotlinVersion apply (false) id("org.jetbrains.kotlin.kapt") version kotlinVersion apply (false) id("org.jetbrains.kotlin.multiplatform") version kotlinVersion apply (false) - id("org.jlleitschuh.gradle.ktlint") version "11.5.1" + id("org.jlleitschuh.gradle.ktlint") version "11.6.0" } apply { From 773524752196d3cfde12fca05bc79fdbf3416825 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 1 Nov 2023 03:54:13 +0000 Subject: [PATCH 38/80] Bump daggerVersion from 2.48 to 2.48.1 Bumps `daggerVersion` from 2.48 to 2.48.1. Updates `com.google.dagger:dagger` from 2.48 to 2.48.1 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.48...dagger-2.48.1) Updates `com.google.dagger:dagger-compiler` from 2.48 to 2.48.1 - [Release notes](https://github.com/google/dagger/releases) - [Changelog](https://github.com/google/dagger/blob/master/CHANGELOG.md) - [Commits](https://github.com/google/dagger/compare/dagger-2.48...dagger-2.48.1) --- updated-dependencies: - dependency-name: com.google.dagger:dagger dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: com.google.dagger:dagger-compiler dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- uhabits-android/build.gradle.kts | 2 +- uhabits-core/build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/uhabits-android/build.gradle.kts b/uhabits-android/build.gradle.kts index 81e8599d4..ac7b5cfaf 100644 --- a/uhabits-android/build.gradle.kts +++ b/uhabits-android/build.gradle.kts @@ -93,7 +93,7 @@ android { } dependencies { - val daggerVersion = "2.48" + val daggerVersion = "2.48.1" val kotlinVersion = "1.8.20" val kxCoroutinesVersion = "1.7.3" val ktorVersion = "1.6.8" diff --git a/uhabits-core/build.gradle.kts b/uhabits-core/build.gradle.kts index 142c7e96d..b19a3f32f 100644 --- a/uhabits-core/build.gradle.kts +++ b/uhabits-core/build.gradle.kts @@ -44,7 +44,7 @@ kotlin { val jvmMain by getting { dependencies { implementation(kotlin("stdlib-jdk8")) - compileOnly("com.google.dagger:dagger:2.48") + compileOnly("com.google.dagger:dagger:2.48.1") implementation("com.google.guava:guava:32.1.2-android") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3") implementation("androidx.annotation:annotation:1.7.0") From ed8c60e52f9de447a7877b6b6d78c4c9b179c3e1 Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Sat, 25 Nov 2023 07:06:47 -0600 Subject: [PATCH 39/80] Implement runtime notification permission; bump targetSdk to 33 --- uhabits-android/build.gradle.kts | 4 +- .../common/views/FrequencyChartTest.kt | 4 +- .../activities/common/views/ScoreChartTest.kt | 4 +- uhabits-android/src/main/AndroidManifest.xml | 1 + .../isoron/platform/gui/AndroidDataView.kt | 24 +++++------ .../common/views/ScrollableChart.kt | 2 +- .../habits/list/ListHabitsActivity.kt | 40 ++++++++++++++++++- .../core/reminders/ReminderScheduler.kt | 5 +++ 8 files changed, 66 insertions(+), 18 deletions(-) diff --git a/uhabits-android/build.gradle.kts b/uhabits-android/build.gradle.kts index ac7b5cfaf..12c91c3f2 100644 --- a/uhabits-android/build.gradle.kts +++ b/uhabits-android/build.gradle.kts @@ -42,13 +42,13 @@ kotlin { android { - compileSdk = 32 + compileSdk = 33 defaultConfig { versionCode = 20200 versionName = "2.2.0" minSdk = 28 - targetSdk = 32 + targetSdk = 33 applicationId = "org.isoron.uhabits" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/FrequencyChartTest.kt b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/FrequencyChartTest.kt index 0c4225f99..3fb97bb4c 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/FrequencyChartTest.kt +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/FrequencyChartTest.kt @@ -18,6 +18,7 @@ */ package org.isoron.uhabits.activities.common.views +import android.view.MotionEvent import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.MediumTest import org.isoron.uhabits.BaseViewTest @@ -52,7 +53,8 @@ class FrequencyChartTest : BaseViewTest() { @Test @Throws(Throwable::class) fun testRender_withDataOffset() { - view.onScroll(null, null, -dpToPixels(150), 0f) + val e = MotionEvent.obtain(0, 0, 0, 0f, 0f, 0) + view.onScroll(e, e, -dpToPixels(150), 0f) view.invalidate() assertRenders(view, BASE_PATH + "renderDataOffset.png") } diff --git a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/ScoreChartTest.kt b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/ScoreChartTest.kt index 4f504d8be..83d695ca4 100644 --- a/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/ScoreChartTest.kt +++ b/uhabits-android/src/androidTest/java/org/isoron/uhabits/activities/common/views/ScoreChartTest.kt @@ -18,6 +18,7 @@ */ package org.isoron.uhabits.activities.common.views +import android.view.MotionEvent import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.MediumTest import org.isoron.uhabits.BaseViewTest @@ -63,7 +64,8 @@ class ScoreChartTest : BaseViewTest() { @Test @Throws(Throwable::class) fun testRender_withDataOffset() { - view.onScroll(null, null, -dpToPixels(150), 0f) + val e = MotionEvent.obtain(0, 0, 0, 0f, 0f, 0) + view.onScroll(e, e, -dpToPixels(150), 0f) view.invalidate() assertRenders(view, BASE_PATH + "renderDataOffset.png") } diff --git a/uhabits-android/src/main/AndroidManifest.xml b/uhabits-android/src/main/AndroidManifest.xml index 9377e42c0..dd170e10e 100644 --- a/uhabits-android/src/main/AndroidManifest.xml +++ b/uhabits-android/src/main/AndroidManifest.xml @@ -22,6 +22,7 @@ + abs(dy)) { diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.kt index 918e28180..21936d4ea 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/list/ListHabitsActivity.kt @@ -19,12 +19,17 @@ package org.isoron.uhabits.activities.habits.list +import android.Manifest.permission.POST_NOTIFICATIONS import android.content.Intent +import android.content.pm.PackageManager.PERMISSION_GRANTED +import android.os.Build import android.os.Bundle import android.util.Log import android.view.Menu import android.view.MenuItem +import androidx.activity.result.contract.ActivityResultContracts.RequestPermission import androidx.appcompat.app.AppCompatActivity +import androidx.core.content.ContextCompat.checkSelfPermission import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import org.isoron.uhabits.BaseExceptionHandler @@ -56,6 +61,16 @@ class ListHabitsActivity : AppCompatActivity(), Preferences.Listener { lateinit var midnightTimer: MidnightTimer private val scope = CoroutineScope(Dispatchers.Main) + private var permissionAlreadyRequested = false + private val permissionLauncher = + registerForActivityResult(RequestPermission()) { isGranted: Boolean -> + if (isGranted) { + scheduleReminders() + } else { + Log.i("ListHabitsActivity", "POST_NOTIFICATIONS denied") + } + } + private lateinit var menu: ListHabitsMenu override fun onQuestionMarksChanged() { @@ -101,7 +116,26 @@ class ListHabitsActivity : AppCompatActivity(), Preferences.Listener { screen.onAttached() rootView.postInvalidate() midnightTimer.onResume() - appComponent.reminderScheduler.scheduleAll() + + if (appComponent.reminderScheduler.hasHabitsWithReminders()) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) { + scheduleReminders() + } else { + if (checkSelfPermission(this, POST_NOTIFICATIONS) == PERMISSION_GRANTED) { + scheduleReminders() + } else { + // If we have not requested the permission yet, request it. Otherwide do + // nothing. This check is necessary to avoid an infinite onResume loop in case + // the user denies the permission. + if (!permissionAlreadyRequested) { + Log.i("ListHabitsActivity", "Requestion permission: POST_NOTIFICATIONS") + permissionLauncher.launch(POST_NOTIFICATIONS) + permissionAlreadyRequested = true + } + } + } + } + taskRunner.run { try { AutoBackup(this@ListHabitsActivity).run() @@ -117,6 +151,10 @@ class ListHabitsActivity : AppCompatActivity(), Preferences.Listener { super.onResume() } + private fun scheduleReminders() { + appComponent.reminderScheduler.scheduleAll() + } + override fun onCreateOptionsMenu(m: Menu): Boolean { menu.onCreate(menuInflater, m) return true diff --git a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/reminders/ReminderScheduler.kt b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/reminders/ReminderScheduler.kt index 8318429f6..bae15bb00 100644 --- a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/reminders/ReminderScheduler.kt +++ b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/reminders/ReminderScheduler.kt @@ -115,6 +115,11 @@ class ReminderScheduler @Inject constructor( for (habit in reminderHabits) schedule(habit) } + @Synchronized + fun hasHabitsWithReminders(): Boolean { + return !habitList.getFiltered(HabitMatcher.WITH_ALARM).isEmpty + } + @Synchronized fun startListening() { commandRunner.addListener(this) From 4975ba27520ece17f0ccb631904e060903480e42 Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Sat, 25 Nov 2023 15:30:07 -0600 Subject: [PATCH 40/80] Add permission: USE_EXACT_ALARM --- uhabits-android/src/main/AndroidManifest.xml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/uhabits-android/src/main/AndroidManifest.xml b/uhabits-android/src/main/AndroidManifest.xml index dd170e10e..0741f7abe 100644 --- a/uhabits-android/src/main/AndroidManifest.xml +++ b/uhabits-android/src/main/AndroidManifest.xml @@ -19,10 +19,11 @@ + + + - - Date: Sat, 25 Nov 2023 15:41:39 -0600 Subject: [PATCH 41/80] API 34: Implement workaround to keep sticky notifications non-dismissible --- .../org/isoron/uhabits/receivers/ReminderController.kt | 8 +++++++- .../java/org/isoron/uhabits/core/ui/NotificationTray.kt | 6 ++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReminderController.kt b/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReminderController.kt index 38ba3a1b4..4937dbc74 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReminderController.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/receivers/ReminderController.kt @@ -66,7 +66,13 @@ class ReminderController @Inject constructor( } fun onDismiss(habit: Habit) { - notificationTray.cancel(habit) + if (preferences.shouldMakeNotificationsSticky()) { + // This is a workaround to keep sticky notifications non-dismissible in Android 14+. + // If the notification is dismissed, we immediately reshow it. + notificationTray.reshow(habit) + } else { + notificationTray.cancel(habit) + } } private fun showSnoozeDelayPicker(habit: Habit, context: Context) { diff --git a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/NotificationTray.kt b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/NotificationTray.kt index 5239ed44b..da5bb018a 100644 --- a/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/NotificationTray.kt +++ b/uhabits-core/src/jvmMain/java/org/isoron/uhabits/core/ui/NotificationTray.kt @@ -89,6 +89,12 @@ class NotificationTray @Inject constructor( } } + fun reshow(habit: Habit) { + active[habit]?.let { + taskRunner.execute(ShowNotificationTask(habit, it)) + } + } + interface SystemTray { fun removeNotification(notificationId: Int) fun showNotification( From dee93fde8f728d69453345f12dd6ff737580d03a Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Mon, 27 Nov 2023 19:46:54 -0600 Subject: [PATCH 42/80] Upgrade to AGP 8.1.4 --- .gitignore | 1 + build.gradle.kts | 2 +- gradle.properties | 3 +++ gradle/wrapper/gradle-wrapper.properties | 2 +- uhabits-android/build.gradle.kts | 3 ++- uhabits-android/src/main/AndroidManifest.xml | 3 +-- 6 files changed, 9 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index 66057054e..8dac68273 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,4 @@ node_modules *xcuserdata* *.sketch crowdin.yml +kotlin-js-store diff --git a/build.gradle.kts b/build.gradle.kts index c871a1ca6..e856455e8 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,6 +1,6 @@ plugins { val kotlinVersion = "1.8.20" - id("com.android.application") version "7.4.2" apply (false) + id("com.android.application") version "8.1.4" apply (false) id("org.jetbrains.kotlin.android") version kotlinVersion apply (false) id("org.jetbrains.kotlin.kapt") version kotlinVersion apply (false) id("org.jetbrains.kotlin.multiplatform") version kotlinVersion apply (false) diff --git a/gradle.properties b/gradle.properties index b54c6c097..cfc7ec4b1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,3 +3,6 @@ org.gradle.daemon=true org.gradle.jvmargs=-Xms2048m -Xmx2048m android.useAndroidX=true android.enableJetifier=true +android.defaults.buildfeatures.buildconfig=true +android.nonTransitiveRClass=false +android.nonFinalResIds=false diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 8049c684f..e411586a5 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/uhabits-android/build.gradle.kts b/uhabits-android/build.gradle.kts index 12c91c3f2..d12b022d1 100644 --- a/uhabits-android/build.gradle.kts +++ b/uhabits-android/build.gradle.kts @@ -19,7 +19,7 @@ plugins { id("com.github.triplet.play") version "3.8.4" - id("com.android.application") version "7.4.2" + id("com.android.application") version "8.1.4" id("org.jetbrains.kotlin.android") id("org.jetbrains.kotlin.kapt") id("org.jlleitschuh.gradle.ktlint") @@ -42,6 +42,7 @@ kotlin { android { + namespace = "org.isoron.uhabits" compileSdk = 33 defaultConfig { diff --git a/uhabits-android/src/main/AndroidManifest.xml b/uhabits-android/src/main/AndroidManifest.xml index 0741f7abe..ab33ce9a2 100644 --- a/uhabits-android/src/main/AndroidManifest.xml +++ b/uhabits-android/src/main/AndroidManifest.xml @@ -16,8 +16,7 @@ ~ You should have received a copy of the GNU General Public License along ~ with this program. If not, see . --> - + From 70fe513e52f89f2770a5de90b8fd03b7015ffbab Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Mon, 27 Nov 2023 20:43:34 -0600 Subject: [PATCH 43/80] Bump targetSdk to 34 --- uhabits-android/build.gradle.kts | 4 ++-- .../src/main/java/org/isoron/platform/gui/AndroidDataView.kt | 4 ++-- .../isoron/uhabits/activities/common/views/ScrollableChart.kt | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/uhabits-android/build.gradle.kts b/uhabits-android/build.gradle.kts index d12b022d1..f3e6a3451 100644 --- a/uhabits-android/build.gradle.kts +++ b/uhabits-android/build.gradle.kts @@ -43,13 +43,13 @@ kotlin { android { namespace = "org.isoron.uhabits" - compileSdk = 33 + compileSdk = 34 defaultConfig { versionCode = 20200 versionName = "2.2.0" minSdk = 28 - targetSdk = 33 + targetSdk = 34 applicationId = "org.isoron.uhabits" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } diff --git a/uhabits-android/src/main/java/org/isoron/platform/gui/AndroidDataView.kt b/uhabits-android/src/main/java/org/isoron/platform/gui/AndroidDataView.kt index 4e09eafcb..ff5f518ff 100644 --- a/uhabits-android/src/main/java/org/isoron/platform/gui/AndroidDataView.kt +++ b/uhabits-android/src/main/java/org/isoron/platform/gui/AndroidDataView.kt @@ -57,7 +57,7 @@ class AndroidDataView( } override fun onScroll( - e1: MotionEvent, + e1: MotionEvent?, e2: MotionEvent, dx: Float, dy: Float @@ -79,7 +79,7 @@ class AndroidDataView( } override fun onFling( - e1: MotionEvent, + e1: MotionEvent?, e2: MotionEvent, velocityX: Float, velocityY: Float diff --git a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/ScrollableChart.kt b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/ScrollableChart.kt index b69e491fe..e0d311a0f 100644 --- a/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/ScrollableChart.kt +++ b/uhabits-android/src/main/java/org/isoron/uhabits/activities/common/views/ScrollableChart.kt @@ -65,7 +65,7 @@ abstract class ScrollableChart : View, GestureDetector.OnGestureListener, Animat } override fun onFling( - e1: MotionEvent, + e1: MotionEvent?, e2: MotionEvent, velocityX: Float, velocityY: Float @@ -116,7 +116,7 @@ abstract class ScrollableChart : View, GestureDetector.OnGestureListener, Animat return BundleSavedState(superState, bundle) } - override fun onScroll(e1: MotionEvent, e2: MotionEvent, dx: Float, dy: Float): Boolean { + override fun onScroll(e1: MotionEvent?, e2: MotionEvent, dx: Float, dy: Float): Boolean { var dx = dx if (scrollerBucketSize == 0) return false if (abs(dx) > abs(dy)) { From d01044b2037a87e7caeceb7b9420def5053fd9ba Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Mon, 27 Nov 2023 20:47:48 -0600 Subject: [PATCH 44/80] GH Actions: Add API 34 --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 1ddde7a9e..4fc99df6a 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -18,7 +18,7 @@ jobs: run: ./build.sh build - name: Run Android tests - run: ./build.sh android-tests-parallel 28 29 30 31 32 33 + run: ./build.sh android-tests-parallel 28 29 30 32 33 34 - name: Upload artifacts if: always() From 93363bff968be94f4c739a9ebce517c2eb18b6ac Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Mon, 27 Nov 2023 20:47:48 -0600 Subject: [PATCH 45/80] GH Actions: Add API 34 --- .github/workflows/main.yml | 2 +- build.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 1ddde7a9e..4fc99df6a 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -18,7 +18,7 @@ jobs: run: ./build.sh build - name: Run Android tests - run: ./build.sh android-tests-parallel 28 29 30 31 32 33 + run: ./build.sh android-tests-parallel 28 29 30 32 33 34 - name: Upload artifacts if: always() diff --git a/build.sh b/build.sh index ac81802e1..8943fd001 100755 --- a/build.sh +++ b/build.sh @@ -181,7 +181,7 @@ android_test() { OUT_INSTRUMENT=${ANDROID_OUTPUTS_DIR}/instrument-${API}.txt OUT_LOGCAT=${ANDROID_OUTPUTS_DIR}/logcat-${API}.txt FAILED_TESTS="" - for i in {1..5}; do + for i in {1..10}; do log_info "Running $size instrumented tests (attempt $i)..." $ADB shell am instrument \ -r -e coverage true -e size "$size" $FAILED_TESTS \ From 4bd5cee17b15408fcf2f32e34c230e665bd57ced Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Wed, 29 Nov 2023 19:30:32 -0600 Subject: [PATCH 46/80] Update libraries --- uhabits-android/build.gradle.kts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/uhabits-android/build.gradle.kts b/uhabits-android/build.gradle.kts index f3e6a3451..a81b44577 100644 --- a/uhabits-android/build.gradle.kts +++ b/uhabits-android/build.gradle.kts @@ -112,7 +112,7 @@ dependencies { androidTestImplementation("androidx.test:rules:1.5.0") androidTestImplementation("org.mockito.kotlin:mockito-kotlin:5.1.0") compileOnly("javax.annotation:jsr250-api:1.0") - coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.3") + coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.4") implementation("com.github.AppIntro:AppIntro:6.2.0") implementation("com.google.code.findbugs:jsr305:3.0.2") implementation("com.google.dagger:dagger:$daggerVersion") @@ -124,10 +124,10 @@ dependencies { implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:$kxCoroutinesVersion") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:$kxCoroutinesVersion") - implementation("androidx.appcompat:appcompat:1.5.1") + implementation("androidx.appcompat:appcompat:1.6.1") implementation("androidx.legacy:legacy-preference-v14:1.0.0") implementation("androidx.legacy:legacy-support-v4:1.0.0") - implementation("com.google.android.material:material:1.9.0") + implementation("com.google.android.material:material:1.10.0") implementation("com.opencsv:opencsv:5.8") implementation(project(":uhabits-core")) kapt("com.google.dagger:dagger-compiler:$daggerVersion") From 7e7f68282bd9f5f6fed4f699247b95a060431f48 Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Wed, 29 Nov 2023 19:38:21 -0600 Subject: [PATCH 47/80] Update Kotlin --- build.gradle.kts | 2 +- uhabits-android/build.gradle.kts | 2 +- uhabits-server/build.gradle.kts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index e856455e8..57c3a2c17 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,5 +1,5 @@ plugins { - val kotlinVersion = "1.8.20" + val kotlinVersion = "1.9.21" id("com.android.application") version "8.1.4" apply (false) id("org.jetbrains.kotlin.android") version kotlinVersion apply (false) id("org.jetbrains.kotlin.kapt") version kotlinVersion apply (false) diff --git a/uhabits-android/build.gradle.kts b/uhabits-android/build.gradle.kts index a81b44577..aa0002d15 100644 --- a/uhabits-android/build.gradle.kts +++ b/uhabits-android/build.gradle.kts @@ -95,7 +95,7 @@ android { dependencies { val daggerVersion = "2.48.1" - val kotlinVersion = "1.8.20" + val kotlinVersion = "1.9.21" val kxCoroutinesVersion = "1.7.3" val ktorVersion = "1.6.8" val espressoVersion = "3.5.1" diff --git a/uhabits-server/build.gradle.kts b/uhabits-server/build.gradle.kts index c5434de6d..4ce1c9add 100644 --- a/uhabits-server/build.gradle.kts +++ b/uhabits-server/build.gradle.kts @@ -38,7 +38,7 @@ application { dependencies { val ktorVersion = "1.6.8" - val kotlinVersion = "1.8.20" + val kotlinVersion = "1.9.21" val logbackVersion = "1.4.9" implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion") implementation("io.ktor:ktor-server-netty:$ktorVersion") From c590734c42451d45f7a75e920259adda4ff61b59 Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Wed, 29 Nov 2023 19:54:00 -0600 Subject: [PATCH 48/80] Update dependencies --- build.gradle.kts | 2 +- uhabits-android/build.gradle.kts | 4 ++-- uhabits-core/build.gradle.kts | 2 +- uhabits-server/build.gradle.kts | 6 ++---- 4 files changed, 6 insertions(+), 8 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 57c3a2c17..e9e5a1b73 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,7 +4,7 @@ plugins { id("org.jetbrains.kotlin.android") version kotlinVersion apply (false) id("org.jetbrains.kotlin.kapt") version kotlinVersion apply (false) id("org.jetbrains.kotlin.multiplatform") version kotlinVersion apply (false) - id("org.jlleitschuh.gradle.ktlint") version "11.6.0" + id("org.jlleitschuh.gradle.ktlint") version "11.6.1" } apply { diff --git a/uhabits-android/build.gradle.kts b/uhabits-android/build.gradle.kts index aa0002d15..7badc00d6 100644 --- a/uhabits-android/build.gradle.kts +++ b/uhabits-android/build.gradle.kts @@ -113,10 +113,10 @@ dependencies { androidTestImplementation("org.mockito.kotlin:mockito-kotlin:5.1.0") compileOnly("javax.annotation:jsr250-api:1.0") coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.4") - implementation("com.github.AppIntro:AppIntro:6.2.0") + implementation("com.github.AppIntro:AppIntro:6.3.1") implementation("com.google.code.findbugs:jsr305:3.0.2") implementation("com.google.dagger:dagger:$daggerVersion") - implementation("com.google.guava:guava:32.1.2-android") + implementation("com.google.guava:guava:32.1.3-android") implementation("io.ktor:ktor-client-android:$ktorVersion") implementation("io.ktor:ktor-client-core:$ktorVersion") implementation("io.ktor:ktor-client-jackson:$ktorVersion") diff --git a/uhabits-core/build.gradle.kts b/uhabits-core/build.gradle.kts index b19a3f32f..e78429ed7 100644 --- a/uhabits-core/build.gradle.kts +++ b/uhabits-core/build.gradle.kts @@ -45,7 +45,7 @@ kotlin { dependencies { implementation(kotlin("stdlib-jdk8")) compileOnly("com.google.dagger:dagger:2.48.1") - implementation("com.google.guava:guava:32.1.2-android") + implementation("com.google.guava:guava:32.1.3-android") implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3") implementation("androidx.annotation:annotation:1.7.0") implementation("com.google.code.findbugs:jsr305:3.0.2") diff --git a/uhabits-server/build.gradle.kts b/uhabits-server/build.gradle.kts index 4ce1c9add..b940105ed 100644 --- a/uhabits-server/build.gradle.kts +++ b/uhabits-server/build.gradle.kts @@ -38,11 +38,9 @@ application { dependencies { val ktorVersion = "1.6.8" - val kotlinVersion = "1.9.21" - val logbackVersion = "1.4.9" - implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlinVersion") + implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.21") implementation("io.ktor:ktor-server-netty:$ktorVersion") - implementation("ch.qos.logback:logback-classic:$logbackVersion") + implementation("ch.qos.logback:logback-classic:1.4.11") implementation("io.ktor:ktor-server-core:$ktorVersion") implementation("io.ktor:ktor-html-builder:$ktorVersion") implementation("io.ktor:ktor-jackson:$ktorVersion") From 8eff782f54dc3e7a199171df51648d67f68b45b0 Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Wed, 29 Nov 2023 20:07:45 -0600 Subject: [PATCH 49/80] Update dependencies --- uhabits-server/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uhabits-server/build.gradle.kts b/uhabits-server/build.gradle.kts index b940105ed..157706c6b 100644 --- a/uhabits-server/build.gradle.kts +++ b/uhabits-server/build.gradle.kts @@ -22,7 +22,7 @@ import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar plugins { application id("kotlin") - id("com.github.johnrengelman.shadow") version "7.1.2" + id("com.github.johnrengelman.shadow") version "8.1.1" } kotlin { From 481a3d57845e331fa15277b02eeac509c4cc4708 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 1 Dec 2023 18:07:03 -0600 Subject: [PATCH 50/80] Bump org.junit.jupiter:junit-jupiter from 5.10.0 to 5.10.1 (#1878) Bumps [org.junit.jupiter:junit-jupiter](https://github.com/junit-team/junit5) from 5.10.0 to 5.10.1. - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.10.0...r5.10.1) --- updated-dependencies: - dependency-name: org.junit.jupiter:junit-jupiter dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- uhabits-core/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uhabits-core/build.gradle.kts b/uhabits-core/build.gradle.kts index e78429ed7..a0a5cff78 100644 --- a/uhabits-core/build.gradle.kts +++ b/uhabits-core/build.gradle.kts @@ -63,7 +63,7 @@ kotlin { implementation("org.hamcrest:hamcrest:2.2") implementation("org.apache.commons:commons-io:1.3.2") implementation("org.mockito.kotlin:mockito-kotlin:5.1.0") - implementation("org.junit.jupiter:junit-jupiter:5.10.0") + implementation("org.junit.jupiter:junit-jupiter:5.10.1") } } } From 8837326d442746a7aa594cabecf4fb3b5d037c5b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 1 Dec 2023 18:07:17 -0600 Subject: [PATCH 51/80] Bump com.opencsv:opencsv from 5.8 to 5.9 (#1880) Bumps com.opencsv:opencsv from 5.8 to 5.9. --- updated-dependencies: - dependency-name: com.opencsv:opencsv dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- uhabits-android/build.gradle.kts | 2 +- uhabits-core/build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/uhabits-android/build.gradle.kts b/uhabits-android/build.gradle.kts index 7badc00d6..fa17306c9 100644 --- a/uhabits-android/build.gradle.kts +++ b/uhabits-android/build.gradle.kts @@ -128,7 +128,7 @@ dependencies { implementation("androidx.legacy:legacy-preference-v14:1.0.0") implementation("androidx.legacy:legacy-support-v4:1.0.0") implementation("com.google.android.material:material:1.10.0") - implementation("com.opencsv:opencsv:5.8") + implementation("com.opencsv:opencsv:5.9") implementation(project(":uhabits-core")) kapt("com.google.dagger:dagger-compiler:$daggerVersion") kaptAndroidTest("com.google.dagger:dagger-compiler:$daggerVersion") diff --git a/uhabits-core/build.gradle.kts b/uhabits-core/build.gradle.kts index a0a5cff78..7e0cb7038 100644 --- a/uhabits-core/build.gradle.kts +++ b/uhabits-core/build.gradle.kts @@ -49,7 +49,7 @@ kotlin { implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.7.3") implementation("androidx.annotation:annotation:1.7.0") implementation("com.google.code.findbugs:jsr305:3.0.2") - implementation("com.opencsv:opencsv:5.8") + implementation("com.opencsv:opencsv:5.9") implementation("commons-codec:commons-codec:1.16.0") implementation("org.apache.commons:commons-lang3:3.13.0") } From 0762699a8605e95d8483c8db08ef9bc7bfaa2a11 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 1 Dec 2023 18:07:26 -0600 Subject: [PATCH 52/80] Bump org.apache.commons:commons-lang3 from 3.13.0 to 3.14.0 (#1881) Bumps org.apache.commons:commons-lang3 from 3.13.0 to 3.14.0. --- updated-dependencies: - dependency-name: org.apache.commons:commons-lang3 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- uhabits-core/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uhabits-core/build.gradle.kts b/uhabits-core/build.gradle.kts index 7e0cb7038..c980dde0f 100644 --- a/uhabits-core/build.gradle.kts +++ b/uhabits-core/build.gradle.kts @@ -51,7 +51,7 @@ kotlin { implementation("com.google.code.findbugs:jsr305:3.0.2") implementation("com.opencsv:opencsv:5.9") implementation("commons-codec:commons-codec:1.16.0") - implementation("org.apache.commons:commons-lang3:3.13.0") + implementation("org.apache.commons:commons-lang3:3.14.0") } } From 3bb119c6ed51798ca94dccc0ec778814d3ee32a3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 1 Dec 2023 18:08:05 -0600 Subject: [PATCH 53/80] Bump com.github.triplet.play from 3.8.4 to 3.8.6 (#1879) Bumps com.github.triplet.play from 3.8.4 to 3.8.6. --- updated-dependencies: - dependency-name: com.github.triplet.play dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- uhabits-android/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uhabits-android/build.gradle.kts b/uhabits-android/build.gradle.kts index fa17306c9..252357d0f 100644 --- a/uhabits-android/build.gradle.kts +++ b/uhabits-android/build.gradle.kts @@ -18,7 +18,7 @@ */ plugins { - id("com.github.triplet.play") version "3.8.4" + id("com.github.triplet.play") version "3.8.6" id("com.android.application") version "8.1.4" id("org.jetbrains.kotlin.android") id("org.jetbrains.kotlin.kapt") From e06ed3ed7d5d54a23bf9f4cc38006c5afb957cb1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 1 Dec 2023 18:08:31 -0600 Subject: [PATCH 54/80] Bump ch.qos.logback:logback-classic from 1.4.11 to 1.4.13 (#1882) Bumps [ch.qos.logback:logback-classic](https://github.com/qos-ch/logback) from 1.4.11 to 1.4.13. - [Commits](https://github.com/qos-ch/logback/compare/v_1.4.11...v_1.4.13) --- updated-dependencies: - dependency-name: ch.qos.logback:logback-classic dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- uhabits-server/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/uhabits-server/build.gradle.kts b/uhabits-server/build.gradle.kts index 157706c6b..6e39d61b4 100644 --- a/uhabits-server/build.gradle.kts +++ b/uhabits-server/build.gradle.kts @@ -40,7 +40,7 @@ dependencies { val ktorVersion = "1.6.8" implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.21") implementation("io.ktor:ktor-server-netty:$ktorVersion") - implementation("ch.qos.logback:logback-classic:1.4.11") + implementation("ch.qos.logback:logback-classic:1.4.13") implementation("io.ktor:ktor-server-core:$ktorVersion") implementation("io.ktor:ktor-html-builder:$ktorVersion") implementation("io.ktor:ktor-jackson:$ktorVersion") From 800f92f2556181a9454edc313b4bb95eb9b264f4 Mon Sep 17 00:00:00 2001 From: Leonard Dizon Date: Wed, 19 Oct 2022 00:45:56 +0800 Subject: [PATCH 55/80] Create locales_config.xml for per-app language --- uhabits-android/src/main/AndroidManifest.xml | 1 + .../src/main/res/xml/locales_config.xml | 47 +++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 uhabits-android/src/main/res/xml/locales_config.xml diff --git a/uhabits-android/src/main/AndroidManifest.xml b/uhabits-android/src/main/AndroidManifest.xml index ab33ce9a2..8c7758439 100644 --- a/uhabits-android/src/main/AndroidManifest.xml +++ b/uhabits-android/src/main/AndroidManifest.xml @@ -30,6 +30,7 @@ android:backupAgent=".HabitsBackupAgent" android:icon="@mipmap/ic_launcher" android:label="@string/main_activity_title" + android:localeConfig="@xml/locales_config" android:supportsRtl="true" android:theme="@style/AppBaseTheme"> diff --git a/uhabits-android/src/main/res/xml/locales_config.xml b/uhabits-android/src/main/res/xml/locales_config.xml new file mode 100644 index 000000000..a0fefcb50 --- /dev/null +++ b/uhabits-android/src/main/res/xml/locales_config.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 27df792775b989477d4cc542de535f2ee4e45d24 Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Fri, 1 Dec 2023 18:29:34 -0600 Subject: [PATCH 56/80] Update CHANGELOG --- CHANGELOG.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bbc344341..7ed6adeb5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,21 @@ # Changelog +## [2.2.0] -- 2023-12-01 +### Added +- Add support for Android 14 (@iSoron, @hiqua) +- Allow user to change app language (@leondzn) + +### Fixed +- Implement workaround to make notifications non-dismissible in Android 14 (@iSoron, #1872) + +## [2.1.3] -- 2023-08-28 +### Fixed +- Use text input on Samsung devices (@iSoron, #1719) +- Prevent crash if alarm permission is revoked (@iSoron) +- Adjust widget colors (@iSoron) +- Fix bug preventing screens from updating at midnight (@iSoron) +- Fix skip button in locales that use comma instead of dot (@iSoron, #1721) + ## [2.1.2] -- 2023-05-26 ### Fixed - Fix bug that caused widget to enter checkmark on wrong date (@iSoron, #1541) From 0683ea43f47a92642f1301b7c90d12e64517125e Mon Sep 17 00:00:00 2001 From: Serhii K Date: Thu, 7 Dec 2023 00:52:03 +0200 Subject: [PATCH 57/80] Fix splash screen background color in dark mode --- uhabits-android/build.gradle.kts | 1 + .../src/main/res/values-night/colors.xml | 23 ++++++++++++++++++ .../src/main/res/values-v31/styles.xml | 24 +++++++++++++++++++ .../src/main/res/values/colors.xml | 1 + .../src/main/res/values/styles.xml | 6 ++++- 5 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 uhabits-android/src/main/res/values-night/colors.xml create mode 100644 uhabits-android/src/main/res/values-v31/styles.xml diff --git a/uhabits-android/build.gradle.kts b/uhabits-android/build.gradle.kts index 252357d0f..ba1508691 100644 --- a/uhabits-android/build.gradle.kts +++ b/uhabits-android/build.gradle.kts @@ -128,6 +128,7 @@ dependencies { implementation("androidx.legacy:legacy-preference-v14:1.0.0") implementation("androidx.legacy:legacy-support-v4:1.0.0") implementation("com.google.android.material:material:1.10.0") + implementation("androidx.core:core-splashscreen:1.0.1") implementation("com.opencsv:opencsv:5.9") implementation(project(":uhabits-core")) kapt("com.google.dagger:dagger-compiler:$daggerVersion") diff --git a/uhabits-android/src/main/res/values-night/colors.xml b/uhabits-android/src/main/res/values-night/colors.xml new file mode 100644 index 000000000..331a09b51 --- /dev/null +++ b/uhabits-android/src/main/res/values-night/colors.xml @@ -0,0 +1,23 @@ + + + + + @color/grey_900 + \ No newline at end of file diff --git a/uhabits-android/src/main/res/values-v31/styles.xml b/uhabits-android/src/main/res/values-v31/styles.xml new file mode 100644 index 000000000..0e9ba29e7 --- /dev/null +++ b/uhabits-android/src/main/res/values-v31/styles.xml @@ -0,0 +1,24 @@ + + + + + \ No newline at end of file diff --git a/uhabits-android/src/main/res/values/colors.xml b/uhabits-android/src/main/res/values/colors.xml index 9476698d5..c943ffcad 100644 --- a/uhabits-android/src/main/res/values/colors.xml +++ b/uhabits-android/src/main/res/values/colors.xml @@ -89,4 +89,5 @@ #1976D2 + @color/grey_200 \ No newline at end of file diff --git a/uhabits-android/src/main/res/values/styles.xml b/uhabits-android/src/main/res/values/styles.xml index a3b2be8ba..8b83702e7 100644 --- a/uhabits-android/src/main/res/values/styles.xml +++ b/uhabits-android/src/main/res/values/styles.xml @@ -18,7 +18,7 @@ --> - + + - \ No newline at end of file diff --git a/uhabits-android/src/main/res/values/colors.xml b/uhabits-android/src/main/res/values/colors.xml index c943ffcad..5a59d6681 100644 --- a/uhabits-android/src/main/res/values/colors.xml +++ b/uhabits-android/src/main/res/values/colors.xml @@ -89,5 +89,5 @@ #1976D2 - @color/grey_200 + @color/grey_200 \ No newline at end of file diff --git a/uhabits-android/src/main/res/values/styles.xml b/uhabits-android/src/main/res/values/styles.xml index 8b83702e7..87d053fe9 100644 --- a/uhabits-android/src/main/res/values/styles.xml +++ b/uhabits-android/src/main/res/values/styles.xml @@ -18,7 +18,7 @@ --> - - -