mirror of
https://github.com/Suwayomi/TachideskJUI.git
synced 2025-12-10 14:52:03 +01:00
Deduplicate and fix deprecation warnings
This commit is contained in:
@@ -22,16 +22,6 @@ internal class AndroidPreference<T>(
|
||||
private val adapter: Adapter<T>
|
||||
) : Preference<T> {
|
||||
|
||||
interface Adapter<T> {
|
||||
fun get(key: String, preferences: ObservableSettings): T
|
||||
|
||||
fun set(key: String, value: T, editor: ObservableSettings)
|
||||
|
||||
fun isSet(keys: Set<String>, key: String): Boolean = key in keys
|
||||
|
||||
fun keyListener(key: String) = key
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the key of this preference.
|
||||
*/
|
||||
@@ -83,7 +73,7 @@ internal class AndroidPreference<T>(
|
||||
*/
|
||||
override fun changes(): Flow<T> {
|
||||
return callbackFlow {
|
||||
val listener = preferences.addListener(adapter.keyListener(key)) {
|
||||
val listener = adapter.addListener(key, preferences) {
|
||||
trySend(get())
|
||||
}
|
||||
awaitClose { listener.deactivate() }
|
||||
|
||||
@@ -7,13 +7,13 @@
|
||||
package ca.gosyer.jui.core.prefs
|
||||
|
||||
import android.content.Context
|
||||
import com.russhwolf.settings.AndroidSettings
|
||||
import com.russhwolf.settings.SharedPreferencesSettings
|
||||
import me.tatarka.inject.annotations.Inject
|
||||
|
||||
actual class PreferenceStoreFactory @Inject constructor(private val context: Context) {
|
||||
actual fun create(vararg names: String): PreferenceStore {
|
||||
return AndroidPreferenceStore(
|
||||
AndroidSettings(
|
||||
SharedPreferencesSettings(
|
||||
context.getSharedPreferences(
|
||||
names.joinToString(separator = "_"),
|
||||
Context.MODE_PRIVATE
|
||||
|
||||
@@ -22,16 +22,6 @@ internal class JvmPreference<T>(
|
||||
private val adapter: Adapter<T>
|
||||
) : Preference<T> {
|
||||
|
||||
interface Adapter<T> {
|
||||
fun get(key: String, preferences: ObservableSettings): T
|
||||
|
||||
fun set(key: String, value: T, editor: ObservableSettings)
|
||||
|
||||
fun isSet(keys: Set<String>, key: String): Boolean = key in keys
|
||||
|
||||
fun keyListener(key: String) = key
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the key of this preference.
|
||||
*/
|
||||
@@ -83,7 +73,7 @@ internal class JvmPreference<T>(
|
||||
*/
|
||||
override fun changes(): Flow<T> {
|
||||
return callbackFlow {
|
||||
val listener = preferences.addListener(adapter.keyListener(key)) {
|
||||
val listener = adapter.addListener(key, preferences) {
|
||||
trySend(get())
|
||||
}
|
||||
awaitClose { listener.deactivate() }
|
||||
|
||||
@@ -6,123 +6,4 @@
|
||||
|
||||
package ca.gosyer.jui.core.prefs
|
||||
|
||||
import com.russhwolf.settings.ObservableSettings
|
||||
import com.russhwolf.settings.serialization.decodeValue
|
||||
import com.russhwolf.settings.serialization.encodeValue
|
||||
import kotlinx.serialization.KSerializer
|
||||
import kotlinx.serialization.builtins.SetSerializer
|
||||
import kotlinx.serialization.builtins.serializer
|
||||
import kotlinx.serialization.modules.EmptySerializersModule
|
||||
import kotlinx.serialization.modules.SerializersModule
|
||||
|
||||
internal object StringAdapter : JvmPreference.Adapter<String> {
|
||||
override fun get(key: String, preferences: ObservableSettings): String {
|
||||
return preferences.getString(key, "") // Not called unless key is present.
|
||||
}
|
||||
|
||||
override fun set(key: String, value: String, editor: ObservableSettings) {
|
||||
editor.putString(key, value)
|
||||
}
|
||||
}
|
||||
|
||||
internal object LongAdapter : JvmPreference.Adapter<Long> {
|
||||
override fun get(key: String, preferences: ObservableSettings): Long {
|
||||
return preferences.getLong(key, 0)
|
||||
}
|
||||
|
||||
override fun set(key: String, value: Long, editor: ObservableSettings) {
|
||||
editor.putLong(key, value)
|
||||
}
|
||||
}
|
||||
|
||||
internal object IntAdapter : JvmPreference.Adapter<Int> {
|
||||
override fun get(key: String, preferences: ObservableSettings): Int {
|
||||
return preferences.getInt(key, 0)
|
||||
}
|
||||
|
||||
override fun set(key: String, value: Int, editor: ObservableSettings) {
|
||||
editor.putInt(key, value)
|
||||
}
|
||||
}
|
||||
|
||||
internal object FloatAdapter : JvmPreference.Adapter<Float> {
|
||||
override fun get(key: String, preferences: ObservableSettings): Float {
|
||||
return preferences.getFloat(key, 0f)
|
||||
}
|
||||
|
||||
override fun set(key: String, value: Float, editor: ObservableSettings) {
|
||||
editor.putFloat(key, value)
|
||||
}
|
||||
}
|
||||
|
||||
internal object BooleanAdapter : JvmPreference.Adapter<Boolean> {
|
||||
override fun get(key: String, preferences: ObservableSettings): Boolean {
|
||||
return preferences.getBoolean(key, false)
|
||||
}
|
||||
|
||||
override fun set(key: String, value: Boolean, editor: ObservableSettings) {
|
||||
editor.putBoolean(key, value)
|
||||
}
|
||||
}
|
||||
|
||||
internal object StringSetAdapter : JvmPreference.Adapter<Set<String>> {
|
||||
override fun get(key: String, preferences: ObservableSettings): Set<String> {
|
||||
return preferences.decodeValue(SetSerializer(String.serializer()), key, emptySet()) // Not called unless key is present.
|
||||
}
|
||||
|
||||
override fun set(key: String, value: Set<String>, editor: ObservableSettings) {
|
||||
editor.encodeValue(SetSerializer(String.serializer()), key, value)
|
||||
}
|
||||
|
||||
/**
|
||||
* Encoding a string set makes a list of keys and a size key, such as key.size and key.0-size
|
||||
*/
|
||||
override fun isSet(keys: Set<String>, key: String): Boolean {
|
||||
return keys.contains("$key.size")
|
||||
}
|
||||
|
||||
/**
|
||||
* Watching the regular key doesnt produce updates for a string set for some reason
|
||||
* TODO make better, doesnt produce updates when you add something and remove something
|
||||
*/
|
||||
override fun keyListener(key: String): String {
|
||||
return "$key.size"
|
||||
}
|
||||
}
|
||||
|
||||
internal class ObjectAdapter<T>(
|
||||
private val serializer: (T) -> String,
|
||||
private val deserializer: (String) -> T
|
||||
) : JvmPreference.Adapter<T> {
|
||||
|
||||
override fun get(key: String, preferences: ObservableSettings): T {
|
||||
return deserializer(preferences.getString(key, "")) // Not called unless key is present.
|
||||
}
|
||||
|
||||
override fun set(key: String, value: T, editor: ObservableSettings) {
|
||||
editor.putString(key, serializer(value))
|
||||
}
|
||||
}
|
||||
|
||||
internal class JsonObjectAdapter<T>(
|
||||
private val defaultValue: T,
|
||||
private val serializer: KSerializer<T>,
|
||||
private val serializersModule: SerializersModule = EmptySerializersModule
|
||||
) : JvmPreference.Adapter<T> {
|
||||
|
||||
override fun get(key: String, preferences: ObservableSettings): T {
|
||||
return preferences.decodeValue(serializer, key, defaultValue, serializersModule) // Not called unless key is present.
|
||||
}
|
||||
|
||||
override fun set(key: String, value: T, editor: ObservableSettings) {
|
||||
editor.encodeValue(serializer, key, value, serializersModule)
|
||||
}
|
||||
|
||||
/**
|
||||
* Encoding a structure makes keys start with the [key] and adds extensions for values,
|
||||
* for a pair it would be like [key].first [key].second.
|
||||
*/
|
||||
override fun isSet(keys: Set<String>, key: String): Boolean {
|
||||
return keys.any { it.startsWith(key) }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
package ca.gosyer.jui.core.prefs
|
||||
|
||||
import com.russhwolf.settings.JvmPreferencesSettings
|
||||
import com.russhwolf.settings.PreferencesSettings
|
||||
import me.tatarka.inject.annotations.Inject
|
||||
import java.util.prefs.Preferences
|
||||
|
||||
@@ -16,7 +16,7 @@ actual class PreferenceStoreFactory @Inject constructor() {
|
||||
|
||||
actual fun create(vararg names: String): PreferenceStore {
|
||||
return JvmPreferenceStore(
|
||||
JvmPreferencesSettings(
|
||||
PreferencesSettings(
|
||||
rootNode.node(names.joinToString(separator = "/"))
|
||||
)
|
||||
)
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
package ca.gosyer.jui.core.prefs
|
||||
|
||||
import com.russhwolf.settings.ObservableSettings
|
||||
import com.russhwolf.settings.SettingsListener
|
||||
import com.russhwolf.settings.serialization.decodeValue
|
||||
import com.russhwolf.settings.serialization.encodeValue
|
||||
import kotlinx.serialization.KSerializer
|
||||
@@ -15,7 +16,17 @@ import kotlinx.serialization.builtins.serializer
|
||||
import kotlinx.serialization.modules.EmptySerializersModule
|
||||
import kotlinx.serialization.modules.SerializersModule
|
||||
|
||||
internal object StringAdapter : AndroidPreference.Adapter<String> {
|
||||
interface Adapter<T> {
|
||||
fun get(key: String, preferences: ObservableSettings): T
|
||||
|
||||
fun set(key: String, value: T, editor: ObservableSettings)
|
||||
|
||||
fun isSet(keys: Set<String>, key: String): Boolean = key in keys
|
||||
|
||||
fun addListener(key: String, preferences: ObservableSettings, callback: () -> Unit): SettingsListener
|
||||
}
|
||||
|
||||
internal object StringAdapter : Adapter<String> {
|
||||
override fun get(key: String, preferences: ObservableSettings): String {
|
||||
return preferences.getString(key, "") // Not called unless key is present.
|
||||
}
|
||||
@@ -23,9 +34,13 @@ internal object StringAdapter : AndroidPreference.Adapter<String> {
|
||||
override fun set(key: String, value: String, editor: ObservableSettings) {
|
||||
editor.putString(key, value)
|
||||
}
|
||||
|
||||
override fun addListener(key: String, preferences: ObservableSettings, callback: () -> Unit): SettingsListener {
|
||||
return preferences.addStringOrNullListener(key) { callback() }
|
||||
}
|
||||
}
|
||||
|
||||
internal object LongAdapter : AndroidPreference.Adapter<Long> {
|
||||
internal object LongAdapter : Adapter<Long> {
|
||||
override fun get(key: String, preferences: ObservableSettings): Long {
|
||||
return preferences.getLong(key, 0)
|
||||
}
|
||||
@@ -33,9 +48,13 @@ internal object LongAdapter : AndroidPreference.Adapter<Long> {
|
||||
override fun set(key: String, value: Long, editor: ObservableSettings) {
|
||||
editor.putLong(key, value)
|
||||
}
|
||||
|
||||
override fun addListener(key: String, preferences: ObservableSettings, callback: () -> Unit): SettingsListener {
|
||||
return preferences.addLongOrNullListener(key) { callback() }
|
||||
}
|
||||
}
|
||||
|
||||
internal object IntAdapter : AndroidPreference.Adapter<Int> {
|
||||
internal object IntAdapter : Adapter<Int> {
|
||||
override fun get(key: String, preferences: ObservableSettings): Int {
|
||||
return preferences.getInt(key, 0)
|
||||
}
|
||||
@@ -43,9 +62,13 @@ internal object IntAdapter : AndroidPreference.Adapter<Int> {
|
||||
override fun set(key: String, value: Int, editor: ObservableSettings) {
|
||||
editor.putInt(key, value)
|
||||
}
|
||||
|
||||
override fun addListener(key: String, preferences: ObservableSettings, callback: () -> Unit): SettingsListener {
|
||||
return preferences.addIntOrNullListener(key) { callback() }
|
||||
}
|
||||
}
|
||||
|
||||
internal object FloatAdapter : AndroidPreference.Adapter<Float> {
|
||||
internal object FloatAdapter : Adapter<Float> {
|
||||
override fun get(key: String, preferences: ObservableSettings): Float {
|
||||
return preferences.getFloat(key, 0f)
|
||||
}
|
||||
@@ -53,9 +76,13 @@ internal object FloatAdapter : AndroidPreference.Adapter<Float> {
|
||||
override fun set(key: String, value: Float, editor: ObservableSettings) {
|
||||
editor.putFloat(key, value)
|
||||
}
|
||||
|
||||
override fun addListener(key: String, preferences: ObservableSettings, callback: () -> Unit): SettingsListener {
|
||||
return preferences.addFloatOrNullListener(key) { callback() }
|
||||
}
|
||||
}
|
||||
|
||||
internal object BooleanAdapter : AndroidPreference.Adapter<Boolean> {
|
||||
internal object BooleanAdapter : Adapter<Boolean> {
|
||||
override fun get(key: String, preferences: ObservableSettings): Boolean {
|
||||
return preferences.getBoolean(key, false)
|
||||
}
|
||||
@@ -63,15 +90,21 @@ internal object BooleanAdapter : AndroidPreference.Adapter<Boolean> {
|
||||
override fun set(key: String, value: Boolean, editor: ObservableSettings) {
|
||||
editor.putBoolean(key, value)
|
||||
}
|
||||
|
||||
override fun addListener(key: String, preferences: ObservableSettings, callback: () -> Unit): SettingsListener {
|
||||
return preferences.addBooleanOrNullListener(key) { callback() }
|
||||
}
|
||||
}
|
||||
|
||||
internal object StringSetAdapter : AndroidPreference.Adapter<Set<String>> {
|
||||
internal object StringSetAdapter : Adapter<Set<String>> {
|
||||
private val serializer = SetSerializer(String.serializer())
|
||||
|
||||
override fun get(key: String, preferences: ObservableSettings): Set<String> {
|
||||
return preferences.decodeValue(SetSerializer(String.serializer()), key, emptySet()) // Not called unless key is present.
|
||||
return preferences.decodeValue(serializer, key, emptySet()) // Not called unless key is present.
|
||||
}
|
||||
|
||||
override fun set(key: String, value: Set<String>, editor: ObservableSettings) {
|
||||
editor.encodeValue(SetSerializer(String.serializer()), key, value)
|
||||
editor.encodeValue(serializer, key, value)
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -82,18 +115,18 @@ internal object StringSetAdapter : AndroidPreference.Adapter<Set<String>> {
|
||||
}
|
||||
|
||||
/**
|
||||
* Watching the regular key doesnt produce updates for a string set for some reason
|
||||
* TODO make better, doesnt produce updates when you add something and remove something
|
||||
* Watching the regular key doesn't produce updates for a string set for some reason
|
||||
* TODO make better, doesn't produce updates when you add something and remove something
|
||||
*/
|
||||
override fun keyListener(key: String): String {
|
||||
return "$key.size"
|
||||
override fun addListener(key: String, preferences: ObservableSettings, callback: () -> Unit): SettingsListener {
|
||||
return preferences.addStringOrNullListener("$key.size") { callback() }
|
||||
}
|
||||
}
|
||||
|
||||
internal class ObjectAdapter<T>(
|
||||
private val serializer: (T) -> String,
|
||||
private val deserializer: (String) -> T
|
||||
) : AndroidPreference.Adapter<T> {
|
||||
) : Adapter<T> {
|
||||
|
||||
override fun get(key: String, preferences: ObservableSettings): T {
|
||||
return deserializer(preferences.getString(key, "")) // Not called unless key is present.
|
||||
@@ -102,13 +135,17 @@ internal class ObjectAdapter<T>(
|
||||
override fun set(key: String, value: T, editor: ObservableSettings) {
|
||||
editor.putString(key, serializer(value))
|
||||
}
|
||||
|
||||
override fun addListener(key: String, preferences: ObservableSettings, callback: () -> Unit): SettingsListener {
|
||||
return preferences.addStringOrNullListener(key) { callback() }
|
||||
}
|
||||
}
|
||||
|
||||
internal class JsonObjectAdapter<T>(
|
||||
private val defaultValue: T,
|
||||
private val serializer: KSerializer<T>,
|
||||
private val serializersModule: SerializersModule = EmptySerializersModule
|
||||
) : AndroidPreference.Adapter<T> {
|
||||
) : Adapter<T> {
|
||||
|
||||
override fun get(key: String, preferences: ObservableSettings): T {
|
||||
return preferences.decodeValue(serializer, key, defaultValue, serializersModule) // Not called unless key is present.
|
||||
@@ -125,4 +162,11 @@ internal class JsonObjectAdapter<T>(
|
||||
override fun isSet(keys: Set<String>, key: String): Boolean {
|
||||
return keys.any { it.startsWith(key) }
|
||||
}
|
||||
|
||||
/**
|
||||
* Todo doesn't work
|
||||
*/
|
||||
override fun addListener(key: String, preferences: ObservableSettings, callback: () -> Unit): SettingsListener {
|
||||
return preferences.addStringOrNullListener(key) { callback() }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user