Instantiate extension preferences with proper datastore earlier

Co-Authored-By: arkon <4098258+arkon@users.noreply.github.com>
This commit is contained in:
Jays2Kings 2021-05-08 23:15:09 -04:00
parent 4999db33f4
commit b8af6e0049

View File

@ -28,12 +28,12 @@ import androidx.preference.SwitchPreferenceCompat
import androidx.recyclerview.widget.ConcatAdapter import androidx.recyclerview.widget.ConcatAdapter
import com.google.android.material.snackbar.Snackbar import com.google.android.material.snackbar.Snackbar
import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.preference.EmptyPreferenceDataStore
import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.data.preference.SharedPreferencesDataStore import eu.kanade.tachiyomi.data.preference.SharedPreferencesDataStore
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.databinding.ExtensionDetailControllerBinding import eu.kanade.tachiyomi.databinding.ExtensionDetailControllerBinding
import eu.kanade.tachiyomi.extension.model.Extension
import eu.kanade.tachiyomi.source.ConfigurableSource import eu.kanade.tachiyomi.source.ConfigurableSource
import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.Source
import eu.kanade.tachiyomi.source.getPreferenceKey import eu.kanade.tachiyomi.source.getPreferenceKey
@ -94,7 +94,10 @@ class ExtensionDetailsController(bundle: Bundle? = null) :
val themedContext by lazy { getPreferenceThemeContext() } val themedContext by lazy { getPreferenceThemeContext() }
val manager = PreferenceManager(themedContext) val manager = PreferenceManager(themedContext)
manager.preferenceDataStore = EmptyPreferenceDataStore() val dataStore = SharedPreferencesDataStore(
context.getSharedPreferences(extension.getPreferenceKey(), Context.MODE_PRIVATE)
)
manager.preferenceDataStore = dataStore
manager.onDisplayPreferenceDialogListener = this manager.onDisplayPreferenceDialogListener = this
val screen = manager.createPreferenceScreen(themedContext) val screen = manager.createPreferenceScreen(themedContext)
preferenceScreen = screen preferenceScreen = screen
@ -178,11 +181,6 @@ class ExtensionDetailsController(bundle: Bundle? = null) :
private fun addPreferencesForSource(screen: PreferenceScreen, source: Source, isMultiSource: Boolean, isMultiLangSingleSource: Boolean) { private fun addPreferencesForSource(screen: PreferenceScreen, source: Source, isMultiSource: Boolean, isMultiLangSingleSource: Boolean) {
val context = screen.context val context = screen.context
// TODO
val dataStore = SharedPreferencesDataStore(
context.getSharedPreferences("source_${source.id}", Context.MODE_PRIVATE)
)
val prefs = mutableListOf<Preference>() val prefs = mutableListOf<Preference>()
val block: (@DSL SwitchPreferenceCompat).() -> Unit = { val block: (@DSL SwitchPreferenceCompat).() -> Unit = {
key = source.getPreferenceKey() + "_enabled" key = source.getPreferenceKey() + "_enabled"
@ -236,7 +234,6 @@ class ExtensionDetailsController(bundle: Bundle? = null) :
while (newScreen.preferenceCount != 0) { while (newScreen.preferenceCount != 0) {
val pref = newScreen.getPreference(0) val pref = newScreen.getPreference(0)
pref.isIconSpaceReserved = true pref.isIconSpaceReserved = true
pref.preferenceDataStore = dataStore
pref.fragment = "source_${source.id}" pref.fragment = "source_${source.id}"
pref.order = Int.MAX_VALUE pref.order = Int.MAX_VALUE
pref.isVisible = source.isEnabled() pref.isVisible = source.isEnabled()
@ -309,6 +306,8 @@ class ExtensionDetailsController(bundle: Bundle? = null) :
return (lang in langs ?: preferences.enabledLanguages().get()) return (lang in langs ?: preferences.enabledLanguages().get())
} }
private fun Extension.getPreferenceKey(): String = "extension_$pkgName"
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
override fun <T : Preference> findPreference(key: CharSequence): T? { override fun <T : Preference> findPreference(key: CharSequence): T? {
// We track [lastOpenPreferencePosition] when displaying the dialog // We track [lastOpenPreferencePosition] when displaying the dialog