[dev QoL] Added AndroidStudio previews for [presentation.history] namespace (#10012)

* Added display preview for HistoryDialogs

* Added preview with provider for each branch for HistoryItem

* Added previews for HistoryScreen

Created in-memory preferences construct for when its needed at top-level injection

* Fixed ktlint violations
This commit is contained in:
Caleb Morris
2023-10-14 19:23:11 -07:00
committed by GitHub
parent 0be7ac5871
commit 447bcb28ef
7 changed files with 348 additions and 1 deletions

View File

@ -0,0 +1,96 @@
package tachiyomi.core.preference
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.flow.stateIn
/**
* Local-copy implementation of PreferenceStore mostly for test and preview purposes
*/
class InMemoryPreferenceStore(
private val initialPreferences: Sequence<InMemoryPreference<*>> = sequenceOf(),
) : PreferenceStore {
private val preferences: Map<String, Preference<*>> =
initialPreferences.toList().associateBy { it.key() }
override fun getString(key: String, defaultValue: String): Preference<String> {
val default = InMemoryPreference(key, null, defaultValue)
val data: String? = preferences[key]?.get() as? String
return if (data == null) default else InMemoryPreference(key, data, defaultValue)
}
override fun getLong(key: String, defaultValue: Long): Preference<Long> {
val default = InMemoryPreference(key, null, defaultValue)
val data: Long? = preferences[key]?.get() as? Long
return if (data == null) default else InMemoryPreference(key, data, defaultValue)
}
override fun getInt(key: String, defaultValue: Int): Preference<Int> {
val default = InMemoryPreference(key, null, defaultValue)
val data: Int? = preferences[key]?.get() as? Int
return if (data == null) default else InMemoryPreference(key, data, defaultValue)
}
override fun getFloat(key: String, defaultValue: Float): Preference<Float> {
val default = InMemoryPreference(key, null, defaultValue)
val data: Float? = preferences[key]?.get() as? Float
return if (data == null) default else InMemoryPreference(key, data, defaultValue)
}
override fun getBoolean(key: String, defaultValue: Boolean): Preference<Boolean> {
val default = InMemoryPreference(key, null, defaultValue)
val data: Boolean? = preferences[key]?.get() as? Boolean
return if (data == null) default else InMemoryPreference(key, data, defaultValue)
}
override fun getStringSet(key: String, defaultValue: Set<String>): Preference<Set<String>> {
TODO("Not yet implemented")
}
override fun <T> getObject(
key: String,
defaultValue: T,
serializer: (T) -> String,
deserializer: (String) -> T,
): Preference<T> {
val default = InMemoryPreference(key, null, defaultValue)
val data: T? = preferences[key]?.get() as? T
return if (data == null) default else InMemoryPreference<T>(key, data, defaultValue)
}
override fun getAll(): Map<String, *> {
return preferences
}
class InMemoryPreference<T>(
private val key: String,
private var data: T?,
private val defaultValue: T,
) : Preference<T> {
override fun key(): String = key
override fun get(): T = data ?: defaultValue()
override fun isSet(): Boolean = data != null
override fun delete() {
data = null
}
override fun defaultValue(): T = defaultValue
override fun changes(): Flow<T> = flow { data }
override fun stateIn(scope: CoroutineScope): StateFlow<T> {
return changes().stateIn(scope, SharingStarted.Eagerly, get())
}
override fun set(value: T) {
data = value
}
}
}