Remove custom preference flow implementation
This commit is contained in:
parent
11e10f6eff
commit
bd20977ebc
@ -1,42 +0,0 @@
|
|||||||
package eu.kanade.tachiyomi.util
|
|
||||||
|
|
||||||
import android.content.SharedPreferences
|
|
||||||
import kotlin.coroutines.CoroutineContext
|
|
||||||
import kotlinx.coroutines.Dispatchers
|
|
||||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
|
||||||
import kotlinx.coroutines.channels.awaitClose
|
|
||||||
import kotlinx.coroutines.flow.Flow
|
|
||||||
import kotlinx.coroutines.flow.channelFlow
|
|
||||||
import kotlinx.coroutines.flow.flowOn
|
|
||||||
|
|
||||||
@ExperimentalCoroutinesApi
|
|
||||||
inline fun <reified T> SharedPreferences.getKey(key: String, default: T, dispatcher: CoroutineContext = Dispatchers.Default): Flow<T> {
|
|
||||||
val flow: Flow<T> = channelFlow {
|
|
||||||
offer(getItem(key, default))
|
|
||||||
|
|
||||||
val listener = SharedPreferences.OnSharedPreferenceChangeListener { _, k ->
|
|
||||||
if (key == k) {
|
|
||||||
offer(getItem(key, default)!!)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
registerOnSharedPreferenceChangeListener(listener)
|
|
||||||
awaitClose { unregisterOnSharedPreferenceChangeListener(listener) }
|
|
||||||
}
|
|
||||||
return flow
|
|
||||||
.flowOn(dispatcher)
|
|
||||||
}
|
|
||||||
|
|
||||||
inline fun <reified T> SharedPreferences.getItem(key: String, default: T): T {
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
|
||||||
return when (default) {
|
|
||||||
is String -> getString(key, default) as T
|
|
||||||
is Int -> getInt(key, default) as T
|
|
||||||
is Long -> getLong(key, default) as T
|
|
||||||
is Boolean -> getBoolean(key, default) as T
|
|
||||||
is Float -> getFloat(key, default) as T
|
|
||||||
is Set<*> -> getStringSet(key, default as Set<String>) as T
|
|
||||||
is MutableSet<*> -> getStringSet(key, default as MutableSet<String>) as T
|
|
||||||
else -> throw IllegalArgumentException("Generic type not handled: ${T::class.java.name}")
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user