Compare commits

..

No commits in common. '66fa56ea627029285bdcc8b84ec1f3dde20b2fb4' and '245b0eb4d6b767b5814f3d7640979600f645bbf3' have entirely different histories.

@ -1,11 +1,23 @@
plugins { plugins {
alias(libs.plugins.agp) apply false val kotlinVersion = "2.1.10"
alias(libs.plugins.kotlin.android) apply false id("com.android.application") version "8.8.0" apply (false)
alias(libs.plugins.ksp) apply false id("org.jetbrains.kotlin.android") version kotlinVersion apply (false)
alias(libs.plugins.ktlint.plugin) apply false id("org.jetbrains.kotlin.kapt") version kotlinVersion apply (false)
alias(libs.plugins.shadow) apply false id("org.jetbrains.kotlin.multiplatform") version kotlinVersion apply (false)
id("org.jlleitschuh.gradle.ktlint") version "11.6.1"
} }
apply { apply {
from("gradle/translators.gradle.kts") from("translators.gradle.kts")
}
allprojects {
repositories {
google()
mavenCentral()
maven(url = "https://plugins.gradle.org/m2/")
maven(url = "https://oss.sonatype.org/content/repositories/snapshots/")
maven(url = "https://jitpack.io")
maven(url = "https://maven.pkg.jetbrains.space/kotlin/p/kotlin/kotlin-js-wrappers/") // Repository for kotlin-css-jvm old versions, now that the Gradle Plugin Portal no longer brings these in by mirroring JCenter
}
} }

@ -6,6 +6,3 @@ android.enableJetifier=true
android.defaults.buildfeatures.buildconfig=true android.defaults.buildfeatures.buildconfig=true
android.nonTransitiveRClass=false android.nonTransitiveRClass=false
android.nonFinalResIds=false android.nonFinalResIds=false
org.gradle.configureondemand=true
org.gradle.warning.mode=all
org.gradle.caching=true

