From 4e8fd15508d694d3f9ee4a88692f9ce94cc2ff69 Mon Sep 17 00:00:00 2001 From: Niels van Velzen Date: Sun, 4 Aug 2024 10:36:17 +0200 Subject: [PATCH] Support float preferences --- .../preference/store/DisplayPreferencesStore.kt | 7 +++++++ preference/src/main/kotlin/Preference.kt | 1 + preference/src/main/kotlin/store/PreferenceStore.kt | 4 ++++ .../src/main/kotlin/store/SharedPreferenceStore.kt | 4 ++++ preference/src/test/kotlin/PreferenceStoreTests.kt | 11 +++++++++-- 5 files changed, 25 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/jellyfin/androidtv/preference/store/DisplayPreferencesStore.kt b/app/src/main/java/org/jellyfin/androidtv/preference/store/DisplayPreferencesStore.kt index d8e287107..fbea6a47c 100644 --- a/app/src/main/java/org/jellyfin/androidtv/preference/store/DisplayPreferencesStore.kt +++ b/app/src/main/java/org/jellyfin/androidtv/preference/store/DisplayPreferencesStore.kt @@ -82,6 +82,9 @@ abstract class DisplayPreferencesStore( override fun getLong(key: String, defaultValue: Long) = cachedPreferences[key]?.toLongOrNull() ?: defaultValue + override fun getFloat(key: String, defaultValue: Float) = + cachedPreferences[key]?.toFloatOrNull() ?: defaultValue + override fun getBool(key: String, defaultValue: Boolean) = cachedPreferences[key]?.toBooleanStrictOrNull() ?: defaultValue @@ -96,6 +99,10 @@ abstract class DisplayPreferencesStore( cachedPreferences[key] = value.toString() } + override fun setFloat(key: String, value: Float) { + cachedPreferences[key] = value.toString() + } + override fun setBool(key: String, value: Boolean) { cachedPreferences[key] = value.toString() } diff --git a/preference/src/main/kotlin/Preference.kt b/preference/src/main/kotlin/Preference.kt index 9208b5074..96ced75e5 100644 --- a/preference/src/main/kotlin/Preference.kt +++ b/preference/src/main/kotlin/Preference.kt @@ -10,6 +10,7 @@ data class Preference( fun intPreference(key: String, defaultValue: Int) = Preference(key, defaultValue, Int::class) fun longPreference(key: String, defaultValue: Long) = Preference(key, defaultValue, Long::class) +fun floatPreference(key: String, defaultValue: Float) = Preference(key, defaultValue, Float::class) fun booleanPreference(key: String, defaultValue: Boolean) = Preference(key, defaultValue, Boolean::class) fun stringPreference(key: String, defaultValue: String) = Preference(key, defaultValue, String::class) fun enumPreference(key: String, defaultValue: T, type: KClass) = Preference(key, defaultValue, type) diff --git a/preference/src/main/kotlin/store/PreferenceStore.kt b/preference/src/main/kotlin/store/PreferenceStore.kt index e14bc6d5a..2f123bdee 100644 --- a/preference/src/main/kotlin/store/PreferenceStore.kt +++ b/preference/src/main/kotlin/store/PreferenceStore.kt @@ -18,6 +18,7 @@ abstract class PreferenceStore { when (preference.defaultValue) { is Int -> getInt(preference.key, preference.defaultValue) is Long -> getLong(preference.key, preference.defaultValue) + is Float -> getFloat(preference.key, preference.defaultValue) is Boolean -> getBool(preference.key, preference.defaultValue) is String -> getString(preference.key, preference.defaultValue) else -> throw IllegalArgumentException("${preference.type.simpleName} type is not supported") @@ -31,6 +32,7 @@ abstract class PreferenceStore { when (value) { is Int -> setInt(preference.key, value) is Long -> setLong(preference.key, value) + is Float -> setFloat(preference.key, value) is Boolean -> setBool(preference.key, value) is String -> setString(preference.key, value) is Enum<*> -> setEnum(preference, value) @@ -52,11 +54,13 @@ abstract class PreferenceStore { // it in the abstract common functionality (where it is used) protected abstract fun getInt(key: String, defaultValue: Int): Int protected abstract fun getLong(key: String, defaultValue: Long): Long + protected abstract fun getFloat(key: String, defaultValue: Float): Float protected abstract fun getBool(key: String, defaultValue: Boolean): Boolean protected abstract fun getString(key: String, defaultValue: String): String protected abstract fun setInt(key: String, value: Int) protected abstract fun setLong(key: String, value: Long) + protected abstract fun setFloat(key: String, value: Float) protected abstract fun setBool(key: String, value: Boolean) protected abstract fun setString(key: String, value: String) diff --git a/preference/src/main/kotlin/store/SharedPreferenceStore.kt b/preference/src/main/kotlin/store/SharedPreferenceStore.kt index ffa65f4aa..3c8770e72 100644 --- a/preference/src/main/kotlin/store/SharedPreferenceStore.kt +++ b/preference/src/main/kotlin/store/SharedPreferenceStore.kt @@ -46,6 +46,9 @@ abstract class SharedPreferenceStore( override fun getLong(key: String, defaultValue: Long) = sharedPreferences.getLong(key, defaultValue) + override fun getFloat(key: String, defaultValue: Float) = + sharedPreferences.getFloat(key, defaultValue) + override fun getBool(key: String, defaultValue: Boolean) = sharedPreferences.getBoolean(key, defaultValue) @@ -54,6 +57,7 @@ abstract class SharedPreferenceStore( override fun setInt(key: String, value: Int) = transaction { putInt(key, value) } override fun setLong(key: String, value: Long) = transaction { putLong(key, value) } + override fun setFloat(key: String, value: Float) = transaction { putFloat(key, value) } override fun setBool(key: String, value: Boolean) = transaction { putBoolean(key, value) } diff --git a/preference/src/test/kotlin/PreferenceStoreTests.kt b/preference/src/test/kotlin/PreferenceStoreTests.kt index 583bf3db7..b51c988ba 100644 --- a/preference/src/test/kotlin/PreferenceStoreTests.kt +++ b/preference/src/test/kotlin/PreferenceStoreTests.kt @@ -20,6 +20,7 @@ class PreferenceStoreTests : FunSpec({ test("Reading and writing primitives works correctly") { verifySimpleType(1, intPreference("key", 0)) verifySimpleType(1L, longPreference("key", 0L)) + verifySimpleType(1f, floatPreference("key", 0f)) verifySimpleType(true, booleanPreference("key", false)) verifySimpleType("string", stringPreference("key", "")) } @@ -38,6 +39,7 @@ private class TestStub : PreferenceStore() { var key: String? = null private var int: Int? = null private var long: Long? = null + private var float: Float? = null private var bool: Boolean? = null private var string: String? = null private var enum: Enum<*>? = null @@ -47,7 +49,8 @@ private class TestStub : PreferenceStore() { (this.enum ?: preference.defaultValue) as T override fun getInt(key: String, defaultValue: Int): Int = int ?: 0 - override fun getLong(key: String, defaultValue: Long): Long = long ?: 0 + override fun getLong(key: String, defaultValue: Long): Long = long ?: 0L + override fun getFloat(key: String, defaultValue: Float): Float = float ?: 0f override fun getBool(key: String, defaultValue: Boolean): Boolean = bool ?: false override fun getString(key: String, defaultValue: String) = string ?: "" @@ -66,6 +69,11 @@ private class TestStub : PreferenceStore() { long = value } + override fun setFloat(key: String, value: Float) { + this.key = key + float = value + } + override fun setBool(key: String, value: Boolean) { this.key = key bool = value @@ -76,7 +84,6 @@ private class TestStub : PreferenceStore() { string = value } - override fun delete(preference: Preference) { throw NotImplementedError("Not required for tests") }