Loading src/com/android/settings/network/telephony/MobileNetworkSettingsSearchIndex.kt +20 −23 Original line number Diff line number Diff line Loading @@ -28,17 +28,15 @@ import com.android.settings.network.telephony.NrAdvancedCallingPreferenceControl import com.android.settings.network.telephony.RoamingPreferenceController.Companion.RoamingSearchItem import com.android.settings.network.telephony.VideoCallingPreferenceController.Companion.VideoCallingSearchItem import com.android.settings.network.telephony.WifiCallingPreferenceController.Companion.WifiCallingSearchItem import com.android.settings.spa.search.SettingsSpaSearchRepository.Companion.createSearchIndexableRaw import com.android.settingslib.spa.search.SpaSearchIndexableItem import com.android.settingslib.spa.search.SpaSearchIndexablePage import com.android.settingslib.spa.search.SpaSearchLanding.BundleValue import com.android.settingslib.spa.search.SpaSearchLanding.SpaSearchLandingFragment import com.android.settingslib.spa.search.SpaSearchLanding.SpaSearchLandingKey import com.android.settingslib.spa.search.SpaSearchRepository.Companion.searchIndexProviderOf import com.android.settingslib.search.SearchIndexableData import com.android.settingslib.search.SearchIndexableRaw class MobileNetworkSettingsSearchIndex( private val searchItemsFactory: (context: Context) -> List<MobileNetworkSettingsSearchItem> = ::createSearchItems, ::createSearchItems ) { data class MobileNetworkSettingsSearchResult( val key: String, Loading @@ -50,38 +48,37 @@ class MobileNetworkSettingsSearchIndex( fun getSearchResult(subId: Int): MobileNetworkSettingsSearchResult? } fun createSearchIndexableData(): SearchIndexableData { val searchIndexProvider = searchIndexProviderOf { context -> fun getSearchIndexablePage(): SpaSearchIndexablePage { return SpaSearchIndexablePage(targetClass = MobileNetworkSettings::class.java) { context -> if (!isMobileNetworkSettingsSearchable(context)) { return@searchIndexProviderOf emptyList() return@SpaSearchIndexablePage emptyList() } val subInfos = context.requireSubscriptionManager().activeSubscriptionInfoList if (subInfos.isNullOrEmpty()) { return@searchIndexProviderOf emptyList() return@SpaSearchIndexablePage emptyList() } searchItemsFactory(context).flatMap { searchItem -> searchIndexableRawList(context, searchItem, subInfos) spaSearchIndexableItemList(context, searchItem, subInfos) } } return SearchIndexableData(MobileNetworkSettings::class.java, searchIndexProvider) } private fun searchIndexableRawList( private fun spaSearchIndexableItemList( context: Context, searchItem: MobileNetworkSettingsSearchItem, subInfos: List<SubscriptionInfo> ): List<SearchIndexableRaw> = subInfos: List<SubscriptionInfo>, ): List<SpaSearchIndexableItem> = subInfos.mapNotNull { subInfo -> searchItem.getSearchResult(subInfo.subscriptionId)?.let { searchResult -> searchIndexableRaw(context, searchResult, subInfo) searchIndexableItem(context, searchResult, subInfo) } } private fun searchIndexableRaw( private fun searchIndexableItem( context: Context, searchResult: MobileNetworkSettingsSearchResult, subInfo: SubscriptionInfo, ): SearchIndexableRaw { ): SpaSearchIndexableItem { val key = SpaSearchLandingKey.newBuilder() .setFragment( Loading @@ -90,16 +87,16 @@ class MobileNetworkSettingsSearchIndex( .setPreferenceKey(searchResult.key) .putArguments( Settings.EXTRA_SUB_ID, BundleValue.newBuilder().setIntValue(subInfo.subscriptionId).build())) BundleValue.newBuilder().setIntValue(subInfo.subscriptionId).build(), ) ) .build() val simsTitle = context.getString(R.string.provider_network_settings_title) return createSearchIndexableRaw( context = context, spaSearchLandingKey = key, return SpaSearchIndexableItem( searchLandingKey = key, pageTitle = "$simsTitle > ${subInfo.displayName}", itemTitle = searchResult.title, keywords = searchResult.keywords, indexableClass = MobileNetworkSettings::class.java, pageTitle = "$simsTitle > ${subInfo.displayName}", ) } Loading src/com/android/settings/spa/search/SettingsSpaSearchRepository.kt +14 −29 Original line number Diff line number Diff line Loading @@ -16,42 +16,27 @@ package com.android.settings.spa.search import android.content.Context import com.android.settings.network.telephony.MobileNetworkSettingsSearchIndex import com.android.settingslib.spa.framework.common.SpaEnvironment import com.android.settingslib.spa.framework.common.SpaEnvironmentFactory import com.android.settingslib.spa.search.SpaSearchLanding.SpaSearchLandingKey import com.android.settingslib.search.SearchIndexableData import com.android.settingslib.spa.search.SearchIndexableDataConverter import com.android.settingslib.spa.search.SpaSearchRepository class SettingsSpaSearchRepository(spaEnvironment: SpaEnvironment = SpaEnvironmentFactory.instance) { private val spaSearchRepository = SpaSearchRepository(spaEnvironment) fun getSearchIndexableDataList() = spaSearchRepository.getSearchIndexableDataList( intentAction = SEARCH_LANDING_ACTION, intentTargetClass = SettingsSpaSearchLandingActivity::class.qualifiedName!!, ) + MobileNetworkSettingsSearchIndex().createSearchIndexableData() companion object { fun createSearchIndexableRaw( context: Context, spaSearchLandingKey: SpaSearchLandingKey, itemTitle: String, indexableClass: Class<*>, pageTitle: String, keywords: String? = null, ) = SpaSearchRepository.createSearchIndexableRaw( context = context, spaSearchLandingKey = spaSearchLandingKey, itemTitle = itemTitle, indexableClass = indexableClass, pageTitle = pageTitle, class SettingsSpaSearchRepository() { private val spaSearchRepository = SpaSearchRepository() private val searchIndexableDataConverter = SearchIndexableDataConverter( intentAction = SEARCH_LANDING_ACTION, intentTargetClass = SettingsSpaSearchLandingActivity::class.qualifiedName!!, keywords = keywords, ) fun getSearchIndexableDataList(): List<SearchIndexableData> { val pages = spaSearchRepository.getSearchIndexablePageList() + MobileNetworkSettingsSearchIndex().getSearchIndexablePage() return pages.map(searchIndexableDataConverter::toSearchIndexableData) } companion object { private const val SEARCH_LANDING_ACTION = "android.settings.SPA_SEARCH_LANDING" } } tests/spa_unit/src/com/android/settings/network/telephony/MobileNetworkSettingsSearchIndexTest.kt +10 −18 Original line number Diff line number Diff line Loading @@ -27,11 +27,9 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import com.android.settings.R import com.android.settings.network.telephony.MobileNetworkSettingsSearchIndex.Companion.isMobileNetworkSettingsSearchable import com.android.settings.network.telephony.MobileNetworkSettingsSearchIndex.MobileNetworkSettingsSearchResult import com.android.settings.spa.search.SettingsSpaSearchLandingActivity import com.android.settingslib.spa.search.SpaSearchLanding.BundleValue import com.android.settingslib.spa.search.SpaSearchLanding.SpaSearchLandingFragment import com.android.settingslib.spa.search.SpaSearchLanding.SpaSearchLandingKey import com.android.settingslib.spa.search.decodeToSpaSearchLandingKey import com.google.common.truth.Truth.assertThat import org.junit.Before import org.junit.Test Loading Loading @@ -116,16 +114,14 @@ class MobileNetworkSettingsSearchIndexTest { } @Test fun createSearchIndexableData() { val searchIndexableData = mobileNetworkSettingsSearchIndex.createSearchIndexableData() assertThat(searchIndexableData.targetClass).isEqualTo(MobileNetworkSettings::class.java) val dynamicRawDataToIndex = searchIndexableData.searchIndexProvider.getDynamicRawDataToIndex(context, true) assertThat(dynamicRawDataToIndex).hasSize(1) val rawData = dynamicRawDataToIndex[0] val key = decodeToSpaSearchLandingKey(rawData.key) assertThat(key) fun getSearchIndexablePage() { val searchIndexablePage = mobileNetworkSettingsSearchIndex.getSearchIndexablePage() assertThat(searchIndexablePage.targetClass).isEqualTo(MobileNetworkSettings::class.java) val items = searchIndexablePage.itemsProvider(context) assertThat(items).hasSize(1) val item = items.single() assertThat(item.searchLandingKey) .isEqualTo( SpaSearchLandingKey.newBuilder() .setFragment( Loading @@ -136,12 +132,8 @@ class MobileNetworkSettingsSearchIndexTest { Settings.EXTRA_SUB_ID, BundleValue.newBuilder().setIntValue(SUB_ID_1).build())) .build()) assertThat(rawData.title).isEqualTo(TITLE) assertThat(rawData.intentAction).isEqualTo("android.settings.SPA_SEARCH_LANDING") assertThat(rawData.intentTargetClass) .isEqualTo(SettingsSpaSearchLandingActivity::class.qualifiedName) assertThat(rawData.className).isEqualTo(MobileNetworkSettings::class.java.name) assertThat(rawData.screenTitle).isEqualTo("SIMs > $SUB_DISPLAY_NAME_1") assertThat(item.pageTitle).isEqualTo("SIMs > $SUB_DISPLAY_NAME_1") assertThat(item.itemTitle).isEqualTo(TITLE) } private companion object { Loading tests/spa_unit/src/com/android/settings/spa/search/SettingsSpaSearchRepositoryTest.kt +10 −38 Original line number Diff line number Diff line Loading @@ -16,13 +16,10 @@ package com.android.settings.spa.search import android.content.Context import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 import com.android.settingslib.spa.framework.common.SettingsPageProvider import com.android.settingslib.spa.search.SpaSearchLanding.SpaSearchLandingKey import com.android.settingslib.spa.search.SpaSearchLanding.SpaSearchLandingSpaPage import com.android.settingslib.spa.search.decodeToSpaSearchLandingKey import com.android.settings.network.telephony.MobileNetworkSettings import com.android.settings.spa.network.NetworkCellularGroupProvider import com.android.settingslib.search.SearchIndexableData import com.google.common.truth.Truth.assertThat import org.junit.Test import org.junit.runner.RunWith Loading @@ -30,41 +27,16 @@ import org.junit.runner.RunWith @RunWith(AndroidJUnit4::class) class SettingsSpaSearchRepositoryTest { private val context: Context = ApplicationProvider.getApplicationContext() private val repository = SettingsSpaSearchRepository() @Test fun createSearchIndexableRaw() { val spaSearchLandingKey = SpaSearchLandingKey.newBuilder() .setSpaPage(SpaSearchLandingSpaPage.newBuilder().setDestination(PAGE_NAME)) .build() val pageProvider = object : SettingsPageProvider { override val name = PAGE_NAME } fun getSearchIndexableDataList_returnsCorrectList() { val searchIndexableDataList = repository.getSearchIndexableDataList() val searchIndexableRaw = SettingsSpaSearchRepository.createSearchIndexableRaw( context = context, spaSearchLandingKey = spaSearchLandingKey, itemTitle = ITEM_TITLE, indexableClass = pageProvider::class.java, pageTitle = PAGE_TITLE, assertThat(searchIndexableDataList.map(SearchIndexableData::getTargetClass)) .containsExactly( NetworkCellularGroupProvider::class.java, MobileNetworkSettings::class.java, ) assertThat(decodeToSpaSearchLandingKey(searchIndexableRaw.key)) .isEqualTo(spaSearchLandingKey) assertThat(searchIndexableRaw.title).isEqualTo(ITEM_TITLE) assertThat(searchIndexableRaw.className).isEqualTo(pageProvider::class.java.name) assertThat(searchIndexableRaw.screenTitle).isEqualTo(PAGE_TITLE) assertThat(searchIndexableRaw.intentAction).isEqualTo("android.settings.SPA_SEARCH_LANDING") assertThat(searchIndexableRaw.intentTargetClass) .isEqualTo(SettingsSpaSearchLandingActivity::class.qualifiedName) } private companion object { const val PAGE_NAME = "PageName" const val PAGE_TITLE = "Page Title" const val ITEM_TITLE = "Item Title" } } Loading
src/com/android/settings/network/telephony/MobileNetworkSettingsSearchIndex.kt +20 −23 Original line number Diff line number Diff line Loading @@ -28,17 +28,15 @@ import com.android.settings.network.telephony.NrAdvancedCallingPreferenceControl import com.android.settings.network.telephony.RoamingPreferenceController.Companion.RoamingSearchItem import com.android.settings.network.telephony.VideoCallingPreferenceController.Companion.VideoCallingSearchItem import com.android.settings.network.telephony.WifiCallingPreferenceController.Companion.WifiCallingSearchItem import com.android.settings.spa.search.SettingsSpaSearchRepository.Companion.createSearchIndexableRaw import com.android.settingslib.spa.search.SpaSearchIndexableItem import com.android.settingslib.spa.search.SpaSearchIndexablePage import com.android.settingslib.spa.search.SpaSearchLanding.BundleValue import com.android.settingslib.spa.search.SpaSearchLanding.SpaSearchLandingFragment import com.android.settingslib.spa.search.SpaSearchLanding.SpaSearchLandingKey import com.android.settingslib.spa.search.SpaSearchRepository.Companion.searchIndexProviderOf import com.android.settingslib.search.SearchIndexableData import com.android.settingslib.search.SearchIndexableRaw class MobileNetworkSettingsSearchIndex( private val searchItemsFactory: (context: Context) -> List<MobileNetworkSettingsSearchItem> = ::createSearchItems, ::createSearchItems ) { data class MobileNetworkSettingsSearchResult( val key: String, Loading @@ -50,38 +48,37 @@ class MobileNetworkSettingsSearchIndex( fun getSearchResult(subId: Int): MobileNetworkSettingsSearchResult? } fun createSearchIndexableData(): SearchIndexableData { val searchIndexProvider = searchIndexProviderOf { context -> fun getSearchIndexablePage(): SpaSearchIndexablePage { return SpaSearchIndexablePage(targetClass = MobileNetworkSettings::class.java) { context -> if (!isMobileNetworkSettingsSearchable(context)) { return@searchIndexProviderOf emptyList() return@SpaSearchIndexablePage emptyList() } val subInfos = context.requireSubscriptionManager().activeSubscriptionInfoList if (subInfos.isNullOrEmpty()) { return@searchIndexProviderOf emptyList() return@SpaSearchIndexablePage emptyList() } searchItemsFactory(context).flatMap { searchItem -> searchIndexableRawList(context, searchItem, subInfos) spaSearchIndexableItemList(context, searchItem, subInfos) } } return SearchIndexableData(MobileNetworkSettings::class.java, searchIndexProvider) } private fun searchIndexableRawList( private fun spaSearchIndexableItemList( context: Context, searchItem: MobileNetworkSettingsSearchItem, subInfos: List<SubscriptionInfo> ): List<SearchIndexableRaw> = subInfos: List<SubscriptionInfo>, ): List<SpaSearchIndexableItem> = subInfos.mapNotNull { subInfo -> searchItem.getSearchResult(subInfo.subscriptionId)?.let { searchResult -> searchIndexableRaw(context, searchResult, subInfo) searchIndexableItem(context, searchResult, subInfo) } } private fun searchIndexableRaw( private fun searchIndexableItem( context: Context, searchResult: MobileNetworkSettingsSearchResult, subInfo: SubscriptionInfo, ): SearchIndexableRaw { ): SpaSearchIndexableItem { val key = SpaSearchLandingKey.newBuilder() .setFragment( Loading @@ -90,16 +87,16 @@ class MobileNetworkSettingsSearchIndex( .setPreferenceKey(searchResult.key) .putArguments( Settings.EXTRA_SUB_ID, BundleValue.newBuilder().setIntValue(subInfo.subscriptionId).build())) BundleValue.newBuilder().setIntValue(subInfo.subscriptionId).build(), ) ) .build() val simsTitle = context.getString(R.string.provider_network_settings_title) return createSearchIndexableRaw( context = context, spaSearchLandingKey = key, return SpaSearchIndexableItem( searchLandingKey = key, pageTitle = "$simsTitle > ${subInfo.displayName}", itemTitle = searchResult.title, keywords = searchResult.keywords, indexableClass = MobileNetworkSettings::class.java, pageTitle = "$simsTitle > ${subInfo.displayName}", ) } Loading
src/com/android/settings/spa/search/SettingsSpaSearchRepository.kt +14 −29 Original line number Diff line number Diff line Loading @@ -16,42 +16,27 @@ package com.android.settings.spa.search import android.content.Context import com.android.settings.network.telephony.MobileNetworkSettingsSearchIndex import com.android.settingslib.spa.framework.common.SpaEnvironment import com.android.settingslib.spa.framework.common.SpaEnvironmentFactory import com.android.settingslib.spa.search.SpaSearchLanding.SpaSearchLandingKey import com.android.settingslib.search.SearchIndexableData import com.android.settingslib.spa.search.SearchIndexableDataConverter import com.android.settingslib.spa.search.SpaSearchRepository class SettingsSpaSearchRepository(spaEnvironment: SpaEnvironment = SpaEnvironmentFactory.instance) { private val spaSearchRepository = SpaSearchRepository(spaEnvironment) fun getSearchIndexableDataList() = spaSearchRepository.getSearchIndexableDataList( intentAction = SEARCH_LANDING_ACTION, intentTargetClass = SettingsSpaSearchLandingActivity::class.qualifiedName!!, ) + MobileNetworkSettingsSearchIndex().createSearchIndexableData() companion object { fun createSearchIndexableRaw( context: Context, spaSearchLandingKey: SpaSearchLandingKey, itemTitle: String, indexableClass: Class<*>, pageTitle: String, keywords: String? = null, ) = SpaSearchRepository.createSearchIndexableRaw( context = context, spaSearchLandingKey = spaSearchLandingKey, itemTitle = itemTitle, indexableClass = indexableClass, pageTitle = pageTitle, class SettingsSpaSearchRepository() { private val spaSearchRepository = SpaSearchRepository() private val searchIndexableDataConverter = SearchIndexableDataConverter( intentAction = SEARCH_LANDING_ACTION, intentTargetClass = SettingsSpaSearchLandingActivity::class.qualifiedName!!, keywords = keywords, ) fun getSearchIndexableDataList(): List<SearchIndexableData> { val pages = spaSearchRepository.getSearchIndexablePageList() + MobileNetworkSettingsSearchIndex().getSearchIndexablePage() return pages.map(searchIndexableDataConverter::toSearchIndexableData) } companion object { private const val SEARCH_LANDING_ACTION = "android.settings.SPA_SEARCH_LANDING" } }
tests/spa_unit/src/com/android/settings/network/telephony/MobileNetworkSettingsSearchIndexTest.kt +10 −18 Original line number Diff line number Diff line Loading @@ -27,11 +27,9 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import com.android.settings.R import com.android.settings.network.telephony.MobileNetworkSettingsSearchIndex.Companion.isMobileNetworkSettingsSearchable import com.android.settings.network.telephony.MobileNetworkSettingsSearchIndex.MobileNetworkSettingsSearchResult import com.android.settings.spa.search.SettingsSpaSearchLandingActivity import com.android.settingslib.spa.search.SpaSearchLanding.BundleValue import com.android.settingslib.spa.search.SpaSearchLanding.SpaSearchLandingFragment import com.android.settingslib.spa.search.SpaSearchLanding.SpaSearchLandingKey import com.android.settingslib.spa.search.decodeToSpaSearchLandingKey import com.google.common.truth.Truth.assertThat import org.junit.Before import org.junit.Test Loading Loading @@ -116,16 +114,14 @@ class MobileNetworkSettingsSearchIndexTest { } @Test fun createSearchIndexableData() { val searchIndexableData = mobileNetworkSettingsSearchIndex.createSearchIndexableData() assertThat(searchIndexableData.targetClass).isEqualTo(MobileNetworkSettings::class.java) val dynamicRawDataToIndex = searchIndexableData.searchIndexProvider.getDynamicRawDataToIndex(context, true) assertThat(dynamicRawDataToIndex).hasSize(1) val rawData = dynamicRawDataToIndex[0] val key = decodeToSpaSearchLandingKey(rawData.key) assertThat(key) fun getSearchIndexablePage() { val searchIndexablePage = mobileNetworkSettingsSearchIndex.getSearchIndexablePage() assertThat(searchIndexablePage.targetClass).isEqualTo(MobileNetworkSettings::class.java) val items = searchIndexablePage.itemsProvider(context) assertThat(items).hasSize(1) val item = items.single() assertThat(item.searchLandingKey) .isEqualTo( SpaSearchLandingKey.newBuilder() .setFragment( Loading @@ -136,12 +132,8 @@ class MobileNetworkSettingsSearchIndexTest { Settings.EXTRA_SUB_ID, BundleValue.newBuilder().setIntValue(SUB_ID_1).build())) .build()) assertThat(rawData.title).isEqualTo(TITLE) assertThat(rawData.intentAction).isEqualTo("android.settings.SPA_SEARCH_LANDING") assertThat(rawData.intentTargetClass) .isEqualTo(SettingsSpaSearchLandingActivity::class.qualifiedName) assertThat(rawData.className).isEqualTo(MobileNetworkSettings::class.java.name) assertThat(rawData.screenTitle).isEqualTo("SIMs > $SUB_DISPLAY_NAME_1") assertThat(item.pageTitle).isEqualTo("SIMs > $SUB_DISPLAY_NAME_1") assertThat(item.itemTitle).isEqualTo(TITLE) } private companion object { Loading
tests/spa_unit/src/com/android/settings/spa/search/SettingsSpaSearchRepositoryTest.kt +10 −38 Original line number Diff line number Diff line Loading @@ -16,13 +16,10 @@ package com.android.settings.spa.search import android.content.Context import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 import com.android.settingslib.spa.framework.common.SettingsPageProvider import com.android.settingslib.spa.search.SpaSearchLanding.SpaSearchLandingKey import com.android.settingslib.spa.search.SpaSearchLanding.SpaSearchLandingSpaPage import com.android.settingslib.spa.search.decodeToSpaSearchLandingKey import com.android.settings.network.telephony.MobileNetworkSettings import com.android.settings.spa.network.NetworkCellularGroupProvider import com.android.settingslib.search.SearchIndexableData import com.google.common.truth.Truth.assertThat import org.junit.Test import org.junit.runner.RunWith Loading @@ -30,41 +27,16 @@ import org.junit.runner.RunWith @RunWith(AndroidJUnit4::class) class SettingsSpaSearchRepositoryTest { private val context: Context = ApplicationProvider.getApplicationContext() private val repository = SettingsSpaSearchRepository() @Test fun createSearchIndexableRaw() { val spaSearchLandingKey = SpaSearchLandingKey.newBuilder() .setSpaPage(SpaSearchLandingSpaPage.newBuilder().setDestination(PAGE_NAME)) .build() val pageProvider = object : SettingsPageProvider { override val name = PAGE_NAME } fun getSearchIndexableDataList_returnsCorrectList() { val searchIndexableDataList = repository.getSearchIndexableDataList() val searchIndexableRaw = SettingsSpaSearchRepository.createSearchIndexableRaw( context = context, spaSearchLandingKey = spaSearchLandingKey, itemTitle = ITEM_TITLE, indexableClass = pageProvider::class.java, pageTitle = PAGE_TITLE, assertThat(searchIndexableDataList.map(SearchIndexableData::getTargetClass)) .containsExactly( NetworkCellularGroupProvider::class.java, MobileNetworkSettings::class.java, ) assertThat(decodeToSpaSearchLandingKey(searchIndexableRaw.key)) .isEqualTo(spaSearchLandingKey) assertThat(searchIndexableRaw.title).isEqualTo(ITEM_TITLE) assertThat(searchIndexableRaw.className).isEqualTo(pageProvider::class.java.name) assertThat(searchIndexableRaw.screenTitle).isEqualTo(PAGE_TITLE) assertThat(searchIndexableRaw.intentAction).isEqualTo("android.settings.SPA_SEARCH_LANDING") assertThat(searchIndexableRaw.intentTargetClass) .isEqualTo(SettingsSpaSearchLandingActivity::class.qualifiedName) } private companion object { const val PAGE_NAME = "PageName" const val PAGE_TITLE = "Page Title" const val ITEM_TITLE = "Item Title" } }