@ -1,102 +0,0 @@
[versions]
agp = "8.8.0"
annotation = "1.9.1"
appcompat = "1.7.0"
appintro = "6.3.1"
commonsCodec = "1.16.0"
commonsIo = "1.3.2"
commonsLang3 = "3.14.0"
dagger = "2.55"
desugar = "2.1.4"
dexmaker = "2.28.3"
espresso = "3.6.1"
guava = "33.2.1-android"
hamcrest = "2.2"
jsr250 = "1.0"
jsr305 = "3.0.2"
junit = "1.2.1"
junitJupiter = "5.10.1"
junitVersion = "4.13.2"
konfetti-xml = "2.0.2"
kotlin = "2.1.10"
kotlinxCoroutinesCoreCommon = "1.3.8"
ksp = "2.1.10-1.0.30"
ktlint-plugin = "11.6.1"
ktor = "1.6.8"
ktxCoroutine = "1.10.1"
legacy-support = "1.0.0"
material = "1.12.0"
mockito-kotlin = "5.4.0"
opencsv = "5.9"
rules = "1.6.1"
shadow = "8.1.1"
sqliteJdbc = "3.45.1.0"
uiautomator = "2.3.0"
[libraries]
annotation = { group = "androidx.annotation", name = "annotation", version.ref = "annotation" }
appIntro = { group = "com.github.AppIntro", name = "AppIntro", version.ref = "appintro" }
appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" }
commons-codec = { module = "commons-codec:commons-codec", version.ref = "commonsCodec" }
commons-io = { module = "org.apache.commons:commons-io", version.ref = "commonsIo" }
commons-lang3 = { module = "org.apache.commons:commons-lang3", version.ref = "commonsLang3" }
dagger = { group = "com.google.dagger", name = "dagger", version.ref = "dagger" }
dagger-compiler = { group = "com.google.dagger", name = "dagger-compiler", version.ref = "dagger" }
desugar_jdk_libs = { group = "com.android.tools", name = "desugar_jdk_libs", version.ref = "desugar" }
dexmaker-mockito = { group = "com.linkedin.dexmaker", name = "dexmaker-mockito", version.ref = "dexmaker" }
espresso-contrib = { group = "androidx.test.espresso", name = "espresso-contrib", version.ref = "espresso" }
espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espresso" }
guava = { group = "com.google.guava", name = "guava", version.ref = "guava" }
hamcrest = { module = "org.hamcrest:hamcrest", version.ref = "hamcrest" }
jsr250-api = { group = "javax.annotation", name = "jsr250-api", version.ref = "jsr250" }
jsr305 = { group = "com.google.code.findbugs", name = "jsr305", version.ref = "jsr305" }
junit = { group = "androidx.test.ext", name = "junit", version.ref = "junit" }
junit-junit = { module = "junit:junit", version.ref = "junitVersion" }
junit-jupiter = { module = "org.junit.jupiter:junit-jupiter", version.ref = "junitJupiter" }
konfetti-xml = { group = "nl.dionsegijn", name = "konfetti-xml", version.ref = "konfetti-xml" }
kotlin-stdlib-jdk8 = { group = "org.jetbrains.kotlin", name = "kotlin-stdlib-jdk8", version.ref = "kotlin" }
kotlinx-coroutines-android = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-android", version.ref = "ktxCoroutine" }
kotlinx-coroutines-core = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-core", version.ref = "ktxCoroutine" }
kotlinx-coroutines-core-common = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core-common", version.ref = "kotlinxCoroutinesCoreCommon" }
kotlinx-coroutines-core-jvm = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm", version.ref = "ktxCoroutine" }
ktor-client-android = { group = "io.ktor", name = "ktor-client-android", version.ref = "ktor" }
ktor-client-core = { group = "io.ktor", name = "ktor-client-core", version.ref = "ktor" }
ktor-client-jackson = { group = "io.ktor", name = "ktor-client-jackson", version.ref = "ktor" }
ktor-client-json = { group = "io.ktor", name = "ktor-client-json", version.ref = "ktor" }
ktor-client-mock = { group = "io.ktor", name = "ktor-client-mock", version.ref = "ktor" }
ktor-jackson = { group = "io.ktor", name = "ktor-jackson", version.ref = "ktor" }
legacy-preference-v14 = { group = "androidx.legacy", name = "legacy-preference-v14", version.ref = "legacy-support" }
legacy-support-v4 = { group = "androidx.legacy", name = "legacy-support-v4", version.ref = "legacy-support" }
material = { group = "com.google.android.material", name = "material", version.ref = "material" }
mockito-kotlin = { group = "org.mockito.kotlin", name = "mockito-kotlin", version.ref = "mockito-kotlin" }
opencsv = { group = "com.opencsv", name = "opencsv", version.ref = "opencsv" }
rules = { group = "androidx.test", name = "rules", version.ref = "rules" }
sqlite-jdbc = { module = "org.xerial:sqlite-jdbc", version.ref = "sqliteJdbc" }
uiautomator = { group = "androidx.test.uiautomator", name = "uiautomator", version.ref = "uiautomator" }
[bundles]
androidTest = [
"annotation",
"dagger",
"dexmaker-mockito",
"espresso-contrib",
"espresso-core",
"junit",
"ktor-client-mock",
"ktor-jackson",
"mockito-kotlin",
"rules",
"uiautomator"
]
test = [
"dagger",
"junit-junit",
"mockito-kotlin",
]
[plugins]
agp = { id = "com.android.application", version.ref = "agp" }
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
ktlint-plugin = { id = "org.jlleitschuh.gradle.ktlint", version.ref = "ktlint-plugin" }
shadow = { id = "com.github.johnrengelman.shadow", version.ref = "shadow" }

@ -1,32 +1,13 @@
pluginManagement { pluginManagement {
repositories { repositories {
gradlePluginPortal() gradlePluginPortal()
google { google()
content {
includeGroupByRegex("com\\.android.*")
includeGroupByRegex("com\\.google.*")
includeGroupByRegex("androidx.*")
} }
resolutionStrategy.eachPlugin {
if (requested.id.id == "com.android.application") {
useModule("com.android.tools.build:gradle:${requested.version}")
} }
} }
} }
include(":uhabits-android", ":uhabits-core") include(":uhabits-android", ":uhabits-core")
dependencyResolutionManagement {
@Suppress("UnstableApiUsage")
repositories {
google {
content {
includeGroupByRegex("com\\.android.*")
includeGroupByRegex("com\\.google.*")
includeGroupByRegex("androidx.*")
}
}
mavenCentral()
maven(url = "https://plugins.gradle.org/m2/")
maven(url = "https://oss.sonatype.org/content/repositories/snapshots/")
maven(url = "https://jitpack.io")
}
}
include(":uhabits-android", ":uhabits-core")

