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