From 946429a2f5956ab4971e71370adc048cd7538c0a Mon Sep 17 00:00:00 2001 From: Cilly Leang Date: Sat, 24 Jan 2026 00:37:57 +1100 Subject: [PATCH] feat: basic persistent settings --- core/build.gradle.kts | 2 +- .../kotlin/moe/lava/neon/core/AppSettings.kt | 16 ++++++++++++++++ .../kotlin/moe/lava/neon/core/di/AppGraph.kt | 3 +++ .../kotlin/moe/lava/neon/core/di/Providers.kt | 12 ++++++++++++ .../lava/neon/core/repository/AuthRepository.kt | 7 ++++--- gradle/libs.versions.toml | 2 ++ 6 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 core/src/commonMain/kotlin/moe/lava/neon/core/AppSettings.kt create mode 100644 core/src/commonMain/kotlin/moe/lava/neon/core/di/Providers.kt diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 158ea18..df6021d 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -18,7 +18,7 @@ kotlin { sourceSets { commonMain.dependencies { - // Add any common dependencies here + implementation(libs.settings) } commonTest.dependencies { implementation(libs.kotlin.test) diff --git a/core/src/commonMain/kotlin/moe/lava/neon/core/AppSettings.kt b/core/src/commonMain/kotlin/moe/lava/neon/core/AppSettings.kt new file mode 100644 index 0000000..d7fecfe --- /dev/null +++ b/core/src/commonMain/kotlin/moe/lava/neon/core/AppSettings.kt @@ -0,0 +1,16 @@ +package moe.lava.neon.core + +import com.russhwolf.settings.Settings +import com.russhwolf.settings.nullableString +import com.russhwolf.settings.string +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.Inject +import dev.zacsweers.metro.SingleIn + +@SingleIn(AppScope::class) +@Inject +class AppSettings { + private val settings = Settings() + + var token by settings.nullableString() +} diff --git a/core/src/commonMain/kotlin/moe/lava/neon/core/di/AppGraph.kt b/core/src/commonMain/kotlin/moe/lava/neon/core/di/AppGraph.kt index d7552b9..c10be50 100644 --- a/core/src/commonMain/kotlin/moe/lava/neon/core/di/AppGraph.kt +++ b/core/src/commonMain/kotlin/moe/lava/neon/core/di/AppGraph.kt @@ -1,9 +1,11 @@ package moe.lava.neon.core.di +import com.russhwolf.settings.Settings import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.DependencyGraph import dev.zacsweers.metro.GraphExtension import dev.zacsweers.metro.SingleIn +import moe.lava.neon.core.AppSettings import moe.lava.neon.core.repository.AuthRepository import moe.lava.neon.core.repository.UserRepository @@ -11,4 +13,5 @@ import moe.lava.neon.core.repository.UserRepository interface AppGraph { val auth: AuthRepository val users: UserRepository + val settings: AppSettings } diff --git a/core/src/commonMain/kotlin/moe/lava/neon/core/di/Providers.kt b/core/src/commonMain/kotlin/moe/lava/neon/core/di/Providers.kt new file mode 100644 index 0000000..67f1673 --- /dev/null +++ b/core/src/commonMain/kotlin/moe/lava/neon/core/di/Providers.kt @@ -0,0 +1,12 @@ +package moe.lava.neon.core.di + +import com.russhwolf.settings.Settings +import dev.zacsweers.metro.AppScope +import dev.zacsweers.metro.ContributesTo +import dev.zacsweers.metro.Provides + +@ContributesTo(AppScope::class) +interface Providers { +// @Provides +// fun providesSettings(): Settings = Settings() +} diff --git a/core/src/commonMain/kotlin/moe/lava/neon/core/repository/AuthRepository.kt b/core/src/commonMain/kotlin/moe/lava/neon/core/repository/AuthRepository.kt index dc5f86e..cf0b5b4 100644 --- a/core/src/commonMain/kotlin/moe/lava/neon/core/repository/AuthRepository.kt +++ b/core/src/commonMain/kotlin/moe/lava/neon/core/repository/AuthRepository.kt @@ -3,14 +3,15 @@ package moe.lava.neon.core.repository import dev.zacsweers.metro.AppScope import dev.zacsweers.metro.Inject import dev.zacsweers.metro.SingleIn +import moe.lava.neon.core.AppSettings @Inject @SingleIn(AppScope::class) -class AuthRepository { - var token: String? = null +class AuthRepository(private val settings: AppSettings) { + var token by settings::token private set - fun login(username: String, password: String) { + suspend fun login(username: String, password: String) { // api.login(username, password) } suspend fun login(token: String) { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 2afbcea..281001a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -20,6 +20,7 @@ kotlinx-coroutines = "1.10.2" material3 = "1.10.0-alpha05" material3-adaptive = "1.3.0-alpha03" metro = "0.10.0" +settings = "1.3.0" sqldelight = "2.2.1" [libraries] @@ -47,6 +48,7 @@ compose-components-resources = { module = "org.jetbrains.compose.components:comp compose-uiToolingPreview = { module = "org.jetbrains.compose.ui:ui-tooling-preview", version.ref = "composeMultiplatform" } kotlinx-coroutinesSwing = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-swing", version.ref = "kotlinx-coroutines" } metrox-viewmodel-compose = { module = "dev.zacsweers.metro:metrox-viewmodel-compose", version.ref = "metro" } +settings = { module = "com.russhwolf:multiplatform-settings-no-arg", version.ref = "settings" } [plugins] androidApplication = { id = "com.android.application", version.ref = "agp" }