Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1de87436 authored by Jacky Wang's avatar Jacky Wang
Browse files

[Catalyst] Allow to custom title shown in settings search result

Fix: 421061781
Flag: com.android.settings.flags.catalyst_settings_search
Test: manual
Change-Id: I21b31b8396f4e7959dcb2a3ac6a06b8dc3e24c81
parent 5d43b0b1
Loading
Loading
Loading
Loading
+15 −3
Original line number Diff line number Diff line
@@ -64,7 +64,7 @@ abstract class PreferenceSearchIndexablesProvider : SearchIndexablesProvider() {
        val start = SystemClock.elapsedRealtime()
        val context = requireContext()
        context.visitPreferenceScreen { preferenceScreenMetadata ->
            val screenTitle = preferenceScreenMetadata.getPreferenceScreenTitle(context)
            val screenTitle = preferenceScreenMetadata.getIndexableTitle(context)
            fun PreferenceHierarchyNode.visitRecursively(isParentAvailableOnCondition: Boolean) {
                if (!metadata.isAvailable(context)) return
                val isAvailableOnCondition =
@@ -94,7 +94,7 @@ abstract class PreferenceSearchIndexablesProvider : SearchIndexablesProvider() {
        val start = SystemClock.elapsedRealtime()
        val context = requireContext()
        context.visitPreferenceScreen { preferenceScreenMetadata ->
            val screenTitle = preferenceScreenMetadata.getPreferenceScreenTitle(context)
            val screenTitle = preferenceScreenMetadata.getIndexableTitle(context)
            fun PreferenceHierarchyNode.visitRecursively() {
                if (metadata.isAvailableOnCondition) return
                if (
@@ -141,7 +141,7 @@ abstract class PreferenceSearchIndexablesProvider : SearchIndexablesProvider() {
        val intent = preferenceScreenMetadata.getLaunchIntent(context, this) ?: return null
        val columnValues = arrayOfNulls<Any>(SearchIndexablesContract.INDEXABLES_RAW_COLUMNS.size)

        columnValues[SearchIndexablesContract.COLUMN_INDEX_RAW_TITLE] = getPreferenceTitle(context)
        columnValues[SearchIndexablesContract.COLUMN_INDEX_RAW_TITLE] = getIndexableTitle(context)
        columnValues[SearchIndexablesContract.COLUMN_INDEX_RAW_KEYWORDS] = getKeywords(context)
        columnValues[SearchIndexablesContract.COLUMN_INDEX_RAW_SCREEN_TITLE] = screenTitle
        val iconResId = getPreferenceIcon(context)
@@ -161,6 +161,18 @@ abstract class PreferenceSearchIndexablesProvider : SearchIndexablesProvider() {
        return columnValues
    }

    private fun PreferenceScreenMetadata.getIndexableTitle(context: Context) =
        when (this) {
            is PreferenceIndexableTitleProvider -> getIndexableTitle(context)
            else -> getPreferenceScreenTitle(context)
        }

    private fun PreferenceMetadata.getIndexableTitle(context: Context) =
        when (this) {
            is PreferenceIndexableTitleProvider -> getIndexableTitle(context)
            else -> getPreferenceTitle(context)
        }

    private fun PreferenceMetadata.getKeywords(context: Context) =
        if (keywords != 0) context.getString(keywords) else null

+12 −0
Original line number Diff line number Diff line
@@ -38,6 +38,18 @@ interface PreferenceTitleProvider {
    fun getTitle(context: Context): CharSequence?
}

/**
 * Provides preference title to be shown in search result.
 *
 * This is used to add more context to the title, and it is effective only when building indexable
 * data in [PreferenceSearchIndexablesProvider].
 */
interface PreferenceIndexableTitleProvider {

    /** Provides preference indexable title. */
    fun getIndexableTitle(context: Context): CharSequence?
}

/**
 * Interface to provide dynamic preference summary.
 *