From bfcc63aeeed5f3dcb372f9607343407a9f3a11d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bernat=20Borr=C3=A1s?= Date: Fri, 15 Dec 2023 13:31:11 +0100 Subject: [PATCH] Move memory to it's own module --- compose-settings-bom/build.gradle.kts | 3 +- .../settings/storage/base/ValueProviders.kt | 86 ++------------- .../build.gradle.kts | 6 +- .../disk/StringPreferenceSettingValueState.kt | 47 ++++++++ .../storage/disk/StringSettingValueState.kt | 44 ++++++++ .../build.gradle.kts | 102 ++++++++++++++++++ .../storage/disk/BooleanSettingValueState.kt | 21 ++++ .../storage/disk/FloatSettingValueState.kt | 21 ++++ .../storage/disk/IntSetSettingValueState.kt | 21 ++++ .../storage/disk/IntSettingValueState.kt | 21 ++++ .../storage/disk/StringSettingValueState.kt | 21 ++++ settings.gradle.kts | 1 + 12 files changed, 311 insertions(+), 83 deletions(-) create mode 100644 compose-settings-storage-disk/src/androidMain/kotlin/com/alorma/compose/settings/storage/disk/StringPreferenceSettingValueState.kt create mode 100644 compose-settings-storage-disk/src/commonMain/kotlin/com/alorma/compose/settings/storage/disk/StringSettingValueState.kt create mode 100644 compose-settings-storage-memory/build.gradle.kts create mode 100644 compose-settings-storage-memory/src/commonMain/kotlin/com/alorma/compose/settings/storage/disk/BooleanSettingValueState.kt create mode 100644 compose-settings-storage-memory/src/commonMain/kotlin/com/alorma/compose/settings/storage/disk/FloatSettingValueState.kt create mode 100644 compose-settings-storage-memory/src/commonMain/kotlin/com/alorma/compose/settings/storage/disk/IntSetSettingValueState.kt create mode 100644 compose-settings-storage-memory/src/commonMain/kotlin/com/alorma/compose/settings/storage/disk/IntSettingValueState.kt create mode 100644 compose-settings-storage-memory/src/commonMain/kotlin/com/alorma/compose/settings/storage/disk/StringSettingValueState.kt diff --git a/compose-settings-bom/build.gradle.kts b/compose-settings-bom/build.gradle.kts index 94c69b31..5b4aee8f 100644 --- a/compose-settings-bom/build.gradle.kts +++ b/compose-settings-bom/build.gradle.kts @@ -6,7 +6,8 @@ plugins { dependencies { constraints { api(projects.composeSettingsStorageBase) - api(projects.composeSettingsStoragePreferences) + api(projects.composeSettingsStorageDisk) + api(projects.composeSettingsStorageMemory) api(projects.composeSettingsUiM3) } diff --git a/compose-settings-storage-base/src/commonMain/kotlin/com/alorma/compose/settings/storage/base/ValueProviders.kt b/compose-settings-storage-base/src/commonMain/kotlin/com/alorma/compose/settings/storage/base/ValueProviders.kt index e51707fd..f59de522 100644 --- a/compose-settings-storage-base/src/commonMain/kotlin/com/alorma/compose/settings/storage/base/ValueProviders.kt +++ b/compose-settings-storage-base/src/commonMain/kotlin/com/alorma/compose/settings/storage/base/ValueProviders.kt @@ -1,92 +1,22 @@ package com.alorma.compose.settings.storage.base -import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue import kotlin.reflect.KProperty -@Composable -fun rememberBooleanSettingState(defaultValue: Boolean = false): SettingValueState { - return remember { InMemoryBooleanSettingValueState(defaultValue) } -} - -@Composable -fun rememberFloatSettingState(defaultValue: Float = 0f): SettingValueState { - return remember { InMemoryFloatSettingValueState(defaultValue) } -} - -@Composable -fun rememberIntSettingState(defaultValue: Int = -1): SettingValueState { - return remember { InMemoryIntSettingValueState(defaultValue) } -} - -@Composable -fun rememberStringSettingState(defaultValue: String? = null): SettingValueState { - return remember { InMemoryStringSettingValueState(defaultValue) } -} - -@Composable -fun rememberIntSetSettingState(defaultValue: Set = emptySet()): SettingValueState> { - return remember { InMemoryIntSetSettingValueState(defaultValue) } -} - @Suppress("NOTHING_TO_INLINE") inline operator fun SettingValueState.getValue(thisObj: Any?, property: KProperty<*>): T = - value + value @Suppress("NOTHING_TO_INLINE") inline operator fun SettingValueState.setValue( - thisObj: Any?, - property: KProperty<*>, - value: T, + thisObj: Any?, + property: KProperty<*>, + value: T, ) { - this.value = value + this.value = value } interface SettingValueState { - fun reset() + fun reset() - var value: T -} - -internal class InMemoryBooleanSettingValueState(private val defaultValue: Boolean) : - SettingValueState { - override var value: Boolean by mutableStateOf(defaultValue) - override fun reset() { - value = defaultValue - } -} - -internal class InMemoryFloatSettingValueState(private val defaultValue: Float) : - SettingValueState { - override var value: Float by mutableStateOf(defaultValue) - override fun reset() { - value = defaultValue - } -} - -internal class InMemoryIntSettingValueState(private val defaultValue: Int) : - SettingValueState { - override var value: Int by mutableStateOf(defaultValue) - override fun reset() { - value = defaultValue - } -} - -internal class InMemoryStringSettingValueState(private val defaultValue: String?) : - SettingValueState { - override var value: String? by mutableStateOf(defaultValue) - override fun reset() { - value = defaultValue - } -} - -internal class InMemoryIntSetSettingValueState(private val defaultValue: Set) : - SettingValueState> { - override var value: Set by mutableStateOf(defaultValue) - override fun reset() { - value = defaultValue - } -} + var value: T +} \ No newline at end of file diff --git a/compose-settings-storage-disk/build.gradle.kts b/compose-settings-storage-disk/build.gradle.kts index 07e14b1d..b2590411 100644 --- a/compose-settings-storage-disk/build.gradle.kts +++ b/compose-settings-storage-disk/build.gradle.kts @@ -93,7 +93,7 @@ android { debugImplementation(libs.compose.ui.tooling) } } -/* + compose.desktop { application { nativeDistributions { @@ -102,6 +102,4 @@ compose.desktop { packageVersion = "1.0.0" } } -} - -*/ \ No newline at end of file +} \ No newline at end of file diff --git a/compose-settings-storage-disk/src/androidMain/kotlin/com/alorma/compose/settings/storage/disk/StringPreferenceSettingValueState.kt b/compose-settings-storage-disk/src/androidMain/kotlin/com/alorma/compose/settings/storage/disk/StringPreferenceSettingValueState.kt new file mode 100644 index 00000000..2665e708 --- /dev/null +++ b/compose-settings-storage-disk/src/androidMain/kotlin/com/alorma/compose/settings/storage/disk/StringPreferenceSettingValueState.kt @@ -0,0 +1,47 @@ +package com.alorma.compose.settings.storage.disk + +import android.content.SharedPreferences +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.platform.LocalContext +import androidx.core.content.edit +import androidx.preference.PreferenceManager +import com.alorma.compose.settings.storage.base.SettingValueState + +@Composable +fun rememberPreferenceStringSettingState( + key: String, + defaultValue: String? = null, + preferences: SharedPreferences = PreferenceManager.getDefaultSharedPreferences(LocalContext.current), +): StringPreferenceSettingValueState { + return remember { + StringPreferenceSettingValueState( + key = key, + preferences = preferences, + defaultValue = defaultValue, + ) + } +} + +class StringPreferenceSettingValueState( + private val preferences: SharedPreferences, + val key: String, + val defaultValue: String?, +) : SettingValueState { + + private var _value by mutableStateOf(preferences.getString(key, defaultValue)) + + override var value: String? + set(value) { + _value = value + preferences.edit { putString(key, value) } + } + get() = _value + + override fun reset() { + value = defaultValue + } +} diff --git a/compose-settings-storage-disk/src/commonMain/kotlin/com/alorma/compose/settings/storage/disk/StringSettingValueState.kt b/compose-settings-storage-disk/src/commonMain/kotlin/com/alorma/compose/settings/storage/disk/StringSettingValueState.kt new file mode 100644 index 00000000..b1c27de9 --- /dev/null +++ b/compose-settings-storage-disk/src/commonMain/kotlin/com/alorma/compose/settings/storage/disk/StringSettingValueState.kt @@ -0,0 +1,44 @@ +package com.alorma.compose.settings.storage.disk + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import com.alorma.compose.settings.storage.base.SettingValueState +import com.russhwolf.settings.Settings + +@Composable +fun rememberStringSettingState( + key: String, + defaultValue: String? = null, + settings: Settings = Settings() +): StringSettingValueState { + return remember { + StringSettingValueState( + settings = settings, + key = key, + defaultValue = defaultValue, + ) + } +} + +class StringSettingValueState( + private val settings: Settings, + val key: String, + val defaultValue: String?, +) : SettingValueState { + + private var _value by mutableStateOf(settings.getStringOrNull(key)) + + override var value: String? + set(value) { + _value = value + settings.putString(key, value.orEmpty()) + } + get() = _value + + override fun reset() { + value = defaultValue + } +} diff --git a/compose-settings-storage-memory/build.gradle.kts b/compose-settings-storage-memory/build.gradle.kts new file mode 100644 index 00000000..b36efd78 --- /dev/null +++ b/compose-settings-storage-memory/build.gradle.kts @@ -0,0 +1,102 @@ +import org.jetbrains.compose.ExperimentalComposeLibrary +import org.jetbrains.compose.desktop.application.dsl.TargetFormat + +plugins { + alias(libs.plugins.kotlinMultiplatform) + alias(libs.plugins.androidLibrary) + alias(libs.plugins.jetbrainsCompose) +} + +apply(from = "${rootProject.projectDir}/scripts/publish-module.gradle") + +kotlin { + applyDefaultHierarchyTemplate() + + withSourcesJar() + + androidTarget { + publishLibraryVariants("release") + compilations.all { + kotlinOptions { + jvmTarget = JavaVersion.VERSION_17.toString() + } + } + } + + jvm("desktop") + + listOf( + iosX64(), + iosArm64(), + iosSimulatorArm64() + ).forEach { iosTarget -> + iosTarget.binaries.framework { + baseName = "ComposeApp" + binaryOption("bundleId", libs.versions.namespace.get() + ".memory") + } + } + + sourceSets { + androidMain.dependencies { + implementation(libs.androidx.preference.preference) + implementation(libs.androidx.preference.ktx) + } + + commonMain.dependencies { + api(projects.composeSettingsStorageBase) + + implementation(compose.runtime) + implementation(compose.foundation) + } + } +} + +android { + namespace = libs.versions.namespace.get() + ".memory" + compileSdk = libs.versions.android.compileSdk.get().toInt() + + sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml") + sourceSets["main"].res.srcDirs("src/androidMain/res") + sourceSets["main"].resources.srcDirs("src/commonMain/resources") + + defaultConfig { + minSdk = libs.versions.android.minSdk.get().toInt() + } + buildFeatures { + compose = true + } + composeOptions { + kotlinCompilerExtensionVersion = libs.versions.compose.compiler.get() + } + packaging { + resources { + excludes += "/META-INF/{AL2.0,LGPL2.1}" + } + } + lint { + checkReleaseBuilds = false + abortOnError = false + } + buildTypes { + getByName("release") { + isMinifyEnabled = false + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } + dependencies { + debugImplementation(libs.compose.ui.tooling) + } +} + +compose.desktop { + application { + nativeDistributions { + targetFormats(TargetFormat.Dmg, TargetFormat.Msi, TargetFormat.Deb) + packageName = libs.versions.namespace.get() + ".memory" + packageVersion = "1.0.0" + } + } +} \ No newline at end of file diff --git a/compose-settings-storage-memory/src/commonMain/kotlin/com/alorma/compose/settings/storage/disk/BooleanSettingValueState.kt b/compose-settings-storage-memory/src/commonMain/kotlin/com/alorma/compose/settings/storage/disk/BooleanSettingValueState.kt new file mode 100644 index 00000000..ddd5b3b6 --- /dev/null +++ b/compose-settings-storage-memory/src/commonMain/kotlin/com/alorma/compose/settings/storage/disk/BooleanSettingValueState.kt @@ -0,0 +1,21 @@ +package com.alorma.compose.settings.storage.disk + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import com.alorma.compose.settings.storage.base.SettingValueState + +@Composable +fun rememberBooleanSettingState(defaultValue: Boolean = false): SettingValueState { + return remember { InMemoryBooleanSettingValueState(defaultValue) } +} + +internal class InMemoryBooleanSettingValueState(private val defaultValue: Boolean) : + SettingValueState { + override var value: Boolean by mutableStateOf(defaultValue) + override fun reset() { + value = defaultValue + } +} \ No newline at end of file diff --git a/compose-settings-storage-memory/src/commonMain/kotlin/com/alorma/compose/settings/storage/disk/FloatSettingValueState.kt b/compose-settings-storage-memory/src/commonMain/kotlin/com/alorma/compose/settings/storage/disk/FloatSettingValueState.kt new file mode 100644 index 00000000..498447ed --- /dev/null +++ b/compose-settings-storage-memory/src/commonMain/kotlin/com/alorma/compose/settings/storage/disk/FloatSettingValueState.kt @@ -0,0 +1,21 @@ +package com.alorma.compose.settings.storage.disk + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import com.alorma.compose.settings.storage.base.SettingValueState + +@Composable +fun rememberFloatSettingState(defaultValue: Float = 0f): SettingValueState { + return remember { InMemoryFloatSettingValueState(defaultValue) } +} + +internal class InMemoryFloatSettingValueState(private val defaultValue: Float) : + SettingValueState { + override var value: Float by mutableStateOf(defaultValue) + override fun reset() { + value = defaultValue + } +} \ No newline at end of file diff --git a/compose-settings-storage-memory/src/commonMain/kotlin/com/alorma/compose/settings/storage/disk/IntSetSettingValueState.kt b/compose-settings-storage-memory/src/commonMain/kotlin/com/alorma/compose/settings/storage/disk/IntSetSettingValueState.kt new file mode 100644 index 00000000..e2c7c493 --- /dev/null +++ b/compose-settings-storage-memory/src/commonMain/kotlin/com/alorma/compose/settings/storage/disk/IntSetSettingValueState.kt @@ -0,0 +1,21 @@ +package com.alorma.compose.settings.storage.disk + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import com.alorma.compose.settings.storage.base.SettingValueState + +@Composable +fun rememberIntSetSettingState(defaultValue: Set = emptySet()): SettingValueState> { + return remember { InMemoryIntSetSettingValueState(defaultValue) } +} + +internal class InMemoryIntSetSettingValueState(private val defaultValue: Set) : + SettingValueState> { + override var value: Set by mutableStateOf(defaultValue) + override fun reset() { + value = defaultValue + } +} diff --git a/compose-settings-storage-memory/src/commonMain/kotlin/com/alorma/compose/settings/storage/disk/IntSettingValueState.kt b/compose-settings-storage-memory/src/commonMain/kotlin/com/alorma/compose/settings/storage/disk/IntSettingValueState.kt new file mode 100644 index 00000000..8651afd9 --- /dev/null +++ b/compose-settings-storage-memory/src/commonMain/kotlin/com/alorma/compose/settings/storage/disk/IntSettingValueState.kt @@ -0,0 +1,21 @@ +package com.alorma.compose.settings.storage.disk + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import com.alorma.compose.settings.storage.base.SettingValueState + +@Composable +fun rememberIntSettingState(defaultValue: Int = -1): SettingValueState { + return remember { InMemoryIntSettingValueState(defaultValue) } +} + +internal class InMemoryIntSettingValueState(private val defaultValue: Int) : + SettingValueState { + override var value: Int by mutableStateOf(defaultValue) + override fun reset() { + value = defaultValue + } +} \ No newline at end of file diff --git a/compose-settings-storage-memory/src/commonMain/kotlin/com/alorma/compose/settings/storage/disk/StringSettingValueState.kt b/compose-settings-storage-memory/src/commonMain/kotlin/com/alorma/compose/settings/storage/disk/StringSettingValueState.kt new file mode 100644 index 00000000..45d60168 --- /dev/null +++ b/compose-settings-storage-memory/src/commonMain/kotlin/com/alorma/compose/settings/storage/disk/StringSettingValueState.kt @@ -0,0 +1,21 @@ +package com.alorma.compose.settings.storage.disk + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import com.alorma.compose.settings.storage.base.SettingValueState + +@Composable +fun rememberStringSettingState(defaultValue: String? = null): SettingValueState { + return remember { InMemoryStringSettingValueState(defaultValue) } +} + +internal class InMemoryStringSettingValueState(private val defaultValue: String?) : + SettingValueState { + override var value: String? by mutableStateOf(defaultValue) + override fun reset() { + value = defaultValue + } +} \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index 30b2454d..30c0491b 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -22,4 +22,5 @@ dependencyResolutionManagement { //include(":compose-settings-ui-m3") include(":compose-settings-storage-base") include(":compose-settings-storage-disk") +include(":compose-settings-storage-memory") //include(":compose-settings-bom")