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

Commit c1973ada authored by Chaohui Wang's avatar Chaohui Wang
Browse files

Revert^2 "Create Spa search converters"

0c60c64c

Change-Id: Id8a01143295e95d6e93ce3a983177d2c440d919e
parent 5bf21dc0
Loading
Loading
Loading
Loading
+20 −23
Original line number Diff line number Diff line
@@ -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,
@@ -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(
@@ -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}",
        )
    }

+14 −29
Original line number Diff line number Diff line
@@ -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"
    }
}
+10 −18
Original line number Diff line number Diff line
@@ -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
@@ -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(
@@ -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 {
+10 −38
Original line number Diff line number Diff line
@@ -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
@@ -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"
    }
}