|
@@ -0,0 +1,106 @@
|
|
|
+package eu.kanade.tachiyomi.ui.setting.settingssearch
|
|
|
+
|
|
|
+import android.content.Context
|
|
|
+import androidx.preference.Preference
|
|
|
+import androidx.preference.PreferenceCategory
|
|
|
+import androidx.preference.PreferenceGroup
|
|
|
+import androidx.preference.PreferenceManager
|
|
|
+import eu.kanade.tachiyomi.ui.browse.extension.ExtensionFilterController
|
|
|
+import eu.kanade.tachiyomi.ui.browse.source.SourceFilterController
|
|
|
+import eu.kanade.tachiyomi.ui.more.AboutController
|
|
|
+import eu.kanade.tachiyomi.ui.more.MoreController
|
|
|
+import eu.kanade.tachiyomi.ui.setting.SettingsAdvancedController
|
|
|
+import eu.kanade.tachiyomi.ui.setting.SettingsBackupController
|
|
|
+import eu.kanade.tachiyomi.ui.setting.SettingsBrowseController
|
|
|
+import eu.kanade.tachiyomi.ui.setting.SettingsController
|
|
|
+import eu.kanade.tachiyomi.ui.setting.SettingsDownloadController
|
|
|
+import eu.kanade.tachiyomi.ui.setting.SettingsGeneralController
|
|
|
+import eu.kanade.tachiyomi.ui.setting.SettingsLibraryController
|
|
|
+import eu.kanade.tachiyomi.ui.setting.SettingsParentalControlsController
|
|
|
+import eu.kanade.tachiyomi.ui.setting.SettingsReaderController
|
|
|
+import eu.kanade.tachiyomi.ui.setting.SettingsSecurityController
|
|
|
+import eu.kanade.tachiyomi.ui.setting.SettingsTrackingController
|
|
|
+import kotlin.reflect.KClass
|
|
|
+import kotlin.reflect.full.createInstance
|
|
|
+
|
|
|
+object SettingsSearchHelper {
|
|
|
+ var prefSearchResultList: MutableList<SettingsSearchResult> = mutableListOf()
|
|
|
+ private set
|
|
|
+
|
|
|
+ /**
|
|
|
+ * All subclasses of `SettingsController` should be listed here, in order to have their preferences searchable.
|
|
|
+ */
|
|
|
+ private val settingControllersList: List<KClass<out SettingsController>> = listOf(
|
|
|
+ SettingsAdvancedController::class,
|
|
|
+ SettingsBackupController::class,
|
|
|
+ SettingsBrowseController::class,
|
|
|
+ SettingsDownloadController::class,
|
|
|
+ SettingsGeneralController::class,
|
|
|
+ SettingsLibraryController::class,
|
|
|
+ SettingsParentalControlsController::class,
|
|
|
+ SettingsReaderController::class,
|
|
|
+ SettingsSecurityController::class,
|
|
|
+ SettingsTrackingController::class,
|
|
|
+ ExtensionFilterController::class,
|
|
|
+ SourceFilterController::class,
|
|
|
+ AboutController::class,
|
|
|
+ MoreController::class
|
|
|
+ )
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Must be called to populate `prefSearchResultList`
|
|
|
+ */
|
|
|
+ fun initPreferenceSearchResultCollection(context: Context, preferenceManager: PreferenceManager) {
|
|
|
+ prefSearchResultList.clear()
|
|
|
+
|
|
|
+ settingControllersList.forEach { kClass ->
|
|
|
+ val ctrl = kClass.createInstance()
|
|
|
+ val settingsPrefScreen = ctrl.setupPreferenceScreen(preferenceManager.createPreferenceScreen(context))
|
|
|
+ val prefCount = settingsPrefScreen.preferenceCount
|
|
|
+ for (i in 0 until prefCount) {
|
|
|
+ val rootPref = settingsPrefScreen.getPreference(i)
|
|
|
+ if (rootPref.title == null) continue // no title, not a preference. (note: only info notes appear to not have titles)
|
|
|
+ getSettingSearchResult(ctrl, rootPref, "${settingsPrefScreen.title}")
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Extracts the data needed from a `Preference` to create a `SettingsSearchResult`, and then adds it to `prefSearchResultList`
|
|
|
+ */
|
|
|
+ private fun getSettingSearchResult(ctrl: SettingsController, pref: Preference, breadcrumbs: String = "") {
|
|
|
+ when (pref) {
|
|
|
+ is PreferenceGroup -> {
|
|
|
+ val breadcrumbsStr = breadcrumbs + " > ${pref.title}"
|
|
|
+
|
|
|
+ for (x in 0 until pref.preferenceCount) {
|
|
|
+ val subPref = pref.getPreference(x)
|
|
|
+ getSettingSearchResult(ctrl, subPref, breadcrumbsStr) // recursion
|
|
|
+ }
|
|
|
+ }
|
|
|
+ is PreferenceCategory -> {
|
|
|
+ val breadcrumbsStr = breadcrumbs + " > ${pref.title}"
|
|
|
+
|
|
|
+ for (x in 0 until pref.preferenceCount) {
|
|
|
+ val subPref = pref.getPreference(x)
|
|
|
+ getSettingSearchResult(ctrl, subPref, breadcrumbsStr) // recursion
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else -> {
|
|
|
+ // Is an actual preference
|
|
|
+ val title = pref.title.toString()
|
|
|
+ val summary = if (pref.summary != null) pref.summary.toString() else ""
|
|
|
+ val breadcrumbsStr = breadcrumbs + " > ${pref.title}"
|
|
|
+
|
|
|
+ prefSearchResultList.add(SettingsSearchResult(title, summary, breadcrumbsStr, ctrl))
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ data class SettingsSearchResult(
|
|
|
+ val title: String,
|
|
|
+ val summary: String,
|
|
|
+ val breadcrumb: String,
|
|
|
+ val searchController: SettingsController
|
|
|
+ )
|
|
|
+}
|