Remove rx pref library

This commit is contained in:
Jays2Kings 2021-10-12 20:43:36 -04:00
parent 80053ce073
commit b85f133580
37 changed files with 162 additions and 278 deletions

View file

@ -126,7 +126,6 @@ dependencies {
implementation("io.reactivex:rxandroid:1.2.1") implementation("io.reactivex:rxandroid:1.2.1")
implementation("io.reactivex:rxjava:1.3.8") implementation("io.reactivex:rxjava:1.3.8")
implementation("com.jakewharton.rxrelay:rxrelay:1.2.0") implementation("com.jakewharton.rxrelay:rxrelay:1.2.0")
implementation("com.f2prateek.rx.preferences:rx-preferences:1.0.2")
implementation("com.github.pwittchen:reactivenetwork:0.13.0") implementation("com.github.pwittchen:reactivenetwork:0.13.0")
// Coroutines // Coroutines

View file

@ -11,7 +11,6 @@ import androidx.multidex.MultiDex
import eu.kanade.tachiyomi.data.image.coil.CoilSetup import eu.kanade.tachiyomi.data.image.coil.CoilSetup
import eu.kanade.tachiyomi.data.notification.Notifications import eu.kanade.tachiyomi.data.notification.Notifications
import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.data.preference.getOrDefault
import eu.kanade.tachiyomi.ui.security.SecureActivityDelegate import eu.kanade.tachiyomi.ui.security.SecureActivityDelegate
import org.acra.ACRA import org.acra.ACRA
import org.acra.config.httpSender import org.acra.config.httpSender
@ -62,7 +61,7 @@ open class App : Application(), LifecycleObserver {
@Suppress("unused") @Suppress("unused")
fun onAppBackgrounded() { fun onAppBackgrounded() {
// App in background // App in background
if (!SecureActivityDelegate.isAuthenticating && preferences.lockAfter().getOrDefault() >= 0) { if (!SecureActivityDelegate.isAuthenticating && preferences.lockAfter().get() >= 0) {
SecureActivityDelegate.locked = true SecureActivityDelegate.locked = true
} }
} }

View file

@ -7,7 +7,6 @@ import eu.kanade.tachiyomi.data.download.DownloadProvider
import eu.kanade.tachiyomi.data.library.LibraryUpdateJob import eu.kanade.tachiyomi.data.library.LibraryUpdateJob
import eu.kanade.tachiyomi.data.preference.PreferenceKeys import eu.kanade.tachiyomi.data.preference.PreferenceKeys
import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.data.preference.getOrDefault
import eu.kanade.tachiyomi.data.preference.plusAssign import eu.kanade.tachiyomi.data.preference.plusAssign
import eu.kanade.tachiyomi.data.track.TrackManager import eu.kanade.tachiyomi.data.track.TrackManager
import eu.kanade.tachiyomi.data.updater.UpdaterJob import eu.kanade.tachiyomi.data.updater.UpdaterJob
@ -35,7 +34,7 @@ object Migrations {
prefs.edit { prefs.edit {
remove(UpdaterService.NOTIFY_ON_INSTALL_KEY) remove(UpdaterService.NOTIFY_ON_INSTALL_KEY)
} }
val oldVersion = preferences.lastVersionCode().getOrDefault() val oldVersion = preferences.lastVersionCode().get()
if (oldVersion < BuildConfig.VERSION_CODE) { if (oldVersion < BuildConfig.VERSION_CODE) {
preferences.lastVersionCode().set(BuildConfig.VERSION_CODE) preferences.lastVersionCode().set(BuildConfig.VERSION_CODE)

View file

@ -7,9 +7,14 @@ import eu.kanade.tachiyomi.data.database.DatabaseHelper
import eu.kanade.tachiyomi.data.database.models.Chapter import eu.kanade.tachiyomi.data.database.models.Chapter
import eu.kanade.tachiyomi.data.database.models.Manga import eu.kanade.tachiyomi.data.database.models.Manga
import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.data.preference.getOrDefault
import eu.kanade.tachiyomi.source.SourceManager import eu.kanade.tachiyomi.source.SourceManager
import eu.kanade.tachiyomi.util.storage.DiskUtil import eu.kanade.tachiyomi.util.storage.DiskUtil
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.flow.drop
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get import uy.kohesive.injekt.api.get
import uy.kohesive.injekt.injectLazy import uy.kohesive.injekt.injectLazy
@ -46,17 +51,20 @@ class DownloadCache(
private var mangaFiles: MutableMap<Long, MutableSet<String>> = mutableMapOf() private var mangaFiles: MutableMap<Long, MutableSet<String>> = mutableMapOf()
val scope = CoroutineScope(Job() + Dispatchers.IO)
init { init {
preferences.downloadsDirectory().asObservable().skip(1).subscribe { preferences.downloadsDirectory().asFlow()
lastRenew = 0L // invalidate cache .drop(1)
} .onEach { lastRenew = 0L } // invalidate cache
.launchIn(scope)
} }
/** /**
* Returns the downloads directory from the user's preferences. * Returns the downloads directory from the user's preferences.
*/ */
private fun getDirectoryFromPreference(): UniFile { private fun getDirectoryFromPreference(): UniFile {
val dir = preferences.downloadsDirectory().getOrDefault() val dir = preferences.downloadsDirectory().get()
return UniFile.fromUri(context, dir.toUri()) return UniFile.fromUri(context, dir.toUri())
} }

View file

@ -8,10 +8,11 @@ import eu.kanade.tachiyomi.data.database.DatabaseHelper
import eu.kanade.tachiyomi.data.database.models.Chapter import eu.kanade.tachiyomi.data.database.models.Chapter
import eu.kanade.tachiyomi.data.database.models.Manga import eu.kanade.tachiyomi.data.database.models.Manga
import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.data.preference.getOrDefault
import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.Source
import eu.kanade.tachiyomi.source.SourceManager import eu.kanade.tachiyomi.source.SourceManager
import eu.kanade.tachiyomi.util.storage.DiskUtil import eu.kanade.tachiyomi.util.storage.DiskUtil
import kotlinx.coroutines.flow.drop
import kotlinx.coroutines.flow.onEach
import uy.kohesive.injekt.injectLazy import uy.kohesive.injekt.injectLazy
/** /**
@ -30,15 +31,16 @@ class DownloadProvider(private val context: Context) {
/** /**
* The root directory for downloads. * The root directory for downloads.
*/ */
private var downloadsDir = preferences.downloadsDirectory().getOrDefault().let { private var downloadsDir = preferences.downloadsDirectory().get().let {
val dir = UniFile.fromUri(context, it.toUri()) val dir = UniFile.fromUri(context, it.toUri())
DiskUtil.createNoMediaFile(dir, context) DiskUtil.createNoMediaFile(dir, context)
dir dir
} }
init { init {
preferences.downloadsDirectory().asObservable().skip(1) preferences.downloadsDirectory().asFlow().drop(1).onEach {
.subscribe { downloadsDir = UniFile.fromUri(context, it.toUri()) } downloadsDir = UniFile.fromUri(context, it.toUri())
}
} }
/** /**

View file

@ -9,7 +9,6 @@ import androidx.work.WorkManager
import androidx.work.Worker import androidx.work.Worker
import androidx.work.WorkerParameters import androidx.work.WorkerParameters
import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.data.preference.getOrDefault
import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get import uy.kohesive.injekt.api.get
import java.util.concurrent.TimeUnit import java.util.concurrent.TimeUnit
@ -27,7 +26,7 @@ class LibraryUpdateJob(private val context: Context, workerParams: WorkerParamet
fun setupTask(context: Context, prefInterval: Int? = null) { fun setupTask(context: Context, prefInterval: Int? = null) {
val preferences = Injekt.get<PreferencesHelper>() val preferences = Injekt.get<PreferencesHelper>()
val interval = prefInterval ?: preferences.libraryUpdateInterval().getOrDefault() val interval = prefInterval ?: preferences.libraryUpdateInterval().get()
if (interval > 0) { if (interval > 0) {
val restrictions = preferences.libraryUpdateRestriction()!! val restrictions = preferences.libraryUpdateRestriction()!!
val acRestriction = "ac" in restrictions val acRestriction = "ac" in restrictions

View file

@ -25,7 +25,6 @@ import eu.kanade.tachiyomi.data.library.LibraryUpdateRanker.rankingScheme
import eu.kanade.tachiyomi.data.library.LibraryUpdateService.Companion.start import eu.kanade.tachiyomi.data.library.LibraryUpdateService.Companion.start
import eu.kanade.tachiyomi.data.notification.Notifications import eu.kanade.tachiyomi.data.notification.Notifications
import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.data.preference.getOrDefault
import eu.kanade.tachiyomi.data.track.TrackManager import eu.kanade.tachiyomi.data.track.TrackManager
import eu.kanade.tachiyomi.data.track.UnattendedTrackService import eu.kanade.tachiyomi.data.track.UnattendedTrackService
import eu.kanade.tachiyomi.extension.ExtensionUpdateJob import eu.kanade.tachiyomi.extension.ExtensionUpdateJob
@ -140,7 +139,7 @@ class LibraryUpdateService(
instance = this instance = this
val selectedScheme = preferences.libraryUpdatePrioritization().getOrDefault() val selectedScheme = preferences.libraryUpdatePrioritization().get()
val savedMangasList = intent.getLongArrayExtra(KEY_MANGAS)?.asList() val savedMangasList = intent.getLongArrayExtra(KEY_MANGAS)?.asList()
val mangaList = ( val mangaList = (
@ -284,14 +283,14 @@ class LibraryUpdateService(
} }
private fun addMangaToQueue(categoryId: Int, manga: List<LibraryManga>) { private fun addMangaToQueue(categoryId: Int, manga: List<LibraryManga>) {
val selectedScheme = preferences.libraryUpdatePrioritization().getOrDefault() val selectedScheme = preferences.libraryUpdatePrioritization().get()
val mangas = manga.sortedWith(rankingScheme[selectedScheme]) val mangas = manga.sortedWith(rankingScheme[selectedScheme])
categoryIds.add(categoryId) categoryIds.add(categoryId)
addManga(mangas) addManga(mangas)
} }
private fun addCategory(categoryId: Int) { private fun addCategory(categoryId: Int) {
val selectedScheme = preferences.libraryUpdatePrioritization().getOrDefault() val selectedScheme = preferences.libraryUpdatePrioritization().get()
val mangas = val mangas =
getMangaToUpdate(categoryId, Target.CHAPTERS).sortedWith( getMangaToUpdate(categoryId, Target.CHAPTERS).sortedWith(
rankingScheme[selectedScheme] rankingScheme[selectedScheme]
@ -346,7 +345,7 @@ class LibraryUpdateService(
if (newUpdates.isNotEmpty()) { if (newUpdates.isNotEmpty()) {
notifier.showResultNotification(newUpdates) notifier.showResultNotification(newUpdates)
if (preferences.refreshCoversToo().getOrDefault() && job?.isCancelled == false) { if (preferences.refreshCoversToo().get() && job?.isCancelled == false) {
updateDetails(newUpdates.keys.toList()) updateDetails(newUpdates.keys.toList())
notifier.cancelProgressNotification() notifier.cancelProgressNotification()
if (downloadNew && hasDownloads) { if (downloadNew && hasDownloads) {

View file

@ -1,15 +1,13 @@
package eu.kanade.tachiyomi.data.preference package eu.kanade.tachiyomi.data.preference
import android.content.Context import android.content.Context
import android.content.SharedPreferences
import android.net.Uri import android.net.Uri
import android.os.Build import android.os.Build
import android.os.Environment import android.os.Environment
import androidx.appcompat.app.AppCompatDelegate import androidx.appcompat.app.AppCompatDelegate
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
import com.f2prateek.rx.preferences.Preference
import com.f2prateek.rx.preferences.RxSharedPreferences
import com.tfcporciuncula.flow.FlowSharedPreferences import com.tfcporciuncula.flow.FlowSharedPreferences
import com.tfcporciuncula.flow.Preference
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.database.models.Manga import eu.kanade.tachiyomi.data.database.models.Manga
import eu.kanade.tachiyomi.data.track.TrackService import eu.kanade.tachiyomi.data.track.TrackService
@ -34,59 +32,40 @@ import java.text.SimpleDateFormat
import java.util.Locale import java.util.Locale
import eu.kanade.tachiyomi.data.preference.PreferenceKeys as Keys import eu.kanade.tachiyomi.data.preference.PreferenceKeys as Keys
fun <T> Preference<T>.getOrDefault(): T = get() ?: defaultValue()!! fun <T> Preference<T>.asImmediateFlow(block: (value: T) -> Unit): Flow<T> {
fun <T> com.tfcporciuncula.flow.Preference<T>.asImmediateFlow(block: (value: T) -> Unit): Flow<T> {
block(get()) block(get())
return asFlow() return asFlow()
.onEach { block(it) } .onEach { block(it) }
} }
fun <T> com.tfcporciuncula.flow.Preference<T>.asImmediateFlowIn(scope: CoroutineScope, block: (value: T) -> Unit): Job { fun <T> Preference<T>.asImmediateFlowIn(scope: CoroutineScope, block: (value: T) -> Unit): Job {
block(get()) block(get())
return asFlow() return asFlow()
.onEach { block(it) } .onEach { block(it) }
.launchIn(scope) .launchIn(scope)
} }
fun com.tfcporciuncula.flow.Preference<Boolean>.toggle() = set(!get()) fun Preference<Boolean>.toggle() = set(!get())
private class DateFormatConverter : Preference.Adapter<DateFormat> { operator fun <T> Preference<Set<T>>.plusAssign(item: T) {
override fun get(key: String, preferences: SharedPreferences): DateFormat {
val dateFormat = preferences.getString(Keys.dateFormat, "")!!
if (dateFormat != "") {
return SimpleDateFormat(dateFormat, Locale.getDefault())
}
return DateFormat.getDateInstance(DateFormat.SHORT)
}
override fun set(key: String, value: DateFormat, editor: SharedPreferences.Editor) {
// No-op
}
}
operator fun <T> com.tfcporciuncula.flow.Preference<Set<T>>.plusAssign(item: T) {
set(get() + item) set(get() + item)
} }
operator fun <T> com.tfcporciuncula.flow.Preference<Set<T>>.minusAssign(item: T) { operator fun <T> Preference<Set<T>>.minusAssign(item: T) {
set(get() - item) set(get() - item)
} }
operator fun <T> com.tfcporciuncula.flow.Preference<Set<T>>.plusAssign(item: Collection<T>) { operator fun <T> Preference<Set<T>>.plusAssign(item: Collection<T>) {
set(get() + item) set(get() + item)
} }
operator fun <T> com.tfcporciuncula.flow.Preference<Set<T>>.minusAssign(item: Collection<T>) { operator fun <T> Preference<Set<T>>.minusAssign(item: Collection<T>) {
set(get() - item) set(get() - item)
} }
class PreferencesHelper(val context: Context) { class PreferencesHelper(val context: Context) {
private val prefs = PreferenceManager.getDefaultSharedPreferences(context) private val prefs = PreferenceManager.getDefaultSharedPreferences(context)
private val rxPrefs = RxSharedPreferences.create(prefs)
private val flowPrefs = FlowSharedPreferences(prefs) private val flowPrefs = FlowSharedPreferences(prefs)
private val defaultDownloadsDir = Uri.fromFile( private val defaultDownloadsDir = Uri.fromFile(
@ -105,9 +84,9 @@ class PreferencesHelper(val context: Context) {
) )
) )
fun getInt(key: String, default: Int?) = rxPrefs.getInteger(key, default) fun getInt(key: String, default: Int) = flowPrefs.getInt(key, default)
fun getStringPref(key: String, default: String?) = rxPrefs.getString(key, default) fun getStringPref(key: String, default: String) = flowPrefs.getString(key, default)
fun getStringSet(key: String, default: Set<String>) = rxPrefs.getStringSet(key, default) fun getStringSet(key: String, default: Set<String>) = flowPrefs.getStringSet(key, default)
fun startingTab() = flowPrefs.getInt(Keys.startingTab, 0) fun startingTab() = flowPrefs.getInt(Keys.startingTab, 0)
fun backReturnsToStart() = flowPrefs.getBoolean(Keys.backToStart, true) fun backReturnsToStart() = flowPrefs.getBoolean(Keys.backToStart, true)
@ -215,17 +194,17 @@ class PreferencesHelper(val context: Context) {
fun lastUsedCatalogueSource() = flowPrefs.getLong(Keys.lastUsedCatalogueSource, -1) fun lastUsedCatalogueSource() = flowPrefs.getLong(Keys.lastUsedCatalogueSource, -1)
fun lastUsedCategory() = rxPrefs.getInteger(Keys.lastUsedCategory, 0) fun lastUsedCategory() = flowPrefs.getInt(Keys.lastUsedCategory, 0)
fun lastUsedSources() = flowPrefs.getStringSet("last_used_sources", emptySet()) fun lastUsedSources() = flowPrefs.getStringSet("last_used_sources", emptySet())
fun lastVersionCode() = rxPrefs.getInteger("last_version_code", 0) fun lastVersionCode() = flowPrefs.getInt("last_version_code", 0)
fun browseAsList() = flowPrefs.getBoolean(Keys.catalogueAsList, false) fun browseAsList() = flowPrefs.getBoolean(Keys.catalogueAsList, false)
fun enabledLanguages() = flowPrefs.getStringSet(Keys.enabledLanguages, setOf("all", "en", Locale.getDefault().language)) fun enabledLanguages() = flowPrefs.getStringSet(Keys.enabledLanguages, setOf("all", "en", Locale.getDefault().language))
fun sourceSorting() = rxPrefs.getInteger(Keys.sourcesSort, 0) fun sourceSorting() = flowPrefs.getInt(Keys.sourcesSort, 0)
fun trackUsername(sync: TrackService) = prefs.getString(Keys.trackUsername(sync.id), "") fun trackUsername(sync: TrackService) = prefs.getString(Keys.trackUsername(sync.id), "")
@ -240,7 +219,7 @@ class PreferencesHelper(val context: Context) {
fun trackToken(sync: TrackService) = flowPrefs.getString(Keys.trackToken(sync.id), "") fun trackToken(sync: TrackService) = flowPrefs.getString(Keys.trackToken(sync.id), "")
fun anilistScoreType() = rxPrefs.getString("anilist_score_type", "POINT_10") fun anilistScoreType() = flowPrefs.getString("anilist_score_type", "POINT_10")
fun backupsDirectory() = flowPrefs.getString(Keys.backupDirectory, defaultBackupDir.toString()) fun backupsDirectory() = flowPrefs.getString(Keys.backupDirectory, defaultBackupDir.toString())
@ -249,7 +228,7 @@ class PreferencesHelper(val context: Context) {
else -> SimpleDateFormat(format, Locale.getDefault()) else -> SimpleDateFormat(format, Locale.getDefault())
} }
fun downloadsDirectory() = rxPrefs.getString(Keys.downloadsDirectory, defaultDownloadsDir.toString()) fun downloadsDirectory() = flowPrefs.getString(Keys.downloadsDirectory, defaultDownloadsDir.toString())
fun downloadOnlyOverWifi() = prefs.getBoolean(Keys.downloadOnlyOverWifi, true) fun downloadOnlyOverWifi() = prefs.getBoolean(Keys.downloadOnlyOverWifi, true)
@ -269,14 +248,14 @@ class PreferencesHelper(val context: Context) {
fun removeAfterMarkedAsRead() = prefs.getBoolean(Keys.removeAfterMarkedAsRead, false) fun removeAfterMarkedAsRead() = prefs.getBoolean(Keys.removeAfterMarkedAsRead, false)
fun libraryUpdateInterval() = rxPrefs.getInteger(Keys.libraryUpdateInterval, 24) fun libraryUpdateInterval() = flowPrefs.getInt(Keys.libraryUpdateInterval, 24)
fun libraryUpdateRestriction() = prefs.getStringSet(Keys.libraryUpdateRestriction, emptySet()) fun libraryUpdateRestriction() = prefs.getStringSet(Keys.libraryUpdateRestriction, emptySet())
fun libraryUpdateCategories() = flowPrefs.getStringSet(Keys.libraryUpdateCategories, emptySet()) fun libraryUpdateCategories() = flowPrefs.getStringSet(Keys.libraryUpdateCategories, emptySet())
fun libraryUpdateCategoriesExclude() = flowPrefs.getStringSet(Keys.libraryUpdateCategoriesExclude, emptySet()) fun libraryUpdateCategoriesExclude() = flowPrefs.getStringSet(Keys.libraryUpdateCategoriesExclude, emptySet())
fun libraryUpdatePrioritization() = rxPrefs.getInteger(Keys.libraryUpdatePrioritization, 0) fun libraryUpdatePrioritization() = flowPrefs.getInt(Keys.libraryUpdatePrioritization, 0)
fun libraryLayout() = flowPrefs.getInt(Keys.libraryLayout, 2) fun libraryLayout() = flowPrefs.getInt(Keys.libraryLayout, 2)
@ -284,29 +263,29 @@ class PreferencesHelper(val context: Context) {
fun uniformGrid() = flowPrefs.getBoolean(Keys.uniformGrid, true) fun uniformGrid() = flowPrefs.getBoolean(Keys.uniformGrid, true)
fun downloadBadge() = rxPrefs.getBoolean(Keys.downloadBadge, false) fun downloadBadge() = flowPrefs.getBoolean(Keys.downloadBadge, false)
fun filterDownloaded() = rxPrefs.getInteger(Keys.filterDownloaded, 0) fun filterDownloaded() = flowPrefs.getInt(Keys.filterDownloaded, 0)
fun filterUnread() = rxPrefs.getInteger(Keys.filterUnread, 0) fun filterUnread() = flowPrefs.getInt(Keys.filterUnread, 0)
fun filterCompleted() = rxPrefs.getInteger(Keys.filterCompleted, 0) fun filterCompleted() = flowPrefs.getInt(Keys.filterCompleted, 0)
fun filterTracked() = rxPrefs.getInteger(Keys.filterTracked, 0) fun filterTracked() = flowPrefs.getInt(Keys.filterTracked, 0)
fun filterMangaType() = rxPrefs.getInteger(Keys.filterMangaType, 0) fun filterMangaType() = flowPrefs.getInt(Keys.filterMangaType, 0)
fun showEmptyCategoriesWhileFiltering() = flowPrefs.getBoolean(Keys.showEmptyCategoriesFiltering, false) fun showEmptyCategoriesWhileFiltering() = flowPrefs.getBoolean(Keys.showEmptyCategoriesFiltering, false)
fun librarySortingMode() = rxPrefs.getInteger(Keys.librarySortingMode, 0) fun librarySortingMode() = flowPrefs.getInt(Keys.librarySortingMode, 0)
fun librarySortingAscending() = rxPrefs.getBoolean("library_sorting_ascending", true) fun librarySortingAscending() = flowPrefs.getBoolean("library_sorting_ascending", true)
fun automaticExtUpdates() = flowPrefs.getBoolean(Keys.automaticExtUpdates, true) fun automaticExtUpdates() = flowPrefs.getBoolean(Keys.automaticExtUpdates, true)
fun installedExtensionsOrder() = flowPrefs.getInt(Keys.installedExtensionsOrder, InstalledExtensionsOrder.Name.value) fun installedExtensionsOrder() = flowPrefs.getInt(Keys.installedExtensionsOrder, InstalledExtensionsOrder.Name.value)
fun collapsedCategories() = rxPrefs.getStringSet("collapsed_categories", mutableSetOf()) fun collapsedCategories() = flowPrefs.getStringSet("collapsed_categories", mutableSetOf())
fun collapsedDynamicCategories() = flowPrefs.getStringSet("collapsed_dynamic_categories", mutableSetOf()) fun collapsedDynamicCategories() = flowPrefs.getStringSet("collapsed_dynamic_categories", mutableSetOf())
@ -327,34 +306,34 @@ class PreferencesHelper(val context: Context) {
fun skipFiltered() = prefs.getBoolean(Keys.skipFiltered, true) fun skipFiltered() = prefs.getBoolean(Keys.skipFiltered, true)
fun useBiometrics() = rxPrefs.getBoolean(Keys.useBiometrics, false) fun useBiometrics() = flowPrefs.getBoolean(Keys.useBiometrics, false)
fun lockAfter() = rxPrefs.getInteger(Keys.lockAfter, 0) fun lockAfter() = flowPrefs.getInt(Keys.lockAfter, 0)
fun lastUnlock() = rxPrefs.getLong(Keys.lastUnlock, 0) fun lastUnlock() = flowPrefs.getLong(Keys.lastUnlock, 0)
fun secureScreen() = rxPrefs.getBoolean(Keys.secureScreen, false) fun secureScreen() = flowPrefs.getBoolean(Keys.secureScreen, false)
fun hideNotificationContent() = prefs.getBoolean(Keys.hideNotificationContent, false) fun hideNotificationContent() = prefs.getBoolean(Keys.hideNotificationContent, false)
fun removeArticles() = rxPrefs.getBoolean(Keys.removeArticles, false) fun removeArticles() = flowPrefs.getBoolean(Keys.removeArticles, false)
fun migrateFlags() = rxPrefs.getInteger("migrate_flags", Int.MAX_VALUE) fun migrateFlags() = flowPrefs.getInt("migrate_flags", Int.MAX_VALUE)
fun trustedSignatures() = rxPrefs.getStringSet("trusted_signatures", emptySet()) fun trustedSignatures() = flowPrefs.getStringSet("trusted_signatures", emptySet())
// using string instead of set so it is ordered // using string instead of set so it is ordered
fun migrationSources() = flowPrefs.getString("migrate_sources", "") fun migrationSources() = flowPrefs.getString("migrate_sources", "")
fun useSourceWithMost() = rxPrefs.getBoolean("use_source_with_most", false) fun useSourceWithMost() = flowPrefs.getBoolean("use_source_with_most", false)
fun skipPreMigration() = rxPrefs.getBoolean(Keys.skipPreMigration, false) fun skipPreMigration() = flowPrefs.getBoolean(Keys.skipPreMigration, false)
fun defaultMangaOrder() = rxPrefs.getString("default_manga_order", "") fun defaultMangaOrder() = flowPrefs.getString("default_manga_order", "")
fun refreshCoversToo() = rxPrefs.getBoolean(Keys.refreshCoversToo, true) fun refreshCoversToo() = flowPrefs.getBoolean(Keys.refreshCoversToo, true)
fun updateOnRefresh() = rxPrefs.getInteger(Keys.updateOnRefresh, -1) fun updateOnRefresh() = flowPrefs.getInt(Keys.updateOnRefresh, -1)
fun extensionUpdatesCount() = flowPrefs.getInt("ext_updates_count", 0) fun extensionUpdatesCount() = flowPrefs.getInt("ext_updates_count", 0)
@ -374,7 +353,7 @@ class PreferencesHelper(val context: Context) {
fun showTitleFirstInRecents() = flowPrefs.getBoolean(Keys.showTitleFirstInRecents, false) fun showTitleFirstInRecents() = flowPrefs.getBoolean(Keys.showTitleFirstInRecents, false)
fun lastExtCheck() = rxPrefs.getLong("last_ext_check", 0) fun lastExtCheck() = flowPrefs.getLong("last_ext_check", 0)
fun lastAppCheck() = flowPrefs.getLong("last_app_check", 0) fun lastAppCheck() = flowPrefs.getLong("last_app_check", 0)

View file

@ -6,7 +6,6 @@ import androidx.annotation.StringRes
import com.google.gson.Gson import com.google.gson.Gson
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.database.models.Track import eu.kanade.tachiyomi.data.database.models.Track
import eu.kanade.tachiyomi.data.preference.getOrDefault
import eu.kanade.tachiyomi.data.track.TrackService import eu.kanade.tachiyomi.data.track.TrackService
import eu.kanade.tachiyomi.data.track.updateNewTrackInfo import eu.kanade.tachiyomi.data.track.updateNewTrackInfo
import timber.log.Timber import timber.log.Timber
@ -72,7 +71,7 @@ class Anilist(private val context: Context, id: Int) : TrackService(id) {
} }
override fun getScoreList(): List<String> { override fun getScoreList(): List<String> {
return when (scorePreference.getOrDefault()) { return when (scorePreference.get()) {
// 10 point // 10 point
POINT_10 -> IntRange(0, 10).map(Int::toString) POINT_10 -> IntRange(0, 10).map(Int::toString)
// 100 point // 100 point
@ -88,7 +87,7 @@ class Anilist(private val context: Context, id: Int) : TrackService(id) {
} }
override fun indexToScore(index: Int): Float { override fun indexToScore(index: Int): Float {
return when (scorePreference.getOrDefault()) { return when (scorePreference.get()) {
// 10 point // 10 point
POINT_10 -> index * 10f POINT_10 -> index * 10f
// 100 point // 100 point
@ -112,7 +111,7 @@ class Anilist(private val context: Context, id: Int) : TrackService(id) {
override fun displayScore(track: Track): String { override fun displayScore(track: Track): String {
val score = track.score val score = track.score
return when (scorePreference.getOrDefault()) { return when (scorePreference.get()) {
POINT_5 -> when (score) { POINT_5 -> when (score) {
0f -> "0 ★" 0f -> "0 ★"
else -> "${((score + 10) / 20).toInt()}" else -> "${((score + 10) / 20).toInt()}"

View file

@ -2,7 +2,6 @@ package eu.kanade.tachiyomi.data.track.anilist
import eu.kanade.tachiyomi.data.database.models.Track import eu.kanade.tachiyomi.data.database.models.Track
import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.data.preference.getOrDefault
import eu.kanade.tachiyomi.data.track.TrackManager import eu.kanade.tachiyomi.data.track.TrackManager
import eu.kanade.tachiyomi.data.track.model.TrackSearch import eu.kanade.tachiyomi.data.track.model.TrackSearch
import uy.kohesive.injekt.injectLazy import uy.kohesive.injekt.injectLazy
@ -94,7 +93,7 @@ fun Track.toAnilistStatus() = when (status) {
private val preferences: PreferencesHelper by injectLazy() private val preferences: PreferencesHelper by injectLazy()
fun Track.toAnilistScore(): String = when (preferences.anilistScoreType().getOrDefault()) { fun Track.toAnilistScore(): String = when (preferences.anilistScoreType().get()) {
// 10 point // 10 point
"POINT_10" -> (score.toInt() / 10).toString() "POINT_10" -> (score.toInt() / 10).toString()
// 100 point // 100 point

View file

@ -5,7 +5,6 @@ import android.graphics.drawable.Drawable
import android.os.Parcelable import android.os.Parcelable
import com.jakewharton.rxrelay.BehaviorRelay import com.jakewharton.rxrelay.BehaviorRelay
import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.data.preference.getOrDefault
import eu.kanade.tachiyomi.extension.api.ExtensionGithubApi import eu.kanade.tachiyomi.extension.api.ExtensionGithubApi
import eu.kanade.tachiyomi.extension.model.Extension import eu.kanade.tachiyomi.extension.model.Extension
import eu.kanade.tachiyomi.extension.model.InstallStep import eu.kanade.tachiyomi.extension.model.InstallStep
@ -350,7 +349,7 @@ class ExtensionManager(
ExtensionLoader.trustedSignatures += signature ExtensionLoader.trustedSignatures += signature
val preference = preferences.trustedSignatures() val preference = preferences.trustedSignatures()
preference.set(preference.getOrDefault() + signature) preference.set(preference.get() + signature)
val nowTrustedExtensions = untrustedExtensions.filter { it.signatureHash == signature } val nowTrustedExtensions = untrustedExtensions.filter { it.signatureHash == signature }
untrustedExtensions -= nowTrustedExtensions untrustedExtensions -= nowTrustedExtensions

View file

@ -8,7 +8,6 @@ import android.os.Build
import dalvik.system.PathClassLoader import dalvik.system.PathClassLoader
import eu.kanade.tachiyomi.BuildConfig import eu.kanade.tachiyomi.BuildConfig
import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.data.preference.getOrDefault
import eu.kanade.tachiyomi.extension.model.Extension import eu.kanade.tachiyomi.extension.model.Extension
import eu.kanade.tachiyomi.extension.model.LoadResult import eu.kanade.tachiyomi.extension.model.LoadResult
import eu.kanade.tachiyomi.source.CatalogueSource import eu.kanade.tachiyomi.source.CatalogueSource
@ -46,7 +45,7 @@ internal object ExtensionLoader {
/** /**
* List of the trusted signatures. * List of the trusted signatures.
*/ */
var trustedSignatures = mutableSetOf<String>() + preferences.trustedSignatures().getOrDefault() + officialSignature var trustedSignatures = mutableSetOf<String>() + preferences.trustedSignatures().get() + officialSignature
/** /**
* Return a list of all the installed extensions initialized concurrently. * Return a list of all the installed extensions initialized concurrently.

View file

@ -13,7 +13,6 @@ import eu.kanade.tachiyomi.data.database.DatabaseHelper
import eu.kanade.tachiyomi.data.database.models.Category import eu.kanade.tachiyomi.data.database.models.Category
import eu.kanade.tachiyomi.data.library.LibraryUpdateJob import eu.kanade.tachiyomi.data.library.LibraryUpdateJob
import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.data.preference.getOrDefault
import eu.kanade.tachiyomi.databinding.MangaCategoryDialogBinding import eu.kanade.tachiyomi.databinding.MangaCategoryDialogBinding
import eu.kanade.tachiyomi.ui.base.controller.DialogController import eu.kanade.tachiyomi.ui.base.controller.DialogController
import eu.kanade.tachiyomi.ui.library.LibrarySort import eu.kanade.tachiyomi.ui.library.LibrarySort
@ -112,7 +111,7 @@ class ManageCategoryDialog(bundle: Bundle? = null) :
true -> preferences.downloadNew().set(true) true -> preferences.downloadNew().set(true)
false -> preferences.downloadNew().set(false) false -> preferences.downloadNew().set(false)
} }
if (preferences.libraryUpdateInterval().getOrDefault() > 0 && if (preferences.libraryUpdateInterval().get() > 0 &&
updatePref( updatePref(
preferences.libraryUpdateCategories(), preferences.libraryUpdateCategories(),
preferences.libraryUpdateCategoriesExclude(), preferences.libraryUpdateCategoriesExclude(),
@ -169,7 +168,7 @@ class ManageCategoryDialog(bundle: Bundle? = null) :
binding.includeGlobal, binding.includeGlobal,
preferences.libraryUpdateCategories(), preferences.libraryUpdateCategories(),
preferences.libraryUpdateCategoriesExclude(), preferences.libraryUpdateCategoriesExclude(),
preferences.libraryUpdateInterval().getOrDefault() > 0 preferences.libraryUpdateInterval().get() > 0
) )
} }

View file

@ -16,7 +16,6 @@ import eu.davidea.flexibleadapter.FlexibleAdapter
import eu.davidea.flexibleadapter.items.IFlexible import eu.davidea.flexibleadapter.items.IFlexible
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.data.preference.getOrDefault
import eu.kanade.tachiyomi.databinding.ExtensionsBottomSheetBinding import eu.kanade.tachiyomi.databinding.ExtensionsBottomSheetBinding
import eu.kanade.tachiyomi.databinding.RecyclerWithScrollerBinding import eu.kanade.tachiyomi.databinding.RecyclerWithScrollerBinding
import eu.kanade.tachiyomi.extension.model.Extension import eu.kanade.tachiyomi.extension.model.Extension
@ -268,7 +267,7 @@ class ExtensionBottomSheet @JvmOverloads constructor(context: Context, attrs: At
if (item is MangaItem) { if (item is MangaItem) {
PreMigrationController.navigateToMigration( PreMigrationController.navigateToMigration(
Injekt.get<PreferencesHelper>().skipPreMigration().getOrDefault(), Injekt.get<PreferencesHelper>().skipPreMigration().get(),
controller.router, controller.router,
listOf(item.manga.id!!) listOf(item.manga.id!!)
) )
@ -296,7 +295,7 @@ class ExtensionBottomSheet @JvmOverloads constructor(context: Context, attrs: At
presenter.mangaItems[item.source.id]?.mapNotNull { it.manga.id }?.toList() presenter.mangaItems[item.source.id]?.mapNotNull { it.manga.id }?.toList()
?: emptyList() ?: emptyList()
PreMigrationController.navigateToMigration( PreMigrationController.navigateToMigration(
Injekt.get<PreferencesHelper>().skipPreMigration().getOrDefault(), Injekt.get<PreferencesHelper>().skipPreMigration().get(),
controller.router, controller.router,
sourceMangas sourceMangas
) )

View file

@ -7,7 +7,6 @@ import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.database.DatabaseHelper import eu.kanade.tachiyomi.data.database.DatabaseHelper
import eu.kanade.tachiyomi.data.database.models.Manga import eu.kanade.tachiyomi.data.database.models.Manga
import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.data.preference.getOrDefault
import eu.kanade.tachiyomi.source.SourceManager import eu.kanade.tachiyomi.source.SourceManager
import eu.kanade.tachiyomi.util.lang.chop import eu.kanade.tachiyomi.util.lang.chop
import eu.kanade.tachiyomi.util.lang.removeArticles import eu.kanade.tachiyomi.util.lang.removeArticles
@ -185,7 +184,7 @@ class LibraryCategoryAdapter(val controller: LibraryController) :
category ?: recyclerView.context.getString(R.string.default_value) category ?: recyclerView.context.getString(R.string.default_value)
} else { } else {
val title = item.manga.title val title = item.manga.title
if (preferences.removeArticles().getOrDefault()) title.removeArticles().chop(15) if (preferences.removeArticles().get()) title.removeArticles().chop(15)
else title.take(10) else title.take(10)
} }
} }
@ -251,7 +250,7 @@ class LibraryCategoryAdapter(val controller: LibraryController) :
} }
} }
LibrarySort.Title -> { LibrarySort.Title -> {
val title = if (preferences.removeArticles().getOrDefault()) { val title = if (preferences.removeArticles().get()) {
item.manga.title.removeArticles() item.manga.title.removeArticles()
} else { } else {
item.manga.title item.manga.title

View file

@ -58,7 +58,6 @@ import eu.kanade.tachiyomi.data.library.LibraryUpdateService
import eu.kanade.tachiyomi.data.notification.NotificationReceiver import eu.kanade.tachiyomi.data.notification.NotificationReceiver
import eu.kanade.tachiyomi.data.notification.Notifications import eu.kanade.tachiyomi.data.notification.Notifications
import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.data.preference.getOrDefault
import eu.kanade.tachiyomi.databinding.LibraryControllerBinding import eu.kanade.tachiyomi.databinding.LibraryControllerBinding
import eu.kanade.tachiyomi.source.LocalSource import eu.kanade.tachiyomi.source.LocalSource
import eu.kanade.tachiyomi.ui.base.MaterialMenuSheet import eu.kanade.tachiyomi.ui.base.MaterialMenuSheet
@ -139,8 +138,8 @@ class LibraryController(
/** /**
* Position of the active category. * Position of the active category.
*/ */
private var activeCategory: Int = preferences.lastUsedCategory().getOrDefault() private var activeCategory: Int = preferences.lastUsedCategory().get()
private var lastUsedCategory: Int = preferences.lastUsedCategory().getOrDefault() private var lastUsedCategory: Int = preferences.lastUsedCategory().get()
private var justStarted = true private var justStarted = true
@ -599,7 +598,7 @@ class LibraryController(
presenter.allCategories.size <= 1 || presenter.groupType > BY_DEFAULT -> { presenter.allCategories.size <= 1 || presenter.groupType > BY_DEFAULT -> {
updateLibrary() updateLibrary()
} }
preferences.updateOnRefresh().getOrDefault() == -1 -> { preferences.updateOnRefresh().get() == -1 -> {
var selected = 0 var selected = 0
activity!!.materialAlertDialog() activity!!.materialAlertDialog()
.setTitle(R.string.what_should_update) .setTitle(R.string.what_should_update)
@ -633,7 +632,7 @@ class LibraryController(
} }
} }
else -> { else -> {
when (preferences.updateOnRefresh().getOrDefault()) { when (preferences.updateOnRefresh().get()) {
0 -> updateLibrary(presenter.allCategories.first()) 0 -> updateLibrary(presenter.allCategories.first())
else -> updateLibrary() else -> updateLibrary()
} }
@ -1745,7 +1744,7 @@ class LibraryController(
destroyActionModeIfNeeded() destroyActionModeIfNeeded()
} }
R.id.action_migrate -> { R.id.action_migrate -> {
val skipPre = preferences.skipPreMigration().getOrDefault() val skipPre = preferences.skipPreMigration().get()
PreMigrationController.navigateToMigration( PreMigrationController.navigateToMigration(
skipPre, skipPre,
router, router,

View file

@ -11,7 +11,6 @@ import eu.kanade.tachiyomi.data.database.models.MangaCategory
import eu.kanade.tachiyomi.data.download.DownloadManager import eu.kanade.tachiyomi.data.download.DownloadManager
import eu.kanade.tachiyomi.data.preference.DelayedLibrarySuggestionsJob import eu.kanade.tachiyomi.data.preference.DelayedLibrarySuggestionsJob
import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.data.preference.getOrDefault
import eu.kanade.tachiyomi.data.preference.minusAssign import eu.kanade.tachiyomi.data.preference.minusAssign
import eu.kanade.tachiyomi.data.preference.plusAssign import eu.kanade.tachiyomi.data.preference.plusAssign
import eu.kanade.tachiyomi.data.track.TrackManager import eu.kanade.tachiyomi.data.track.TrackManager
@ -78,7 +77,7 @@ class LibraryPresenter(
var categories: List<Category> = emptyList() var categories: List<Category> = emptyList()
private set private set
var removeArticles: Boolean = preferences.removeArticles().getOrDefault() var removeArticles: Boolean = preferences.removeArticles().get()
/** All categories of the library, in case they are hidden because of hide categories is on */ /** All categories of the library, in case they are hidden because of hide categories is on */
var allCategories: List<Category> = emptyList() var allCategories: List<Category> = emptyList()
@ -97,15 +96,15 @@ class LibraryPresenter(
get() = groupType != UNGROUPED get() = groupType != UNGROUPED
var hasActiveFilters: Boolean = run { var hasActiveFilters: Boolean = run {
val filterDownloaded = preferences.filterDownloaded().getOrDefault() val filterDownloaded = preferences.filterDownloaded().get()
val filterUnread = preferences.filterUnread().getOrDefault() val filterUnread = preferences.filterUnread().get()
val filterCompleted = preferences.filterCompleted().getOrDefault() val filterCompleted = preferences.filterCompleted().get()
val filterTracked = preferences.filterTracked().getOrDefault() val filterTracked = preferences.filterTracked().get()
val filterMangaType = preferences.filterMangaType().getOrDefault() val filterMangaType = preferences.filterMangaType().get()
!(filterDownloaded == 0 && filterUnread == 0 && filterCompleted == 0 && filterTracked == 0 && filterMangaType == 0) !(filterDownloaded == 0 && filterUnread == 0 && filterCompleted == 0 && filterTracked == 0 && filterMangaType == 0)
} }
@ -201,7 +200,7 @@ class LibraryPresenter(
val show = showAllCategories || !libraryIsGrouped || categories.size == 1 val show = showAllCategories || !libraryIsGrouped || categories.size == 1
sectionedLibraryItems = items.groupBy { it.header.category.id!! }.toMutableMap() sectionedLibraryItems = items.groupBy { it.header.category.id!! }.toMutableMap()
if (!show && currentCategory == -1) currentCategory = categories.find { if (!show && currentCategory == -1) currentCategory = categories.find {
it.order == preferences.lastUsedCategory().getOrDefault() it.order == preferences.lastUsedCategory().get()
}?.id ?: 0 }?.id ?: 0
view.onNextLibraryUpdate( view.onNextLibraryUpdate(
if (!show) sectionedLibraryItems[currentCategory] if (!show) sectionedLibraryItems[currentCategory]
@ -222,7 +221,7 @@ class LibraryPresenter(
categories.size <= 1 categories.size <= 1
sectionedLibraryItems = items.groupBy { it.header.category.id ?: 0 }.toMutableMap() sectionedLibraryItems = items.groupBy { it.header.category.id ?: 0 }.toMutableMap()
if (!showAll && currentCategory == -1) currentCategory = categories.find { if (!showAll && currentCategory == -1) currentCategory = categories.find {
it.order == preferences.lastUsedCategory().getOrDefault() it.order == preferences.lastUsedCategory().get()
}?.id ?: 0 }?.id ?: 0
withUIContext { withUIContext {
view.onNextLibraryUpdate( view.onNextLibraryUpdate(
@ -240,15 +239,15 @@ class LibraryPresenter(
* @param items the items to filter. * @param items the items to filter.
*/ */
private fun applyFilters(items: List<LibraryItem>): List<LibraryItem> { private fun applyFilters(items: List<LibraryItem>): List<LibraryItem> {
val filterDownloaded = preferences.filterDownloaded().getOrDefault() val filterDownloaded = preferences.filterDownloaded().get()
val filterUnread = preferences.filterUnread().getOrDefault() val filterUnread = preferences.filterUnread().get()
val filterCompleted = preferences.filterCompleted().getOrDefault() val filterCompleted = preferences.filterCompleted().get()
val filterTracked = preferences.filterTracked().getOrDefault() val filterTracked = preferences.filterTracked().get()
val filterMangaType = preferences.filterMangaType().getOrDefault() val filterMangaType = preferences.filterMangaType().get()
val showEmptyCategoriesWhileFiltering = preferences.showEmptyCategoriesWhileFiltering().get() val showEmptyCategoriesWhileFiltering = preferences.showEmptyCategoriesWhileFiltering().get()
@ -381,7 +380,7 @@ class LibraryPresenter(
* @param itemList the map of manga. * @param itemList the map of manga.
*/ */
private fun setDownloadCount(itemList: List<LibraryItem>) { private fun setDownloadCount(itemList: List<LibraryItem>) {
if (!preferences.downloadBadge().getOrDefault()) { if (!preferences.downloadBadge().get()) {
// Unset download count if the preference is not enabled. // Unset download count if the preference is not enabled.
for (item in itemList) { for (item in itemList) {
item.downloadCount = -1 item.downloadCount = -1
@ -421,7 +420,7 @@ class LibraryPresenter(
if (i1.header.category.id == i2.header.category.id) { if (i1.header.category.id == i2.header.category.id) {
val category = i1.header.category val category = i1.header.category
if (category.mangaOrder.isNullOrEmpty() && category.mangaSort == null) { if (category.mangaOrder.isNullOrEmpty() && category.mangaSort == null) {
category.changeSortTo(preferences.librarySortingMode().getOrDefault()) category.changeSortTo(preferences.librarySortingMode().get())
if (category.id == 0) preferences.defaultMangaOrder() if (category.id == 0) preferences.defaultMangaOrder()
.set(category.mangaSort.toString()) .set(category.mangaSort.toString())
else if (!category.isDynamic) db.insertCategory(category).executeAsBlocking() else if (!category.isDynamic) db.insertCategory(category).executeAsBlocking()
@ -528,7 +527,7 @@ class LibraryPresenter(
* @return an list of all the manga in a itemized form. * @return an list of all the manga in a itemized form.
*/ */
private fun getLibraryFromDB(): List<LibraryItem> { private fun getLibraryFromDB(): List<LibraryItem> {
removeArticles = preferences.removeArticles().getOrDefault() removeArticles = preferences.removeArticles().get()
val categories = db.getCategories().executeAsBlocking().toMutableList() val categories = db.getCategories().executeAsBlocking().toMutableList()
var libraryManga = db.getLibraryMangas().executeAsBlocking() var libraryManga = db.getLibraryMangas().executeAsBlocking()
val showAll = showAllCategories val showAll = showAllCategories
@ -539,8 +538,8 @@ class LibraryPresenter(
val items = if (groupType <= BY_DEFAULT || !libraryIsGrouped) { val items = if (groupType <= BY_DEFAULT || !libraryIsGrouped) {
val categoryAll = Category.createAll( val categoryAll = Category.createAll(
context, context,
preferences.librarySortingMode().getOrDefault(), preferences.librarySortingMode().get(),
preferences.librarySortingAscending().getOrDefault() preferences.librarySortingAscending().get()
) )
val catItemAll = LibraryHeaderItem({ categoryAll }, -1) val catItemAll = LibraryHeaderItem({ categoryAll }, -1)
val categorySet = mutableSetOf<Int>() val categorySet = mutableSetOf<Int>()
@ -561,7 +560,7 @@ class LibraryPresenter(
LibraryItem(it, headerItem) LibraryItem(it, headerItem)
}.toMutableList() }.toMutableList()
val categoriesHidden = preferences.collapsedCategories().getOrDefault().mapNotNull { val categoriesHidden = preferences.collapsedCategories().get().mapNotNull {
it.toIntOrNull() it.toIntOrNull()
}.toMutableSet() }.toMutableSet()
@ -678,8 +677,8 @@ class LibraryPresenter(
var headers = tagItems.map { item -> var headers = tagItems.map { item ->
Category.createCustom( Category.createCustom(
item.key, item.key,
preferences.librarySortingMode().getOrDefault(), preferences.librarySortingMode().get(),
preferences.librarySortingAscending().getOrDefault() preferences.librarySortingAscending().get()
).apply { ).apply {
id = item.value.catId id = item.value.catId
if (name.contains(sourceSplitter)) { if (name.contains(sourceSplitter)) {
@ -749,7 +748,7 @@ class LibraryPresenter(
private fun createDefaultCategory(): Category { private fun createDefaultCategory(): Category {
val default = Category.createDefault(view.applicationContext ?: context) val default = Category.createDefault(view.applicationContext ?: context)
default.order = -1 default.order = -1
val defOrder = preferences.defaultMangaOrder().getOrDefault() val defOrder = preferences.defaultMangaOrder().get()
if (defOrder.firstOrNull()?.isLetter() == true) default.mangaSort = defOrder.first() if (defOrder.firstOrNull()?.isLetter() == true) default.mangaSort = defOrder.first()
else default.mangaOrder = defOrder.split("/").mapNotNull { it.toLongOrNull() } else default.mangaOrder = defOrder.split("/").mapNotNull { it.toLongOrNull() }
return default return default
@ -969,7 +968,7 @@ class LibraryPresenter(
fun toggleCategoryVisibility(categoryId: Int) { fun toggleCategoryVisibility(categoryId: Int) {
// if (categories.find { it.id == categoryId }?.isDynamic == true) return // if (categories.find { it.id == categoryId }?.isDynamic == true) return
if (groupType == BY_DEFAULT) { if (groupType == BY_DEFAULT) {
val categoriesHidden = preferences.collapsedCategories().getOrDefault().mapNotNull { val categoriesHidden = preferences.collapsedCategories().get().mapNotNull {
it.toIntOrNull() it.toIntOrNull()
}.toMutableSet() }.toMutableSet()
if (categoryId in categoriesHidden) { if (categoryId in categoriesHidden) {
@ -1027,7 +1026,7 @@ class LibraryPresenter(
fun allCategoriesExpanded(): Boolean { fun allCategoriesExpanded(): Boolean {
return if (groupType == BY_DEFAULT) { return if (groupType == BY_DEFAULT) {
preferences.collapsedCategories().getOrDefault().isEmpty() preferences.collapsedCategories().get().isEmpty()
} else { } else {
categories.none { it.isHidden } categories.none { it.isHidden }
} }
@ -1042,7 +1041,7 @@ class LibraryPresenter(
downloadManager.downloadChapters(it, chapters) downloadManager.downloadChapters(it, chapters)
} }
} }
if (preferences.downloadBadge().getOrDefault()) { if (preferences.downloadBadge().get()) {
requestDownloadBadgesUpdate() requestDownloadBadgesUpdate()
} }
} }

View file

@ -15,7 +15,6 @@ import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.database.DatabaseHelper import eu.kanade.tachiyomi.data.database.DatabaseHelper
import eu.kanade.tachiyomi.data.database.models.Manga import eu.kanade.tachiyomi.data.database.models.Manga
import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.data.preference.getOrDefault
import eu.kanade.tachiyomi.data.track.TrackManager import eu.kanade.tachiyomi.data.track.TrackManager
import eu.kanade.tachiyomi.databinding.FilterBottomSheetBinding import eu.kanade.tachiyomi.databinding.FilterBottomSheetBinding
import eu.kanade.tachiyomi.ui.library.LibraryController import eu.kanade.tachiyomi.ui.library.LibraryController
@ -249,14 +248,15 @@ class FilterBottomSheet @JvmOverloads constructor(context: Context, attrs: Attri
} }
} }
fun hasActiveFilters() = filterItems.any { it.isActivated } private fun hasActiveFilters() = filterItems.any { it.isActivated }
private fun hasActiveFiltersFromPref(): Boolean { private fun hasActiveFiltersFromPref(): Boolean {
return preferences.filterDownloaded().getOrDefault() > 0 || preferences.filterUnread() return preferences.filterDownloaded().get() > 0 ||
.getOrDefault() > 0 || preferences.filterCompleted() preferences.filterUnread().get() > 0 ||
.getOrDefault() > 0 || preferences.filterTracked() preferences.filterCompleted().get() > 0 ||
.getOrDefault() > 0 || preferences.filterMangaType() preferences.filterTracked().get() > 0 ||
.getOrDefault() > 0 || FILTER_TRACKER.isNotEmpty() preferences.filterMangaType().get() > 0 ||
FILTER_TRACKER.isNotEmpty()
} }
private fun createTags() { private fun createTags() {
@ -312,7 +312,7 @@ class FilterBottomSheet @JvmOverloads constructor(context: Context, attrs: Attri
withContext(Dispatchers.Main) { withContext(Dispatchers.Main) {
downloaded.setState(preferences.filterDownloaded()) downloaded.setState(preferences.filterDownloaded())
completed.setState(preferences.filterCompleted()) completed.setState(preferences.filterCompleted())
val unreadP = preferences.filterUnread().getOrDefault() val unreadP = preferences.filterUnread().get()
if (unreadP <= 2) { if (unreadP <= 2) {
unread.state = unreadP - 1 unread.state = unreadP - 1
} else if (unreadP >= 3) { } else if (unreadP >= 3) {
@ -320,7 +320,7 @@ class FilterBottomSheet @JvmOverloads constructor(context: Context, attrs: Attri
} }
tracked?.setState(preferences.filterTracked()) tracked?.setState(preferences.filterTracked())
mangaType?.setState( mangaType?.setState(
when (preferences.filterMangaType().getOrDefault()) { when (preferences.filterMangaType().get()) {
Manga.TYPE_MANGA -> context.getString(R.string.manga) Manga.TYPE_MANGA -> context.getString(R.string.manga)
Manga.TYPE_MANHUA -> context.getString(R.string.manhua) Manga.TYPE_MANHUA -> context.getString(R.string.manhua)
Manga.TYPE_MANHWA -> context.getString(R.string.manhwa) Manga.TYPE_MANHWA -> context.getString(R.string.manhwa)

View file

@ -6,9 +6,8 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.LinearLayout import android.widget.LinearLayout
import androidx.core.view.isVisible import androidx.core.view.isVisible
import com.f2prateek.rx.preferences.Preference import com.tfcporciuncula.flow.Preference
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.preference.getOrDefault
import eu.kanade.tachiyomi.databinding.FilterTagGroupBinding import eu.kanade.tachiyomi.databinding.FilterTagGroupBinding
import eu.kanade.tachiyomi.util.system.dpToPx import eu.kanade.tachiyomi.util.system.dpToPx
import eu.kanade.tachiyomi.util.system.getResourceColor import eu.kanade.tachiyomi.util.system.getResourceColor
@ -82,7 +81,7 @@ class FilterTagGroup@JvmOverloads constructor(context: Context, attrs: Attribute
set(index) = toggleButton(index, false) set(index) = toggleButton(index, false)
fun setState(preference: Preference<Int>) { fun setState(preference: Preference<Int>) {
state = preference.getOrDefault() - 1 state = preference.get() - 1
} }
fun setState(text: String) { fun setState(text: String) {

View file

@ -53,7 +53,6 @@ import eu.kanade.tachiyomi.data.library.LibraryUpdateService
import eu.kanade.tachiyomi.data.notification.NotificationReceiver import eu.kanade.tachiyomi.data.notification.NotificationReceiver
import eu.kanade.tachiyomi.data.notification.Notifications import eu.kanade.tachiyomi.data.notification.Notifications
import eu.kanade.tachiyomi.data.preference.asImmediateFlowIn import eu.kanade.tachiyomi.data.preference.asImmediateFlowIn
import eu.kanade.tachiyomi.data.preference.getOrDefault
import eu.kanade.tachiyomi.data.updater.UpdateChecker import eu.kanade.tachiyomi.data.updater.UpdateChecker
import eu.kanade.tachiyomi.data.updater.UpdateResult import eu.kanade.tachiyomi.data.updater.UpdateResult
import eu.kanade.tachiyomi.data.updater.UpdaterNotifier import eu.kanade.tachiyomi.data.updater.UpdaterNotifier
@ -583,7 +582,7 @@ open class MainActivity : BaseActivity<MainActivityBinding>(), DownloadServiceLi
fun getExtensionUpdates(force: Boolean) { fun getExtensionUpdates(force: Boolean) {
if ((force && extensionManager.availableExtensions.isEmpty()) || if ((force && extensionManager.availableExtensions.isEmpty()) ||
Date().time >= preferences.lastExtCheck().getOrDefault() + TimeUnit.HOURS.toMillis(6) Date().time >= preferences.lastExtCheck().get() + TimeUnit.HOURS.toMillis(6)
) { ) {
lifecycleScope.launch(Dispatchers.IO) { lifecycleScope.launch(Dispatchers.IO) {
try { try {

View file

@ -53,7 +53,6 @@ import eu.kanade.tachiyomi.data.download.DownloadService
import eu.kanade.tachiyomi.data.download.model.Download import eu.kanade.tachiyomi.data.download.model.Download
import eu.kanade.tachiyomi.data.image.coil.getBestColor import eu.kanade.tachiyomi.data.image.coil.getBestColor
import eu.kanade.tachiyomi.data.notification.NotificationReceiver import eu.kanade.tachiyomi.data.notification.NotificationReceiver
import eu.kanade.tachiyomi.data.preference.getOrDefault
import eu.kanade.tachiyomi.data.track.model.TrackSearch import eu.kanade.tachiyomi.data.track.model.TrackSearch
import eu.kanade.tachiyomi.databinding.MangaDetailsControllerBinding import eu.kanade.tachiyomi.databinding.MangaDetailsControllerBinding
import eu.kanade.tachiyomi.source.LocalSource import eu.kanade.tachiyomi.source.LocalSource
@ -997,7 +996,7 @@ class MangaDetailsController :
R.id.action_migrate -> R.id.action_migrate ->
if (!isNotOnline()) { if (!isNotOnline()) {
PreMigrationController.navigateToMigration( PreMigrationController.navigateToMigration(
presenter.preferences.skipPreMigration().getOrDefault(), presenter.preferences.skipPreMigration().get(),
router, router,
listOf(manga!!.id!!) listOf(manga!!.id!!)
) )

View file

@ -8,7 +8,6 @@ import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.database.DatabaseHelper import eu.kanade.tachiyomi.data.database.DatabaseHelper
import eu.kanade.tachiyomi.data.database.models.Manga import eu.kanade.tachiyomi.data.database.models.Manga
import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.data.preference.getOrDefault
import eu.kanade.tachiyomi.databinding.MigrationControllerBinding import eu.kanade.tachiyomi.databinding.MigrationControllerBinding
import eu.kanade.tachiyomi.ui.base.controller.NucleusController import eu.kanade.tachiyomi.ui.base.controller.NucleusController
import eu.kanade.tachiyomi.ui.migration.manga.design.PreMigrationController import eu.kanade.tachiyomi.ui.migration.manga.design.PreMigrationController
@ -97,7 +96,7 @@ class MigrationController :
if (item is MangaItem) { if (item is MangaItem) {
PreMigrationController.navigateToMigration( PreMigrationController.navigateToMigration(
Injekt.get<PreferencesHelper>().skipPreMigration().getOrDefault(), Injekt.get<PreferencesHelper>().skipPreMigration().get(),
router, router,
listOf(item.manga.id!!) listOf(item.manga.id!!)
) )
@ -118,7 +117,7 @@ class MigrationController :
manga.asSequence().filter { it.source == item.source.id }.map { it.id!! }.toList() manga.asSequence().filter { it.source == item.source.id }.map { it.id!! }.toList()
withContext(Dispatchers.Main) { withContext(Dispatchers.Main) {
PreMigrationController.navigateToMigration( PreMigrationController.navigateToMigration(
Injekt.get<PreferencesHelper>().skipPreMigration().getOrDefault(), Injekt.get<PreferencesHelper>().skipPreMigration().get(),
router, router,
sourceMangas sourceMangas
) )

View file

@ -6,7 +6,6 @@ import eu.kanade.tachiyomi.data.database.DatabaseHelper
import eu.kanade.tachiyomi.data.database.models.Manga import eu.kanade.tachiyomi.data.database.models.Manga
import eu.kanade.tachiyomi.data.database.models.MangaCategory import eu.kanade.tachiyomi.data.database.models.MangaCategory
import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.data.preference.getOrDefault
import eu.kanade.tachiyomi.source.LocalSource import eu.kanade.tachiyomi.source.LocalSource
import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.Source
import eu.kanade.tachiyomi.source.SourceManager import eu.kanade.tachiyomi.source.SourceManager
@ -94,7 +93,7 @@ class MigrationPresenter(
manga: Manga, manga: Manga,
replace: Boolean replace: Boolean
) { ) {
val flags = preferences.migrateFlags().getOrDefault() val flags = preferences.migrateFlags().get()
val migrateChapters = MigrationFlags.hasChapters(flags) val migrateChapters = MigrationFlags.hasChapters(flags)
val migrateCategories = MigrationFlags.hasCategories(flags) val migrateCategories = MigrationFlags.hasCategories(flags)
val migrateTracks = MigrationFlags.hasTracks(flags) val migrateTracks = MigrationFlags.hasTracks(flags)

View file

@ -12,10 +12,9 @@ import android.widget.Toast
import androidx.constraintlayout.widget.ConstraintLayout import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.view.isVisible import androidx.core.view.isVisible
import com.bluelinelabs.conductor.Controller import com.bluelinelabs.conductor.Controller
import com.f2prateek.rx.preferences.Preference import com.tfcporciuncula.flow.Preference
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.data.preference.getOrDefault
import eu.kanade.tachiyomi.databinding.MigrationBottomSheetBinding import eu.kanade.tachiyomi.databinding.MigrationBottomSheetBinding
import eu.kanade.tachiyomi.ui.migration.MigrationFlags import eu.kanade.tachiyomi.ui.migration.MigrationFlags
import eu.kanade.tachiyomi.util.system.dpToPx import eu.kanade.tachiyomi.util.system.dpToPx
@ -91,7 +90,7 @@ class MigrationBottomSheetDialog(
* Init general reader preferences. * Init general reader preferences.
*/ */
private fun initPreferences() { private fun initPreferences() {
val flags = preferences.migrateFlags().getOrDefault() val flags = preferences.migrateFlags().get()
binding.migChapters.isChecked = MigrationFlags.hasChapters(flags) binding.migChapters.isChecked = MigrationFlags.hasChapters(flags)
binding.migCategories.isChecked = MigrationFlags.hasCategories(flags) binding.migCategories.isChecked = MigrationFlags.hasCategories(flags)
@ -111,7 +110,7 @@ class MigrationBottomSheetDialog(
} }
binding.sourceGroup.bindToPreference(preferences.useSourceWithMost()) binding.sourceGroup.bindToPreference(preferences.useSourceWithMost())
binding.skipStep.isChecked = preferences.skipPreMigration().getOrDefault() binding.skipStep.isChecked = preferences.skipPreMigration().get()
binding.skipStep.setOnCheckedChangeListener { _, isChecked -> binding.skipStep.setOnCheckedChangeListener { _, isChecked ->
if (isChecked) (listener as? Controller)?.activity?.toast( if (isChecked) (listener as? Controller)?.activity?.toast(
R.string.to_show_again_setting_sources, R.string.to_show_again_setting_sources,
@ -132,7 +131,7 @@ class MigrationBottomSheetDialog(
* Binds a checkbox or switch view with a boolean preference. * Binds a checkbox or switch view with a boolean preference.
*/ */
private fun CompoundButton.bindToPreference(pref: Preference<Boolean>) { private fun CompoundButton.bindToPreference(pref: Preference<Boolean>) {
isChecked = pref.getOrDefault() isChecked = pref.get()
setOnCheckedChangeListener { _, isChecked -> pref.set(isChecked) } setOnCheckedChangeListener { _, isChecked -> pref.set(isChecked) }
} }
@ -140,7 +139,7 @@ class MigrationBottomSheetDialog(
* Binds a radio group with a boolean preference. * Binds a radio group with a boolean preference.
*/ */
private fun RadioGroup.bindToPreference(pref: Preference<Boolean>) { private fun RadioGroup.bindToPreference(pref: Preference<Boolean>) {
(getChildAt(pref.getOrDefault().toInt()) as RadioButton).isChecked = true (getChildAt(pref.get().toInt()) as RadioButton).isChecked = true
setOnCheckedChangeListener { _, value -> setOnCheckedChangeListener { _, value ->
val index = indexOfChild(findViewById(value)) val index = indexOfChild(findViewById(value))
pref.set(index == 1) pref.set(index == 1)

View file

@ -18,7 +18,6 @@ import eu.kanade.tachiyomi.data.database.DatabaseHelper
import eu.kanade.tachiyomi.data.database.models.Manga import eu.kanade.tachiyomi.data.database.models.Manga
import eu.kanade.tachiyomi.data.database.models.toMangaInfo import eu.kanade.tachiyomi.data.database.models.toMangaInfo
import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.data.preference.getOrDefault
import eu.kanade.tachiyomi.databinding.MigrationListControllerBinding import eu.kanade.tachiyomi.databinding.MigrationListControllerBinding
import eu.kanade.tachiyomi.smartsearch.SmartSearchEngine import eu.kanade.tachiyomi.smartsearch.SmartSearchEngine
import eu.kanade.tachiyomi.source.CatalogueSource import eu.kanade.tachiyomi.source.CatalogueSource
@ -123,7 +122,7 @@ class MigrationListController(bundle: Bundle? = null) :
} }
private suspend fun runMigrations(mangas: List<MigratingManga>) { private suspend fun runMigrations(mangas: List<MigratingManga>) {
val useSourceWithMost = preferences.useSourceWithMost().getOrDefault() val useSourceWithMost = preferences.useSourceWithMost().get()
val sources = preferences.migrationSources().get().split("/").mapNotNull { val sources = preferences.migrationSources().get().split("/").mapNotNull {
val value = it.toLongOrNull() ?: return val value = it.toLongOrNull() ?: return

View file

@ -7,7 +7,6 @@ import eu.kanade.tachiyomi.data.database.models.History
import eu.kanade.tachiyomi.data.database.models.Manga import eu.kanade.tachiyomi.data.database.models.Manga
import eu.kanade.tachiyomi.data.database.models.MangaCategory import eu.kanade.tachiyomi.data.database.models.MangaCategory
import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.data.preference.getOrDefault
import eu.kanade.tachiyomi.ui.migration.MigrationFlags import eu.kanade.tachiyomi.ui.migration.MigrationFlags
import eu.kanade.tachiyomi.util.system.launchUI import eu.kanade.tachiyomi.util.system.launchUI
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
@ -106,7 +105,7 @@ class MigrationProcessAdapter(
replace: Boolean replace: Boolean
) { ) {
if (controller.config == null) return if (controller.config == null) return
val flags = preferences.migrateFlags().getOrDefault() val flags = preferences.migrateFlags().get()
// Update chapters read // Update chapters read
if (MigrationFlags.hasChapters(flags)) { if (MigrationFlags.hasChapters(flags)) {
val prevMangaChapters = db.getChapters(prevManga).executeAsBlocking() val prevMangaChapters = db.getChapters(prevManga).executeAsBlocking()

View file

@ -5,7 +5,6 @@ import android.content.Intent
import android.view.WindowManager import android.view.WindowManager
import androidx.biometric.BiometricManager import androidx.biometric.BiometricManager
import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.data.preference.getOrDefault
import eu.kanade.tachiyomi.ui.main.SearchActivity import eu.kanade.tachiyomi.ui.main.SearchActivity
import uy.kohesive.injekt.injectLazy import uy.kohesive.injekt.injectLazy
import java.util.Date import java.util.Date
@ -18,7 +17,7 @@ object SecureActivityDelegate {
var isAuthenticating: Boolean = false var isAuthenticating: Boolean = false
fun setSecure(activity: Activity?, force: Boolean? = null) { fun setSecure(activity: Activity?, force: Boolean? = null) {
val enabled = force ?: preferences.secureScreen().getOrDefault() val enabled = force ?: preferences.secureScreen().get()
if (enabled) { if (enabled) {
activity?.window?.setFlags( activity?.window?.setFlags(
WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE,
@ -31,7 +30,7 @@ object SecureActivityDelegate {
fun promptLockIfNeeded(activity: Activity?) { fun promptLockIfNeeded(activity: Activity?) {
if (activity == null || isAuthenticating) return if (activity == null || isAuthenticating) return
val lockApp = preferences.useBiometrics().getOrDefault() val lockApp = preferences.useBiometrics().get()
if (lockApp && BiometricManager.from(activity).canAuthenticate(BiometricManager.Authenticators.DEVICE_CREDENTIAL or BiometricManager.Authenticators.BIOMETRIC_WEAK) == BiometricManager.BIOMETRIC_SUCCESS) { if (lockApp && BiometricManager.from(activity).canAuthenticate(BiometricManager.Authenticators.DEVICE_CREDENTIAL or BiometricManager.Authenticators.BIOMETRIC_WEAK) == BiometricManager.BIOMETRIC_SUCCESS) {
if (isAppLocked()) { if (isAppLocked()) {
val intent = Intent(activity, BiometricActivity::class.java) val intent = Intent(activity, BiometricActivity::class.java)
@ -45,7 +44,7 @@ object SecureActivityDelegate {
} }
fun shouldBeLocked(): Boolean { fun shouldBeLocked(): Boolean {
val lockApp = preferences.useBiometrics().getOrDefault() val lockApp = preferences.useBiometrics().get()
if (lockApp && isAppLocked()) return true if (lockApp && isAppLocked()) return true
return false return false
} }
@ -53,9 +52,9 @@ object SecureActivityDelegate {
private fun isAppLocked(): Boolean { private fun isAppLocked(): Boolean {
return locked && return locked &&
( (
preferences.lockAfter().getOrDefault() <= 0 || preferences.lockAfter().get() <= 0 ||
Date().time >= preferences.lastUnlock().getOrDefault() + 60 * 1000 * preferences Date().time >= preferences.lastUnlock().get() + 60 * 1000 * preferences
.lockAfter().getOrDefault() .lockAfter().get()
) )
} }
} }

View file

@ -11,7 +11,6 @@ import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.notification.Notifications import eu.kanade.tachiyomi.data.notification.Notifications
import eu.kanade.tachiyomi.data.preference.PreferenceKeys import eu.kanade.tachiyomi.data.preference.PreferenceKeys
import eu.kanade.tachiyomi.data.preference.asImmediateFlowIn import eu.kanade.tachiyomi.data.preference.asImmediateFlowIn
import eu.kanade.tachiyomi.data.preference.getOrDefault
import eu.kanade.tachiyomi.data.updater.AutoUpdaterJob import eu.kanade.tachiyomi.data.updater.AutoUpdaterJob
import eu.kanade.tachiyomi.extension.ExtensionUpdateJob import eu.kanade.tachiyomi.extension.ExtensionUpdateJob
import eu.kanade.tachiyomi.source.SourceManager import eu.kanade.tachiyomi.source.SourceManager
@ -94,7 +93,7 @@ class SettingsBrowseController : SettingsController() {
titleRes = R.string.source_migration titleRes = R.string.source_migration
onClick { router.pushController(MigrationController().withFadeTransaction()) } onClick { router.pushController(MigrationController().withFadeTransaction()) }
} }
if (preferences.skipPreMigration().getOrDefault() || preferences.migrationSources() if (preferences.skipPreMigration().get() || preferences.migrationSources()
.isSet() .isSet()
) { ) {
switchPreference { switchPreference {

View file

@ -15,7 +15,6 @@ import eu.kanade.tachiyomi.data.database.DatabaseHelper
import eu.kanade.tachiyomi.data.database.models.Category import eu.kanade.tachiyomi.data.database.models.Category
import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.data.preference.asImmediateFlowIn import eu.kanade.tachiyomi.data.preference.asImmediateFlowIn
import eu.kanade.tachiyomi.data.preference.getOrDefault
import eu.kanade.tachiyomi.util.system.getFilePicker import eu.kanade.tachiyomi.util.system.getFilePicker
import eu.kanade.tachiyomi.util.system.withOriginalWidth import eu.kanade.tachiyomi.util.system.withOriginalWidth
import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.Injekt
@ -38,11 +37,10 @@ class SettingsDownloadController : SettingsController() {
DownloadDirectoriesDialog(this@SettingsDownloadController).show() DownloadDirectoriesDialog(this@SettingsDownloadController).show()
} }
preferences.downloadsDirectory().asObservable() preferences.downloadsDirectory().asImmediateFlowIn(viewScope) { path ->
.subscribeUntilDestroy { path -> val dir = UniFile.fromUri(context, path.toUri())
val dir = UniFile.fromUri(context, path.toUri()) summary = dir.filePath ?: path
summary = dir.filePath ?: path }
}
} }
switchPreference { switchPreference {
key = Keys.downloadOnlyOverWifi key = Keys.downloadOnlyOverWifi
@ -154,7 +152,7 @@ class SettingsDownloadController : SettingsController() {
val activity = controller.activity!! val activity = controller.activity!!
init { init {
val currentDir = preferences.downloadsDirectory().getOrDefault() val currentDir = preferences.downloadsDirectory().get()
val externalDirs = val externalDirs =
getExternalDirs() + File(activity.getString(R.string.custom_location)) getExternalDirs() + File(activity.getString(R.string.custom_location))
val selectedIndex = externalDirs.map(File::toString).indexOfFirst { it in currentDir } val selectedIndex = externalDirs.map(File::toString).indexOfFirst { it in currentDir }

View file

@ -6,6 +6,7 @@ import eu.kanade.tachiyomi.data.database.DatabaseHelper
import eu.kanade.tachiyomi.data.database.models.Category import eu.kanade.tachiyomi.data.database.models.Category
import eu.kanade.tachiyomi.data.library.LibraryUpdateJob import eu.kanade.tachiyomi.data.library.LibraryUpdateJob
import eu.kanade.tachiyomi.data.preference.DelayedLibrarySuggestionsJob import eu.kanade.tachiyomi.data.preference.DelayedLibrarySuggestionsJob
import eu.kanade.tachiyomi.data.preference.asImmediateFlowIn
import eu.kanade.tachiyomi.ui.category.CategoryController import eu.kanade.tachiyomi.ui.category.CategoryController
import eu.kanade.tachiyomi.ui.library.LibraryPresenter import eu.kanade.tachiyomi.ui.library.LibraryPresenter
import eu.kanade.tachiyomi.ui.library.display.TabbedLibraryDisplaySheet import eu.kanade.tachiyomi.ui.library.display.TabbedLibraryDisplaySheet
@ -132,8 +133,9 @@ class SettingsLibraryController : SettingsController() {
preSummaryRes = R.string.restrictions_ preSummaryRes = R.string.restrictions_
noSelectionRes = R.string.none noSelectionRes = R.string.none
preferences.libraryUpdateInterval().asObservable() preferences.libraryUpdateInterval().asImmediateFlowIn(viewScope) {
.subscribeUntilDestroy { isVisible = it > 0 } isVisible = it > 0
}
onChange { onChange {
// Post to event looper to allow the preference to be updated. // Post to event looper to allow the preference to be updated.

View file

@ -4,7 +4,6 @@ import androidx.biometric.BiometricManager
import androidx.preference.PreferenceScreen import androidx.preference.PreferenceScreen
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.preference.PreferenceKeys import eu.kanade.tachiyomi.data.preference.PreferenceKeys
import eu.kanade.tachiyomi.data.preference.getOrDefault
import eu.kanade.tachiyomi.ui.security.SecureActivityDelegate import eu.kanade.tachiyomi.ui.security.SecureActivityDelegate
import eu.kanade.tachiyomi.widget.preference.IntListMatPreference import eu.kanade.tachiyomi.widget.preference.IntListMatPreference
@ -28,7 +27,7 @@ class SettingsSecurityController : SettingsController() {
preference = intListPreference(activity) { preference = intListPreference(activity) {
key = PreferenceKeys.lockAfter key = PreferenceKeys.lockAfter
titleRes = R.string.lock_when_idle titleRes = R.string.lock_when_idle
isVisible = preferences.useBiometrics().getOrDefault() isVisible = preferences.useBiometrics().get()
val values = listOf(0, 2, 5, 10, 20, 30, 60, 90, 120, -1) val values = listOf(0, 2, 5, 10, 20, 30, 60, 90, 120, -1)
entries = values.mapNotNull { entries = values.mapNotNull {
when (it) { when (it) {

View file

@ -10,7 +10,6 @@ import androidx.preference.PreferenceGroup
import androidx.preference.PreferenceScreen import androidx.preference.PreferenceScreen
import com.jakewharton.rxbinding.support.v7.widget.queryTextChanges import com.jakewharton.rxbinding.support.v7.widget.queryTextChanges
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.preference.getOrDefault
import eu.kanade.tachiyomi.data.preference.minusAssign import eu.kanade.tachiyomi.data.preference.minusAssign
import eu.kanade.tachiyomi.data.preference.plusAssign import eu.kanade.tachiyomi.data.preference.plusAssign
import eu.kanade.tachiyomi.source.SourceManager import eu.kanade.tachiyomi.source.SourceManager
@ -38,7 +37,7 @@ class SettingsSourcesController : SettingsController() {
override fun setupPreferenceScreen(screen: PreferenceScreen) = screen.apply { override fun setupPreferenceScreen(screen: PreferenceScreen) = screen.apply {
titleRes = R.string.filter titleRes = R.string.filter
sorting = SourcesSort.from(preferences.sourceSorting().getOrDefault()) ?: SourcesSort.Alpha sorting = SourcesSort.from(preferences.sourceSorting().get()) ?: SourcesSort.Alpha
activity?.invalidateOptionsMenu() activity?.invalidateOptionsMenu()
// Get the list of active language codes. // Get the list of active language codes.
val activeLangsCodes = preferences.enabledLanguages().get() val activeLangsCodes = preferences.enabledLanguages().get()

View file

@ -5,35 +5,8 @@ import android.widget.CompoundButton
import android.widget.RadioButton import android.widget.RadioButton
import android.widget.RadioGroup import android.widget.RadioGroup
import android.widget.Spinner import android.widget.Spinner
import androidx.annotation.ArrayRes import com.tfcporciuncula.flow.Preference
import com.f2prateek.rx.preferences.Preference
import eu.kanade.tachiyomi.data.preference.getOrDefault
import eu.kanade.tachiyomi.widget.IgnoreFirstSpinnerListener import eu.kanade.tachiyomi.widget.IgnoreFirstSpinnerListener
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
import kotlin.coroutines.CoroutineContext
@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 { inline fun <reified T> SharedPreferences.getItem(key: String, default: T): T {
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
@ -52,22 +25,7 @@ inline fun <reified T> SharedPreferences.getItem(key: String, default: T): T {
/** /**
* Binds a checkbox or switch view with a boolean preference. * Binds a checkbox or switch view with a boolean preference.
*/ */
fun CompoundButton.bindToPreference(pref: Preference<Boolean>, block: (() -> Unit)? = null) { fun CompoundButton.bindToPreference(pref: Preference<Boolean>, block: ((Boolean) -> Unit)? = null) {
isChecked = pref.getOrDefault()
setOnCheckedChangeListener { _, isChecked ->
pref.set(isChecked)
block?.invoke()
}
}
/**
* Binds a checkbox or switch view with a boolean preference.
*/
fun CompoundButton.bindToPreference(
pref: com.tfcporciuncula.flow
.Preference<Boolean>,
block: ((Boolean) -> Unit)? = null
) {
isChecked = pref.get() isChecked = pref.get()
setOnCheckedChangeListener { _, isChecked -> setOnCheckedChangeListener { _, isChecked ->
pref.set(isChecked) pref.set(isChecked)
@ -79,18 +37,6 @@ fun CompoundButton.bindToPreference(
* Binds a radio group with a int preference. * Binds a radio group with a int preference.
*/ */
fun RadioGroup.bindToPreference(pref: Preference<Int>, block: (() -> Unit)? = null) { fun RadioGroup.bindToPreference(pref: Preference<Int>, block: (() -> Unit)? = null) {
(getChildAt(pref.getOrDefault()) as RadioButton).isChecked = true
setOnCheckedChangeListener { _, checkedId ->
val index = indexOfChild(findViewById(checkedId))
pref.set(index)
block?.invoke()
}
}
/**
* Binds a radio group with a int preference.
*/
fun RadioGroup.bindToPreference(pref: com.tfcporciuncula.flow.Preference<Int>, block: (() -> Unit)? = null) {
(getChildAt(pref.get()) as RadioButton).isChecked = true (getChildAt(pref.get()) as RadioButton).isChecked = true
setOnCheckedChangeListener { _, checkedId -> setOnCheckedChangeListener { _, checkedId ->
val index = indexOfChild(findViewById(checkedId)) val index = indexOfChild(findViewById(checkedId))
@ -103,7 +49,7 @@ fun RadioGroup.bindToPreference(pref: com.tfcporciuncula.flow.Preference<Int>, b
* Binds a spinner to an int preference with an optional offset for the value. * Binds a spinner to an int preference with an optional offset for the value.
*/ */
fun Spinner.bindToPreference( fun Spinner.bindToPreference(
pref: com.tfcporciuncula.flow.Preference<Int>, pref: Preference<Int>,
offset: Int = 0 offset: Int = 0
) { ) {
onItemSelectedListener = IgnoreFirstSpinnerListener { position -> onItemSelectedListener = IgnoreFirstSpinnerListener { position ->
@ -111,16 +57,3 @@ fun Spinner.bindToPreference(
} }
setSelection(pref.get() - offset, false) setSelection(pref.get() - offset, false)
} }
/**
* Binds a spinner to an int preference. The position of the spinner item must
* correlate with the [intValues] resource item (in arrays.xml), which is a <string-array>
* of int values that will be parsed here and applied to the preference.
*/
fun Spinner.bindToIntPreference(pref: com.tfcporciuncula.flow.Preference<Int>, @ArrayRes intValuesResource: Int) {
val intValues = resources.getStringArray(intValuesResource).map { it.toIntOrNull() }
onItemSelectedListener = IgnoreFirstSpinnerListener { position ->
pref.set(intValues[position] ?: 0)
}
setSelection(intValues.indexOf(pref.get()), false)
}

View file

@ -4,7 +4,6 @@ import android.app.Activity
import android.content.Context import android.content.Context
import android.util.AttributeSet import android.util.AttributeSet
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
import eu.kanade.tachiyomi.data.preference.getOrDefault
class IntListMatPreference @JvmOverloads constructor( class IntListMatPreference @JvmOverloads constructor(
activity: Activity?, activity: Activity?,
@ -26,7 +25,7 @@ class IntListMatPreference @JvmOverloads constructor(
var customSelectedValue: Int? = null var customSelectedValue: Int? = null
override var customSummaryProvider: SummaryProvider<MatPreference>? = SummaryProvider<MatPreference> { override var customSummaryProvider: SummaryProvider<MatPreference>? = SummaryProvider<MatPreference> {
val index = entryValues.indexOf(prefs.getInt(key, defValue).getOrDefault()) val index = entryValues.indexOf(prefs.getInt(key, defValue).get())
if (entries.isEmpty() || index == -1) "" if (entries.isEmpty() || index == -1) ""
else entries[index] else entries[index]
} }
@ -38,7 +37,7 @@ class IntListMatPreference @JvmOverloads constructor(
override fun dialog(): MaterialAlertDialogBuilder { override fun dialog(): MaterialAlertDialogBuilder {
return super.dialog().apply { return super.dialog().apply {
val default = entryValues.indexOf(customSelectedValue ?: prefs.getInt(key, defValue).getOrDefault()) val default = entryValues.indexOf(customSelectedValue ?: prefs.getInt(key, defValue).get())
setSingleChoiceItems(entries.toTypedArray(), default) { dialog, pos -> setSingleChoiceItems(entries.toTypedArray(), default) { dialog, pos ->
val value = entryValues[pos] val value = entryValues[pos]
if (key != null) { if (key != null) {
@ -48,14 +47,6 @@ class IntListMatPreference @JvmOverloads constructor(
notifyChanged() notifyChanged()
dialog.dismiss() dialog.dismiss()
} }
// listItemsSingleChoice(
// items = entries,
// waitForPositiveButton = false,
// initialSelection = default
// ) {
// _, pos, _ ->
//
// }
} }
} }
} }

View file

@ -6,7 +6,6 @@ import android.content.Context
import android.util.AttributeSet import android.util.AttributeSet
import androidx.preference.Preference import androidx.preference.Preference
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
import eu.kanade.tachiyomi.data.preference.getOrDefault
open class ListMatPreference @JvmOverloads constructor( open class ListMatPreference @JvmOverloads constructor(
activity: Activity?, activity: Activity?,
@ -31,7 +30,7 @@ open class ListMatPreference @JvmOverloads constructor(
} }
override var customSummaryProvider: SummaryProvider<MatPreference>? = SummaryProvider<MatPreference> { override var customSummaryProvider: SummaryProvider<MatPreference>? = SummaryProvider<MatPreference> {
val index = entryValues.indexOf(prefs.getStringPref(key, defValue).getOrDefault()) val index = entryValues.indexOf(prefs.getStringPref(key, defValue).get())
if (entries.isEmpty() || index == -1) "" if (entries.isEmpty() || index == -1) ""
else entries[index] else entries[index]
} }
@ -48,7 +47,7 @@ open class ListMatPreference @JvmOverloads constructor(
if (sharedPref != null) { if (sharedPref != null) {
val settings = context.getSharedPreferences(sharedPref, Context.MODE_PRIVATE) val settings = context.getSharedPreferences(sharedPref, Context.MODE_PRIVATE)
settings.getString(key, "") settings.getString(key, "")
} else prefs.getStringPref(key, defValue).getOrDefault() } else prefs.getStringPref(key, defValue).get()
) )
setSingleChoiceItems(entries.toTypedArray(), default) { dialog, pos -> setSingleChoiceItems(entries.toTypedArray(), default) { dialog, pos ->
val value = entryValues[pos] val value = entryValues[pos]

View file

@ -8,7 +8,6 @@ import androidx.appcompat.app.AlertDialog
import androidx.appcompat.widget.AppCompatCheckedTextView import androidx.appcompat.widget.AppCompatCheckedTextView
import androidx.core.view.children import androidx.core.view.children
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
import eu.kanade.tachiyomi.data.preference.getOrDefault
import eu.kanade.tachiyomi.util.system.disableItems import eu.kanade.tachiyomi.util.system.disableItems
class MultiListMatPreference @JvmOverloads constructor( class MultiListMatPreference @JvmOverloads constructor(
@ -44,7 +43,7 @@ class MultiListMatPreference @JvmOverloads constructor(
} }
override var customSummaryProvider: SummaryProvider<MatPreference>? = SummaryProvider<MatPreference> { override var customSummaryProvider: SummaryProvider<MatPreference>? = SummaryProvider<MatPreference> {
var values = prefs.getStringSet(key, defValue).getOrDefault().mapNotNull { value -> var values = prefs.getStringSet(key, defValue).get().mapNotNull { value ->
entryValues.indexOf(value).takeUnless { it == -1 } entryValues.indexOf(value).takeUnless { it == -1 }
}.toIntArray().sorted().map { entries[it] } }.toIntArray().sorted().map { entries[it] }
allSelectionRes?.let { allRes -> allSelectionRes?.let { allRes ->
@ -64,7 +63,7 @@ class MultiListMatPreference @JvmOverloads constructor(
@SuppressLint("CheckResult") @SuppressLint("CheckResult")
override fun MaterialAlertDialogBuilder.setListItems() { override fun MaterialAlertDialogBuilder.setListItems() {
val set = prefs.getStringSet(key, defValue).getOrDefault() val set = prefs.getStringSet(key, defValue).get()
val items = if (allSelectionRes != null) { val items = if (allSelectionRes != null) {
if (showAllLast) entries + listOf(context.getString(allSelectionRes!!)) if (showAllLast) entries + listOf(context.getString(allSelectionRes!!))
else listOf(context.getString(allSelectionRes!!)) + entries else listOf(context.getString(allSelectionRes!!)) + entries

View file

@ -7,7 +7,6 @@ import android.util.AttributeSet
import androidx.core.text.buildSpannedString import androidx.core.text.buildSpannedString
import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.google.android.material.dialog.MaterialAlertDialogBuilder
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.preference.getOrDefault
import eu.kanade.tachiyomi.util.system.setTriStateItems import eu.kanade.tachiyomi.util.system.setTriStateItems
import eu.kanade.tachiyomi.widget.TriStateCheckBox import eu.kanade.tachiyomi.widget.TriStateCheckBox
@ -44,7 +43,7 @@ class TriStateListPreference @JvmOverloads constructor(
} }
override var customSummaryProvider: SummaryProvider<MatPreference>? = SummaryProvider<MatPreference> { override var customSummaryProvider: SummaryProvider<MatPreference>? = SummaryProvider<MatPreference> {
var includedStrings = prefs.getStringSet(key, defValue).getOrDefault().mapNotNull { value -> var includedStrings = prefs.getStringSet(key, defValue).get().mapNotNull { value ->
entryValues.indexOf(value).takeUnless { it == -1 } entryValues.indexOf(value).takeUnless { it == -1 }
}.toIntArray().sorted().map { entries[it] } }.toIntArray().sorted().map { entries[it] }
allSelectionRes?.let { allRes -> allSelectionRes?.let { allRes ->
@ -57,7 +56,7 @@ class TriStateListPreference @JvmOverloads constructor(
} }
} }
val excludedStrings = excludeKey?.let { val excludedStrings = excludeKey?.let {
prefs.getStringSet(it, defValue).getOrDefault().mapNotNull { value -> prefs.getStringSet(it, defValue).get().mapNotNull { value ->
entryValues.indexOf(value).takeUnless { entryValues.indexOf(value).takeUnless {
it == -1 it == -1
} }
@ -73,14 +72,14 @@ class TriStateListPreference @JvmOverloads constructor(
@SuppressLint("CheckResult") @SuppressLint("CheckResult")
override fun MaterialAlertDialogBuilder.setListItems() { override fun MaterialAlertDialogBuilder.setListItems() {
val set = prefs.getStringSet(key, defValue).getOrDefault() val set = prefs.getStringSet(key, defValue).get()
val items = if (allSelectionRes != null) { val items = if (allSelectionRes != null) {
if (showAllLast) entries + listOf(context.getString(allSelectionRes!!)) if (showAllLast) entries + listOf(context.getString(allSelectionRes!!))
else listOf(context.getString(allSelectionRes!!)) + entries else listOf(context.getString(allSelectionRes!!)) + entries
} else entries } else entries
val allPos = if (showAllLast) items.size - 1 else 0 val allPos = if (showAllLast) items.size - 1 else 0
val excludedSet = excludeKey?.let { val excludedSet = excludeKey?.let {
prefs.getStringSet(it, defValue).getOrDefault() prefs.getStringSet(it, defValue).get()
}.orEmpty() }.orEmpty()
val allValue = intArrayOf( val allValue = intArrayOf(
if (set.isEmpty()) TriStateCheckBox.State.CHECKED.ordinal if (set.isEmpty()) TriStateCheckBox.State.CHECKED.ordinal