@ -18,10 +18,10 @@
*/ */
plugins { plugins {
alias(libs.plugins.agp) id("com.android.application") version "8.8.0"
alias(libs.plugins.kotlin.android) id("org.jetbrains.kotlin.android")
alias(libs.plugins.ksp) id("org.jetbrains.kotlin.kapt")
alias(libs.plugins.ktlint.plugin) id("org.jlleitschuh.gradle.ktlint")
} }
tasks.compileLint { tasks.compileLint {
@ -40,6 +40,7 @@ kotlin {
} }
android { android {
namespace = "org.isoron.uhabits" namespace = "org.isoron.uhabits"
compileSdk = 35 compileSdk = 35
// compileSdkPreview = "VanillaIceCream" // compileSdkPreview = "VanillaIceCream"
@ -65,7 +66,7 @@ android {
} }
buildTypes { buildTypes {
release { getByName("release") {
isMinifyEnabled = true isMinifyEnabled = true
proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.txt") proguardFiles(getDefaultProguardFile("proguard-android.txt"), "proguard-rules.txt")
if (signingConfigs.findByName("release") != null) { if (signingConfigs.findByName("release") != null) {
@ -73,8 +74,8 @@ android {
} }
} }
debug { getByName("debug") {
enableUnitTestCoverage = true isTestCoverageEnabled = true
} }
} }
@ -83,35 +84,64 @@ android {
targetCompatibility(JavaVersion.VERSION_11) targetCompatibility(JavaVersion.VERSION_11)
sourceCompatibility(JavaVersion.VERSION_11) sourceCompatibility(JavaVersion.VERSION_11)
} }
kotlinOptions {
jvmTarget = JavaVersion.VERSION_11.toString()
}
kotlinOptions.jvmTarget = JavaVersion.VERSION_11.toString() buildFeatures {
buildFeatures.viewBinding = true viewBinding = true
lint.abortOnError = false }
lint {
abortOnError = false
}
} }
dependencies { dependencies {
compileOnly(libs.jsr250.api) val daggerVersion = "2.51.1"
coreLibraryDesugaring(libs.desugar.jdk.libs) val kotlinVersion = "2.1.10"
implementation(libs.appIntro) val kxCoroutinesVersion = "1.10.1"
implementation(libs.jsr305) val ktorVersion = "1.6.8"
implementation(libs.dagger) val espressoVersion = "3.6.1"
implementation(libs.guava)
implementation(libs.ktor.client.android) androidTestImplementation("androidx.test.espresso:espresso-contrib:$espressoVersion")
implementation(libs.ktor.client.core) androidTestImplementation("androidx.test.espresso:espresso-core:$espressoVersion")
implementation(libs.ktor.client.jackson) androidTestImplementation("com.google.dagger:dagger:$daggerVersion")
implementation(libs.ktor.client.json) androidTestImplementation("com.linkedin.dexmaker:dexmaker-mockito:2.28.3")
implementation(libs.kotlin.stdlib.jdk8) androidTestImplementation("io.ktor:ktor-client-mock:$ktorVersion")
implementation(libs.kotlinx.coroutines.android) androidTestImplementation("io.ktor:ktor-jackson:$ktorVersion")
implementation(libs.kotlinx.coroutines.core) androidTestImplementation("androidx.annotation:annotation:1.7.1")
implementation(libs.appcompat) androidTestImplementation("androidx.test.ext:junit:1.2.1")
implementation(libs.legacy.preference.v14) androidTestImplementation("androidx.test.uiautomator:uiautomator:2.3.0")
implementation(libs.legacy.support.v4) androidTestImplementation("androidx.test:rules:1.6.1")
implementation(libs.material) androidTestImplementation("org.mockito.kotlin:mockito-kotlin:5.4.0")
implementation(libs.opencsv) compileOnly("javax.annotation:jsr250-api:1.0")
implementation(libs.konfetti.xml) coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.4")
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:33.1.0-android")
implementation("io.ktor:ktor-client-android:$ktorVersion")
implementation("io.ktor:ktor-client-core:$ktorVersion")
implementation("io.ktor:ktor-client-jackson:$ktorVersion")
implementation("io.ktor:ktor-client-json:$ktorVersion")
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.7.0")
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.12.0")
implementation("com.opencsv:opencsv:5.9")
implementation("nl.dionsegijn:konfetti-xml:2.0.2")
implementation(project(":uhabits-core")) implementation(project(":uhabits-core"))
ksp(libs.dagger.compiler) kapt("com.google.dagger:dagger-compiler:$daggerVersion")
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.4.0")
}
androidTestImplementation(libs.bundles.androidTest) kapt {
testImplementation(libs.bundles.test) correctErrorTypes = true
} }

