Show category when search "Mobile data"
The displayed category is "SIMs". Bug: 346776183 Flag: EXEMPT bug fix Test: manual - search "Mobile data" Test: unit test Change-Id: If3c395281e96603193e7476a9e76d1f9e9213531
This commit is contained in:
@@ -197,6 +197,9 @@ open class NetworkCellularGroupProvider : SettingsPageProvider, SearchablePage {
|
||||
// Do nothing
|
||||
}
|
||||
|
||||
override fun getPageTitleForSearch(context: Context): String =
|
||||
context.getString(R.string.provider_network_settings_title)
|
||||
|
||||
override fun getSearchableTitles(context: Context): List<String> {
|
||||
if (!isPageSearchable(context)) return emptyList()
|
||||
return buildList {
|
||||
|
||||
@@ -20,6 +20,9 @@ import android.content.Context
|
||||
|
||||
interface SearchablePage {
|
||||
|
||||
/** Gets the searchable titles at the current moment. */
|
||||
/** Gets the title of the page. */
|
||||
fun getPageTitleForSearch(context: Context): String = ""
|
||||
|
||||
/** Gets the titles of the searchable items at the current moment. */
|
||||
fun getSearchableTitles(context: Context): List<String>
|
||||
}
|
||||
|
||||
@@ -18,25 +18,45 @@ package com.android.settings.spa.search
|
||||
|
||||
import android.app.Activity
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import com.android.settings.SettingsActivity.EXTRA_FRAGMENT_ARG_KEY
|
||||
import com.android.settings.overlay.FeatureFactory.Companion.featureFactory
|
||||
import com.android.settings.password.PasswordUtils
|
||||
import com.android.settings.spa.SpaDestination
|
||||
import com.android.settings.spa.SpaSearchLanding
|
||||
import com.google.protobuf.ByteString
|
||||
import com.google.protobuf.InvalidProtocolBufferException
|
||||
|
||||
class SpaSearchLandingActivity : Activity() {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
if (!isValidCall()) return
|
||||
|
||||
val destination = intent.getStringExtra(EXTRA_FRAGMENT_ARG_KEY)
|
||||
if (destination.isNullOrBlank()) return
|
||||
val keyString = intent.getStringExtra(EXTRA_FRAGMENT_ARG_KEY)
|
||||
val key =
|
||||
try {
|
||||
SpaSearchLanding.SpaSearchLandingKey.parseFrom(ByteString.copyFromUtf8(keyString))
|
||||
} catch (e: InvalidProtocolBufferException) {
|
||||
Log.w(TAG, "arg key ($keyString) invalid", e)
|
||||
finish()
|
||||
return
|
||||
}
|
||||
|
||||
SpaDestination(destination = destination, highlightMenuKey = null)
|
||||
.startFromExportedActivity(this)
|
||||
if (key.hasSpaPage()) {
|
||||
val destination = key.spaPage.destination
|
||||
if (destination.isNotEmpty()) {
|
||||
SpaDestination(destination = destination, highlightMenuKey = null)
|
||||
.startFromExportedActivity(this)
|
||||
}
|
||||
}
|
||||
finish()
|
||||
}
|
||||
|
||||
private fun isValidCall() =
|
||||
PasswordUtils.getCallingAppPackageName(activityToken) ==
|
||||
featureFactory.searchFeatureProvider.getSettingsIntelligencePkgName(this)
|
||||
|
||||
private companion object {
|
||||
private const val TAG = "SpaSearchLandingActivity"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,6 +20,8 @@ import android.content.Context
|
||||
import android.provider.SearchIndexableResource
|
||||
import android.util.Log
|
||||
import androidx.annotation.VisibleForTesting
|
||||
import com.android.settings.spa.SpaSearchLanding.SpaSearchLandingKey
|
||||
import com.android.settings.spa.SpaSearchLanding.SpaSearchLandingSpaPage
|
||||
import com.android.settingslib.search.Indexable
|
||||
import com.android.settingslib.search.SearchIndexableData
|
||||
import com.android.settingslib.search.SearchIndexableRaw
|
||||
@@ -34,7 +36,8 @@ class SpaSearchRepository(
|
||||
Log.d(TAG, "getSearchIndexableDataList")
|
||||
return spaEnvironment.pageProviderRepository.value.getAllProviders().mapNotNull { page ->
|
||||
if (page is SearchablePage) {
|
||||
page.createSearchIndexableData(page::getSearchableTitles)
|
||||
page.createSearchIndexableData(
|
||||
page::getPageTitleForSearch, page::getSearchableTitles)
|
||||
} else null
|
||||
}
|
||||
}
|
||||
@@ -44,6 +47,7 @@ class SpaSearchRepository(
|
||||
|
||||
@VisibleForTesting
|
||||
fun SettingsPageProvider.createSearchIndexableData(
|
||||
getPageTitleForSearch: (context: Context) -> String,
|
||||
titlesProvider: (context: Context) -> List<String>,
|
||||
): SearchIndexableData {
|
||||
val searchIndexProvider =
|
||||
@@ -61,23 +65,36 @@ class SpaSearchRepository(
|
||||
override fun getDynamicRawDataToIndex(
|
||||
context: Context,
|
||||
enabled: Boolean,
|
||||
): List<SearchIndexableRaw> =
|
||||
titlesProvider(context).map { title ->
|
||||
createSearchIndexableRaw(context, title)
|
||||
): List<SearchIndexableRaw> {
|
||||
val pageTitle = getPageTitleForSearch(context)
|
||||
return titlesProvider(context).map { itemTitle ->
|
||||
createSearchIndexableRaw(context, itemTitle, pageTitle)
|
||||
}
|
||||
}
|
||||
|
||||
override fun getNonIndexableKeys(context: Context): List<String> = emptyList()
|
||||
}
|
||||
return SearchIndexableData(this::class.java, searchIndexProvider)
|
||||
}
|
||||
|
||||
private fun SettingsPageProvider.createSearchIndexableRaw(context: Context, title: String) =
|
||||
private fun SettingsPageProvider.createSearchIndexableRaw(
|
||||
context: Context,
|
||||
itemTitle: String,
|
||||
pageTitle: String,
|
||||
) =
|
||||
SearchIndexableRaw(context).apply {
|
||||
key = name
|
||||
this.title = title
|
||||
key =
|
||||
SpaSearchLandingKey.newBuilder()
|
||||
.setSpaPage(SpaSearchLandingSpaPage.newBuilder().setDestination(name))
|
||||
.build()
|
||||
.toByteString()
|
||||
.toStringUtf8()
|
||||
title = itemTitle
|
||||
intentAction = SEARCH_LANDING_ACTION
|
||||
intentTargetClass = SpaSearchLandingActivity::class.qualifiedName
|
||||
packageName = context.packageName
|
||||
className = SpaSearchLandingActivity::class.qualifiedName
|
||||
className = this@createSearchIndexableRaw::class.java.name
|
||||
screenTitle = pageTitle
|
||||
}
|
||||
|
||||
private const val SEARCH_LANDING_ACTION = "android.settings.SPA_SEARCH_LANDING"
|
||||
|
||||
Reference in New Issue
Block a user