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

Commit cecbd717 authored by Chaohui Wang's avatar Chaohui Wang Committed by Android (Google) Code Review
Browse files

Merge changes from topics "Spa-search", "Spa-search-converter" into main

* changes:
  Create Spa search converters
  Create Spa-search lib
parents cee18765 cded61d1
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -114,6 +114,7 @@ android_library {
        "keyboard_flags_lib",
        "com_android_systemui_flags_lib",
        "settings_connectivity_flags_lib",
        "Spa-search",

        // app function dependencies
        "androidx.appsearch_appsearch",
+1 −1
Original line number Diff line number Diff line
@@ -5524,7 +5524,7 @@
        <activity android:name=".spa.SpaAppBridgeActivity" android:exported="false"/>

        <activity
            android:name=".spa.search.SpaSearchLandingActivity"
            android:name=".spa.search.SettingsSpaSearchLandingActivity"
            android:exported="true">
            <intent-filter android:priority="1">
                <action android:name="android.settings.SPA_SEARCH_LANDING" />

protos/spa_search_landing.proto

deleted100644 → 0
+0 −34
Original line number Diff line number Diff line
syntax = "proto2";

package com.android.settings.spa;

message SpaSearchLandingKey {
  oneof page {
    SpaSearchLandingSpaPage spa_page = 1;
    SpaSearchLandingFragment fragment = 2;
  }
}

message SpaSearchLandingSpaPage {
  /** The destination of SPA page. */
  optional string destination = 1;
}

message SpaSearchLandingFragment {
  /** The fragment class name. */
  optional string fragment_name = 1;

  /** The key of the preference to highlight the item. */
  optional string preference_key = 2;

  /** The arguments passed to the page. */
  map<string, BundleValue> arguments = 3;
}

/** A value in an Android Bundle. */
message BundleValue {
  oneof value {
    /** A 32-bit signed integer value. */
    int32 int_value = 1;
  }
}
+23 −27
Original line number Diff line number Diff line
@@ -28,18 +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.SpaSearchLanding.BundleValue
import com.android.settings.spa.SpaSearchLanding.SpaSearchLandingFragment
import com.android.settings.spa.SpaSearchLanding.SpaSearchLandingKey
import com.android.settings.spa.search.SpaSearchRepository.Companion.createSearchIndexableRaw
import com.android.settings.spa.search.SpaSearchRepository.Companion.searchIndexProviderOf
import com.android.settingslib.search.SearchIndexableData
import com.android.settingslib.search.SearchIndexableRaw
import com.android.settingslib.spaprivileged.settingsprovider.settingsGlobalBoolean
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

class MobileNetworkSettingsSearchIndex(
    private val searchItemsFactory: (context: Context) -> List<MobileNetworkSettingsSearchItem> =
        ::createSearchItems,
        ::createSearchItems
) {
    data class MobileNetworkSettingsSearchResult(
        val key: String,
@@ -51,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(
@@ -91,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}",
        )
    }

+3 −3
Original line number Diff line number Diff line
@@ -22,15 +22,15 @@ import android.content.Intent
import android.net.Uri
import android.provider.Settings
import com.android.settings.search.SearchIndexableResourcesFactory.createSearchIndexableResources
import com.android.settings.spa.search.SpaSearchRepository
import com.android.settings.spa.search.SettingsSpaSearchRepository
import com.android.settingslib.search.SearchIndexableResources

/** FeatureProvider for the refactored search code. */
open class SearchFeatureProviderImpl : SearchFeatureProvider {
    private val lazySearchIndexableResources by lazy {
        createSearchIndexableResources().apply {
            for (searchIndexableData in SpaSearchRepository().getSearchIndexableDataList()) {
                addIndex(searchIndexableData)
            for (indexableData in SettingsSpaSearchRepository().getSearchIndexableDataList()) {
                addIndex(indexableData)
            }
        }
    }
Loading