@ -36,17 +36,16 @@ class NumberDialog : AppCompatDialogFragment() {
val appComponent = (requireActivity().application as HabitsApplication).component val appComponent = (requireActivity().application as HabitsApplication).component
val prefs = appComponent.preferences val prefs = appComponent.preferences
view = CheckmarkPopupBinding.inflate(LayoutInflater.from(context)) view = CheckmarkPopupBinding.inflate(LayoutInflater.from(context))
arrayOf(view.yesBtn).forEach { arrayOf(view.yesBtn, view.skipBtn).forEach {
it.setTextColor(requireArguments().getInt("color")) it.setTextColor(requireArguments().getInt("color"))
} }
arrayOf(view.noBtn, view.unknownBtnNumber).forEach { arrayOf(view.noBtn, view.unknownBtn).forEach {
it.setTextColor(view.root.sres.getColor(R.attr.contrast60)) it.setTextColor(view.root.sres.getColor(R.attr.contrast60))
} }
arrayOf(view.yesBtn, view.noBtn, view.unknownBtnNumber).forEach { arrayOf(view.yesBtn, view.noBtn, view.skipBtn, view.unknownBtn).forEach {
it.typeface = InterfaceUtils.getFontAwesome(requireContext()) it.typeface = InterfaceUtils.getFontAwesome(requireContext())
} }
if (!prefs.isSkipEnabled) view.skipBtnNumber.visibility = View.GONE if (!prefs.isSkipEnabled) view.skipBtnNumber.visibility = View.GONE
if (!prefs.areQuestionMarksEnabled) view.unknownBtnNumber.visibility = View.GONE
view.numberButtons.visibility = View.VISIBLE view.numberButtons.visibility = View.VISIBLE
fixDecimalSeparator(view) fixDecimalSeparator(view)
originalNotes = requireArguments().getString("notes")!! originalNotes = requireArguments().getString("notes")!!
@ -72,12 +71,6 @@ class NumberDialog : AppCompatDialogFragment() {
view.value.setText(DecimalFormat("#.###").format((Entry.SKIP.toDouble() / 1000))) view.value.setText(DecimalFormat("#.###").format((Entry.SKIP.toDouble() / 1000)))
save() save()
} }
view.unknownBtnNumber.setOnClickListener {
view.value.setText(DecimalFormat("#.###").format((Entry.UNKNOWN.toDouble() / 1000)))
save()
}
view.notes.setOnEditorActionListener { v, actionId, event -> view.notes.setOnEditorActionListener { v, actionId, event ->
save() save()
true true

@ -224,7 +224,6 @@ class ListHabitsScreen
} }
override fun showConfetti(color: PaletteColor, x: Float, y: Float) { override fun showConfetti(color: PaletteColor, x: Float, y: Float) {
if (preferences.isConfettiAnimationDisabled) return
val baseColor = themeSwitcher.currentTheme!!.color(color).toInt() val baseColor = themeSwitcher.currentTheme!!.color(color).toInt()
rootView.get().konfettiView.start( rootView.get().konfettiView.start(
Party( Party(

@ -23,32 +23,32 @@
android:id="@+id/container" android:id="@+id/container"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@drawable/checkmark_dialog_bg"
android:minWidth="208dp"
android:minHeight="128dp" android:minHeight="128dp"
android:orientation="vertical" android:minWidth="208dp"
app:divider="@drawable/checkmark_dialog_divider" app:divider="@drawable/checkmark_dialog_divider"
app:showDividers="middle"> app:showDividers="middle"
android:orientation="vertical"
android:background="@drawable/checkmark_dialog_bg">
<androidx.appcompat.widget.AppCompatEditText <androidx.appcompat.widget.AppCompatEditText
android:id="@+id/notes" android:id="@+id/notes"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="0dp" android:layout_height="0dp"
android:layout_weight="1" android:layout_weight="1"
android:background="@color/transparent"
android:gravity="center" android:gravity="center"
android:hint="@string/notes"
android:inputType="textCapSentences|textMultiLine" android:inputType="textCapSentences|textMultiLine"
android:textSize="@dimen/smallTextSize"
android:padding="4dp" android:padding="4dp"
android:text="" android:background="@color/transparent"
android:textSize="@dimen/smallTextSize" /> android:hint="@string/notes"
android:text="" />
<androidx.appcompat.widget.LinearLayoutCompat <androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/booleanButtons" android:id="@+id/booleanButtons"
android:visibility="gone"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="48dp" android:layout_height="48dp"
android:orientation="horizontal" android:orientation="horizontal"
android:visibility="gone"
app:divider="@drawable/checkmark_dialog_divider" app:divider="@drawable/checkmark_dialog_divider"
app:showDividers="middle"> app:showDividers="middle">
@ -75,10 +75,10 @@
<androidx.appcompat.widget.LinearLayoutCompat <androidx.appcompat.widget.LinearLayoutCompat
android:id="@+id/numberButtons" android:id="@+id/numberButtons"
android:visibility="gone"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="48dp" android:layout_height="48dp"
android:orientation="horizontal" android:orientation="horizontal"
android:visibility="gone"
app:divider="@drawable/checkmark_dialog_divider" app:divider="@drawable/checkmark_dialog_divider"
app:showDividers="middle"> app:showDividers="middle">
@ -86,26 +86,21 @@
android:id="@+id/value" android:id="@+id/value"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_weight="2" android:layout_weight="1"
android:background="@color/transparent" android:background="@color/transparent"
android:textAlignment="center"
android:inputType="numberDecimal" android:inputType="numberDecimal"
android:selectAllOnFocus="true" android:selectAllOnFocus="true"
android:textAlignment="center"
android:textSize="@dimen/smallTextSize" /> android:textSize="@dimen/smallTextSize" />
<TextView
android:id="@+id/saveBtn"
style="@style/NumericalPopupBtn"
android:text="@string/save" />
<TextView <TextView
android:id="@+id/skipBtnNumber" android:id="@+id/skipBtnNumber"
style="@style/NumericalPopupBtn" style="@style/NumericalPopupBtn"
android:text="@string/skip_day" /> android:text="@string/skip_day" />
<TextView <TextView
android:id="@+id/unknownBtnNumber" android:id="@+id/saveBtn"
style="@style/CheckmarkPopupBtn" style="@style/NumericalPopupBtn"
android:text="@string/fa_question" /> android:text="@string/save" />
</androidx.appcompat.widget.LinearLayoutCompat> </androidx.appcompat.widget.LinearLayoutCompat>
</androidx.appcompat.widget.LinearLayoutCompat> </androidx.appcompat.widget.LinearLayoutCompat>

@ -233,6 +233,4 @@
<string name="activity_not_found">No app was found to support this action</string> <string name="activity_not_found">No app was found to support this action</string>
<string name="pref_midnight_delay_title">Extend day a few hours past midnight</string> <string name="pref_midnight_delay_title">Extend day a few hours past midnight</string>
<string name="pref_midnight_delay_description">Wait until 3:00 AM to show a new day. Useful if you typically go to sleep after midnight. Requires app restart.</string> <string name="pref_midnight_delay_description">Wait until 3:00 AM to show a new day. Useful if you typically go to sleep after midnight. Requires app restart.</string>
<string name="pref_animations_title">Disable animations</string>
<string name="pref_animations_description">Disable confetti animation after adding a checkmark.</string>
</resources> </resources>

@ -67,13 +67,6 @@
android:title="@string/use_pure_black" android:title="@string/use_pure_black"
app:iconSpaceReserved="false" /> app:iconSpaceReserved="false" />
<SwitchPreferenceCompat
android:defaultValue="false"
android:key="pref_disable_animation"
android:summary="@string/pref_animations_description"
android:title="@string/pref_animations_title"
app:iconSpaceReserved="false" />
<ListPreference <ListPreference
android:defaultValue="255" android:defaultValue="255"
android:entries="@array/widget_opacity_entries" android:entries="@array/widget_opacity_entries"

@ -19,7 +19,7 @@
plugins { plugins {
kotlin("multiplatform") kotlin("multiplatform")
alias(libs.plugins.ktlint.plugin) id("org.jlleitschuh.gradle.ktlint")
} }
kotlin { kotlin {
@ -30,7 +30,7 @@ kotlin {
val commonMain by getting { val commonMain by getting {
dependencies { dependencies {
implementation(kotlin("stdlib-common")) implementation(kotlin("stdlib-common"))
implementation(libs.kotlinx.coroutines.core.common) implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-common:1.3.8")
} }
} }
@ -44,14 +44,14 @@ kotlin {
val jvmMain by getting { val jvmMain by getting {
dependencies { dependencies {
implementation(kotlin("stdlib-jdk8")) implementation(kotlin("stdlib-jdk8"))
compileOnly(libs.dagger) compileOnly("com.google.dagger:dagger:2.51.1")
implementation(libs.guava) implementation("com.google.guava:guava:33.1.0-android")
implementation(libs.kotlinx.coroutines.core.jvm) implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.10.1")
implementation(libs.annotation) implementation("androidx.annotation:annotation:1.7.1")
implementation(libs.jsr305) implementation("com.google.code.findbugs:jsr305:3.0.2")
implementation(libs.opencsv) implementation("com.opencsv:opencsv:5.9")
implementation(libs.commons.codec) implementation("commons-codec:commons-codec:1.16.0")
implementation(libs.commons.lang3) implementation("org.apache.commons:commons-lang3:3.14.0")
} }
} }
@ -59,16 +59,19 @@ kotlin {
dependencies { dependencies {
implementation(kotlin("test")) implementation(kotlin("test"))
implementation(kotlin("test-junit")) implementation(kotlin("test-junit"))
implementation(libs.sqlite.jdbc) implementation("org.xerial:sqlite-jdbc:3.45.1.0")
implementation(libs.hamcrest) implementation("org.hamcrest:hamcrest:2.2")
implementation(libs.commons.io) implementation("org.apache.commons:commons-io:1.3.2")
implementation(libs.mockito.kotlin) implementation("org.mockito.kotlin:mockito-kotlin:5.4.0")
implementation(libs.junit.jupiter) implementation("org.junit.jupiter:junit-jupiter:5.10.1")
} }
} }
} }
} }
tasks.withType<ProcessResources> { tasks.named<org.gradle.language.jvm.tasks.ProcessResources>("jvmProcessResources") {
duplicatesStrategy = DuplicatesStrategy.INCLUDE
}
tasks.named<org.gradle.language.jvm.tasks.ProcessResources>("jvmTestProcessResources") {
duplicatesStrategy = DuplicatesStrategy.INCLUDE duplicatesStrategy = DuplicatesStrategy.INCLUDE
} }

@ -135,12 +135,6 @@ open class Preferences(private val storage: Storage) {
storage.putBoolean("pref_short_toggle", enabled) storage.putBoolean("pref_short_toggle", enabled)
} }
var isConfettiAnimationDisabled: Boolean
get() = storage.getBoolean("pref_disable_animation", false)
set(enabled) {
storage.putBoolean("pref_disable_animation", enabled)
}
fun removeListener(listener: Listener) { fun removeListener(listener: Listener) {
listeners.remove(listener) listeners.remove(listener)
} }

Loading…
Cancel
Save