mirror of
https://github.com/tachiyomiorg/tachiyomi.git
synced 2024-12-23 09:41:52 +01:00
Restore individual sources in source filter view
This commit is contained in:
parent
381ba86e3c
commit
f176a5179a
@ -47,3 +47,5 @@ interface Source {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun Source.icon(): Drawable? = Injekt.get<ExtensionManager>().getAppIconForSource(this)
|
fun Source.icon(): Drawable? = Injekt.get<ExtensionManager>().getAppIconForSource(this)
|
||||||
|
|
||||||
|
fun Source.getPreferenceKey(): String = "source_$id"
|
||||||
|
@ -34,7 +34,7 @@ abstract class HttpSource : CatalogueSource {
|
|||||||
// * Preferences that a source may need.
|
// * Preferences that a source may need.
|
||||||
// */
|
// */
|
||||||
// val preferences: SharedPreferences by lazy {
|
// val preferences: SharedPreferences by lazy {
|
||||||
// Injekt.get<Application>().getSharedPreferences("source_$id", Context.MODE_PRIVATE)
|
// Injekt.get<Application>().getSharedPreferences(source.getPreferenceKey(), Context.MODE_PRIVATE)
|
||||||
// }
|
// }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -27,6 +27,7 @@ import eu.kanade.tachiyomi.extension.model.Extension
|
|||||||
import eu.kanade.tachiyomi.source.CatalogueSource
|
import eu.kanade.tachiyomi.source.CatalogueSource
|
||||||
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.ui.base.controller.NoToolbarElevationController
|
import eu.kanade.tachiyomi.ui.base.controller.NoToolbarElevationController
|
||||||
import eu.kanade.tachiyomi.ui.base.controller.NucleusController
|
import eu.kanade.tachiyomi.ui.base.controller.NucleusController
|
||||||
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
|
import eu.kanade.tachiyomi.ui.base.controller.withFadeTransaction
|
||||||
@ -128,7 +129,7 @@ class ExtensionDetailsController(bundle: Bundle? = null) :
|
|||||||
val sourcePrefs = mutableListOf<Preference>()
|
val sourcePrefs = mutableListOf<Preference>()
|
||||||
|
|
||||||
val block: (@DSL SwitchPreferenceCompat).() -> Unit = {
|
val block: (@DSL SwitchPreferenceCompat).() -> Unit = {
|
||||||
key = getSourceKey(source.id)
|
key = source.getPreferenceKey()
|
||||||
title = when {
|
title = when {
|
||||||
isMultiSource && !isMultiLangSingleSource -> source.toString()
|
isMultiSource && !isMultiLangSingleSource -> source.toString()
|
||||||
else -> LocaleHelper.getSourceDisplayName(it.key, context)
|
else -> LocaleHelper.getSourceDisplayName(it.key, context)
|
||||||
@ -226,10 +227,6 @@ class ExtensionDetailsController(bundle: Bundle? = null) :
|
|||||||
return id.toString() !in preferences.hiddenCatalogues().get()
|
return id.toString() !in preferences.hiddenCatalogues().get()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getSourceKey(sourceId: Long): String {
|
|
||||||
return "source_$sourceId"
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun getPreferenceThemeContext(): Context {
|
private fun getPreferenceThemeContext(): Context {
|
||||||
val tv = TypedValue()
|
val tv = TypedValue()
|
||||||
activity!!.theme.resolveAttribute(R.attr.preferenceTheme, tv, true)
|
activity!!.theme.resolveAttribute(R.attr.preferenceTheme, tv, true)
|
||||||
|
@ -28,6 +28,7 @@ import eu.kanade.tachiyomi.data.preference.SharedPreferencesDataStore
|
|||||||
import eu.kanade.tachiyomi.databinding.SourcePreferencesControllerBinding
|
import eu.kanade.tachiyomi.databinding.SourcePreferencesControllerBinding
|
||||||
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.ui.base.controller.NucleusController
|
import eu.kanade.tachiyomi.ui.base.controller.NucleusController
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
|
|
||||||
@ -107,7 +108,7 @@ class SourcePreferencesController(bundle: Bundle? = null) :
|
|||||||
val context = screen.context
|
val context = screen.context
|
||||||
|
|
||||||
val dataStore = SharedPreferencesDataStore(
|
val dataStore = SharedPreferencesDataStore(
|
||||||
context.getSharedPreferences("source_${source.id}", Context.MODE_PRIVATE)
|
context.getSharedPreferences(source.getPreferenceKey(), Context.MODE_PRIVATE)
|
||||||
)
|
)
|
||||||
|
|
||||||
if (source is ConfigurableSource) {
|
if (source is ConfigurableSource) {
|
||||||
|
@ -1,12 +1,17 @@
|
|||||||
package eu.kanade.tachiyomi.ui.browse.source
|
package eu.kanade.tachiyomi.ui.browse.source
|
||||||
|
|
||||||
import android.graphics.drawable.Drawable
|
import android.graphics.drawable.Drawable
|
||||||
|
import androidx.preference.CheckBoxPreference
|
||||||
|
import androidx.preference.PreferenceGroup
|
||||||
import androidx.preference.PreferenceScreen
|
import androidx.preference.PreferenceScreen
|
||||||
import eu.kanade.tachiyomi.R
|
import eu.kanade.tachiyomi.R
|
||||||
import eu.kanade.tachiyomi.source.SourceManager
|
import eu.kanade.tachiyomi.source.SourceManager
|
||||||
|
import eu.kanade.tachiyomi.source.getPreferenceKey
|
||||||
|
import eu.kanade.tachiyomi.source.icon
|
||||||
|
import eu.kanade.tachiyomi.source.online.HttpSource
|
||||||
import eu.kanade.tachiyomi.ui.setting.SettingsController
|
import eu.kanade.tachiyomi.ui.setting.SettingsController
|
||||||
import eu.kanade.tachiyomi.util.preference.onChange
|
import eu.kanade.tachiyomi.util.preference.onChange
|
||||||
import eu.kanade.tachiyomi.util.preference.switchPreference
|
import eu.kanade.tachiyomi.util.preference.switchPreferenceCategory
|
||||||
import eu.kanade.tachiyomi.util.preference.titleRes
|
import eu.kanade.tachiyomi.util.preference.titleRes
|
||||||
import eu.kanade.tachiyomi.util.system.LocaleHelper
|
import eu.kanade.tachiyomi.util.system.LocaleHelper
|
||||||
import java.util.TreeMap
|
import java.util.TreeMap
|
||||||
@ -27,25 +32,36 @@ class SourceFilterController : SettingsController() {
|
|||||||
val sourcesByLang = onlineSources.groupByTo(TreeMap(), { it.lang })
|
val sourcesByLang = onlineSources.groupByTo(TreeMap(), { it.lang })
|
||||||
|
|
||||||
// Order first by active languages, then inactive ones
|
// Order first by active languages, then inactive ones
|
||||||
val orderedLangs = sourcesByLang.keys.sortedWith(compareBy({ it !in activeLangsCodes }, { LocaleHelper.getSourceDisplayName(it, context) }))
|
val orderedLangs = sourcesByLang.keys.sortedWith(
|
||||||
|
compareBy(
|
||||||
|
{ it !in activeLangsCodes },
|
||||||
|
{ LocaleHelper.getSourceDisplayName(it, context) }
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
orderedLangs.forEach { lang ->
|
orderedLangs.forEach { lang ->
|
||||||
switchPreference {
|
val sources = sourcesByLang[lang].orEmpty().sortedBy { it.name }
|
||||||
|
|
||||||
|
// Create a preference group and set initial state and change listener
|
||||||
|
switchPreferenceCategory {
|
||||||
preferenceScreen.addPreference(this)
|
preferenceScreen.addPreference(this)
|
||||||
title = LocaleHelper.getSourceDisplayName(lang, context)
|
title = LocaleHelper.getSourceDisplayName(lang, context)
|
||||||
isPersistent = false
|
isPersistent = false
|
||||||
isChecked = lang in activeLangsCodes
|
if (lang in activeLangsCodes) {
|
||||||
|
setChecked(true)
|
||||||
|
addLanguageSources(this, sources)
|
||||||
|
}
|
||||||
|
|
||||||
onChange { newValue ->
|
onChange { newValue ->
|
||||||
val checked = newValue as Boolean
|
val checked = newValue as Boolean
|
||||||
val current = preferences.enabledLanguages().get()
|
val current = preferences.enabledLanguages().get()
|
||||||
preferences.enabledLanguages().set(
|
|
||||||
if (!checked) {
|
if (!checked) {
|
||||||
current - lang
|
preferences.enabledLanguages().set(current - lang)
|
||||||
|
removeAll()
|
||||||
} else {
|
} else {
|
||||||
current + lang
|
preferences.enabledLanguages().set(current + lang)
|
||||||
|
addLanguageSources(this, sources)
|
||||||
}
|
}
|
||||||
)
|
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -55,4 +71,46 @@ class SourceFilterController : SettingsController() {
|
|||||||
override fun setDivider(divider: Drawable?) {
|
override fun setDivider(divider: Drawable?) {
|
||||||
super.setDivider(null)
|
super.setDivider(null)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds the source list for the given group (language).
|
||||||
|
*
|
||||||
|
* @param group the language category.
|
||||||
|
*/
|
||||||
|
private fun addLanguageSources(group: PreferenceGroup, sources: List<HttpSource>) {
|
||||||
|
val hiddenCatalogues = preferences.hiddenCatalogues().get()
|
||||||
|
|
||||||
|
sources
|
||||||
|
.sortedBy { it.id.toString() in hiddenCatalogues }
|
||||||
|
.map { source ->
|
||||||
|
CheckBoxPreference(group.context).apply {
|
||||||
|
val id = source.id.toString()
|
||||||
|
title = source.name
|
||||||
|
key = source.getPreferenceKey()
|
||||||
|
isPersistent = false
|
||||||
|
isChecked = id !in hiddenCatalogues
|
||||||
|
|
||||||
|
val sourceIcon = source.icon()
|
||||||
|
if (sourceIcon != null) {
|
||||||
|
icon = sourceIcon
|
||||||
|
}
|
||||||
|
|
||||||
|
onChange { newValue ->
|
||||||
|
val checked = newValue as Boolean
|
||||||
|
val current = preferences.hiddenCatalogues().get()
|
||||||
|
|
||||||
|
preferences.hiddenCatalogues().set(
|
||||||
|
if (checked) {
|
||||||
|
current - id
|
||||||
|
} else {
|
||||||
|
current + id
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.forEach { group.addPreference(it) }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user