Refactor MobileNetworkSettingsSearchIndex
To support the case that MobileNetworkSettingsSearchItem could have different key or title. Bug: 358238959 Flag: EXEMPT refactor Test: manual - search vo5g Test: atest MobileNetworkSettingsSearchIndexTest Test: atest MmsMessagePreferenceControllerTest Change-Id: I18afc8a347566d50dd7969d2c906d0ae64be8a80
This commit is contained in:
@@ -20,11 +20,13 @@ import android.content.Context
|
|||||||
import android.telephony.SubscriptionManager
|
import android.telephony.SubscriptionManager
|
||||||
import android.telephony.TelephonyManager
|
import android.telephony.TelephonyManager
|
||||||
import android.telephony.data.ApnSetting
|
import android.telephony.data.ApnSetting
|
||||||
|
import androidx.annotation.VisibleForTesting
|
||||||
import androidx.lifecycle.LifecycleOwner
|
import androidx.lifecycle.LifecycleOwner
|
||||||
import androidx.preference.PreferenceScreen
|
import androidx.preference.PreferenceScreen
|
||||||
import com.android.settings.R
|
import com.android.settings.R
|
||||||
import com.android.settings.Settings.MobileNetworkActivity.EXTRA_MMS_MESSAGE
|
import com.android.settings.Settings.MobileNetworkActivity.EXTRA_MMS_MESSAGE
|
||||||
import com.android.settings.core.TogglePreferenceController
|
import com.android.settings.core.TogglePreferenceController
|
||||||
|
import com.android.settings.network.telephony.MobileNetworkSettingsSearchIndex.MobileNetworkSettingsSearchResult
|
||||||
import com.android.settings.network.telephony.MobileNetworkSettingsSearchIndex.MobileNetworkSettingsSearchItem
|
import com.android.settings.network.telephony.MobileNetworkSettingsSearchIndex.MobileNetworkSettingsSearchItem
|
||||||
import com.android.settingslib.spa.framework.util.collectLatestWithLifecycle
|
import com.android.settingslib.spa.framework.util.collectLatestWithLifecycle
|
||||||
import kotlinx.coroutines.flow.combine
|
import kotlinx.coroutines.flow.combine
|
||||||
@@ -109,7 +111,7 @@ constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
class MmsMessageSearchItem(
|
class MmsMessageSearchItem(
|
||||||
context: Context,
|
private val context: Context,
|
||||||
private val getDefaultDataSubId: () -> Int = {
|
private val getDefaultDataSubId: () -> Int = {
|
||||||
SubscriptionManager.getDefaultDataSubscriptionId()
|
SubscriptionManager.getDefaultDataSubscriptionId()
|
||||||
},
|
},
|
||||||
@@ -117,12 +119,18 @@ constructor(
|
|||||||
private var telephonyManager: TelephonyManager =
|
private var telephonyManager: TelephonyManager =
|
||||||
context.getSystemService(TelephonyManager::class.java)!!
|
context.getSystemService(TelephonyManager::class.java)!!
|
||||||
|
|
||||||
override val key: String = EXTRA_MMS_MESSAGE
|
@VisibleForTesting
|
||||||
override val title: String = context.getString(R.string.mms_message_title)
|
fun isAvailable(subId: Int): Boolean =
|
||||||
|
|
||||||
override fun isAvailable(subId: Int): Boolean =
|
|
||||||
getAvailabilityStatus(
|
getAvailabilityStatus(
|
||||||
telephonyManager.createForSubscriptionId(subId), subId, getDefaultDataSubId)
|
telephonyManager.createForSubscriptionId(subId), subId, getDefaultDataSubId)
|
||||||
|
|
||||||
|
override fun getSearchResult(subId: Int): MobileNetworkSettingsSearchResult? {
|
||||||
|
if (!isAvailable(subId)) return null
|
||||||
|
return MobileNetworkSettingsSearchResult(
|
||||||
|
key = EXTRA_MMS_MESSAGE,
|
||||||
|
title = context.getString(R.string.mms_message_title),
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,15 +39,14 @@ class MobileNetworkSettingsSearchIndex(
|
|||||||
private val searchItemsFactory: (context: Context) -> List<MobileNetworkSettingsSearchItem> =
|
private val searchItemsFactory: (context: Context) -> List<MobileNetworkSettingsSearchItem> =
|
||||||
::createSearchItems,
|
::createSearchItems,
|
||||||
) {
|
) {
|
||||||
|
data class MobileNetworkSettingsSearchResult(
|
||||||
|
val key: String,
|
||||||
|
val title: String,
|
||||||
|
val keywords: String? = null,
|
||||||
|
)
|
||||||
|
|
||||||
interface MobileNetworkSettingsSearchItem {
|
interface MobileNetworkSettingsSearchItem {
|
||||||
val key: String
|
fun getSearchResult(subId: Int): MobileNetworkSettingsSearchResult?
|
||||||
|
|
||||||
val title: String
|
|
||||||
|
|
||||||
val keywords: String?
|
|
||||||
get() = null
|
|
||||||
|
|
||||||
fun isAvailable(subId: Int): Boolean
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun createSearchIndexableData(): SearchIndexableData {
|
fun createSearchIndexableData(): SearchIndexableData {
|
||||||
@@ -71,13 +70,15 @@ class MobileNetworkSettingsSearchIndex(
|
|||||||
searchItem: MobileNetworkSettingsSearchItem,
|
searchItem: MobileNetworkSettingsSearchItem,
|
||||||
subInfos: List<SubscriptionInfo>
|
subInfos: List<SubscriptionInfo>
|
||||||
): List<SearchIndexableRaw> =
|
): List<SearchIndexableRaw> =
|
||||||
subInfos
|
subInfos.mapNotNull { subInfo ->
|
||||||
.filter { searchItem.isAvailable(it.subscriptionId) }
|
searchItem.getSearchResult(subInfo.subscriptionId)?.let { searchResult ->
|
||||||
.map { subInfo -> searchIndexableRaw(context, searchItem, subInfo) }
|
searchIndexableRaw(context, searchResult, subInfo)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun searchIndexableRaw(
|
private fun searchIndexableRaw(
|
||||||
context: Context,
|
context: Context,
|
||||||
searchItem: MobileNetworkSettingsSearchItem,
|
searchResult: MobileNetworkSettingsSearchResult,
|
||||||
subInfo: SubscriptionInfo,
|
subInfo: SubscriptionInfo,
|
||||||
): SearchIndexableRaw {
|
): SearchIndexableRaw {
|
||||||
val key =
|
val key =
|
||||||
@@ -85,7 +86,7 @@ class MobileNetworkSettingsSearchIndex(
|
|||||||
.setFragment(
|
.setFragment(
|
||||||
SpaSearchLandingFragment.newBuilder()
|
SpaSearchLandingFragment.newBuilder()
|
||||||
.setFragmentName(MobileNetworkSettings::class.java.name)
|
.setFragmentName(MobileNetworkSettings::class.java.name)
|
||||||
.setPreferenceKey(searchItem.key)
|
.setPreferenceKey(searchResult.key)
|
||||||
.putArguments(
|
.putArguments(
|
||||||
Settings.EXTRA_SUB_ID,
|
Settings.EXTRA_SUB_ID,
|
||||||
BundleValue.newBuilder().setIntValue(subInfo.subscriptionId).build()))
|
BundleValue.newBuilder().setIntValue(subInfo.subscriptionId).build()))
|
||||||
@@ -94,8 +95,8 @@ class MobileNetworkSettingsSearchIndex(
|
|||||||
return createSearchIndexableRaw(
|
return createSearchIndexableRaw(
|
||||||
context = context,
|
context = context,
|
||||||
spaSearchLandingKey = key,
|
spaSearchLandingKey = key,
|
||||||
itemTitle = searchItem.title,
|
itemTitle = searchResult.title,
|
||||||
keywords = searchItem.keywords,
|
keywords = searchResult.keywords,
|
||||||
indexableClass = MobileNetworkSettings::class.java,
|
indexableClass = MobileNetworkSettings::class.java,
|
||||||
pageTitle = "$simsTitle > ${subInfo.displayName}",
|
pageTitle = "$simsTitle > ${subInfo.displayName}",
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import androidx.compose.runtime.rememberCoroutineScope
|
|||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||||
import com.android.settings.R
|
import com.android.settings.R
|
||||||
|
import com.android.settings.network.telephony.MobileNetworkSettingsSearchIndex.MobileNetworkSettingsSearchResult
|
||||||
import com.android.settings.network.telephony.MobileNetworkSettingsSearchIndex.MobileNetworkSettingsSearchItem
|
import com.android.settings.network.telephony.MobileNetworkSettingsSearchIndex.MobileNetworkSettingsSearchItem
|
||||||
import com.android.settings.spa.preference.ComposePreferenceController
|
import com.android.settings.spa.preference.ComposePreferenceController
|
||||||
import com.android.settingslib.spa.widget.preference.SwitchPreference
|
import com.android.settingslib.spa.widget.preference.SwitchPreference
|
||||||
@@ -79,12 +80,17 @@ class NrAdvancedCallingPreferenceController @JvmOverloads constructor(
|
|||||||
companion object {
|
companion object {
|
||||||
class NrAdvancedCallingSearchItem(private val context: Context) :
|
class NrAdvancedCallingSearchItem(private val context: Context) :
|
||||||
MobileNetworkSettingsSearchItem {
|
MobileNetworkSettingsSearchItem {
|
||||||
override val key = "nr_advanced_calling"
|
|
||||||
override val title: String = context.getString(R.string.nr_advanced_calling_title)
|
|
||||||
override val keywords: String = context.getString(R.string.keywords_nr_advanced_calling)
|
|
||||||
|
|
||||||
override fun isAvailable(subId: Int): Boolean =
|
fun isAvailable(subId: Int): Boolean = VoNrRepository(context, subId).isVoNrAvailable()
|
||||||
VoNrRepository(context, subId).isVoNrAvailable()
|
|
||||||
|
override fun getSearchResult(subId: Int): MobileNetworkSettingsSearchResult? {
|
||||||
|
if (!isAvailable(subId)) return null
|
||||||
|
return MobileNetworkSettingsSearchResult(
|
||||||
|
key = "nr_advanced_calling",
|
||||||
|
title = context.getString(R.string.nr_advanced_calling_title),
|
||||||
|
keywords = context.getString(R.string.keywords_nr_advanced_calling),
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ import androidx.compose.ui.res.stringResource
|
|||||||
import androidx.fragment.app.FragmentManager
|
import androidx.fragment.app.FragmentManager
|
||||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||||
import com.android.settings.R
|
import com.android.settings.R
|
||||||
|
import com.android.settings.network.telephony.MobileNetworkSettingsSearchIndex.MobileNetworkSettingsSearchResult
|
||||||
import com.android.settings.network.telephony.MobileNetworkSettingsSearchIndex.MobileNetworkSettingsSearchItem
|
import com.android.settings.network.telephony.MobileNetworkSettingsSearchIndex.MobileNetworkSettingsSearchItem
|
||||||
import com.android.settings.spa.preference.ComposePreferenceController
|
import com.android.settings.spa.preference.ComposePreferenceController
|
||||||
import com.android.settingslib.spa.widget.preference.SwitchPreferenceModel
|
import com.android.settingslib.spa.widget.preference.SwitchPreferenceModel
|
||||||
@@ -98,16 +99,21 @@ constructor(
|
|||||||
companion object {
|
companion object {
|
||||||
private const val DIALOG_TAG = "MobileDataDialog"
|
private const val DIALOG_TAG = "MobileDataDialog"
|
||||||
|
|
||||||
class RoamingSearchItem(context: Context) : MobileNetworkSettingsSearchItem {
|
class RoamingSearchItem(private val context: Context) : MobileNetworkSettingsSearchItem {
|
||||||
override val key = "button_roaming_key"
|
|
||||||
override val title: String = context.getString(R.string.roaming)
|
|
||||||
|
|
||||||
private val carrierConfigRepository = CarrierConfigRepository(context)
|
private val carrierConfigRepository = CarrierConfigRepository(context)
|
||||||
|
|
||||||
override fun isAvailable(subId: Int): Boolean =
|
fun isAvailable(subId: Int): Boolean =
|
||||||
SubscriptionManager.isValidSubscriptionId(subId) &&
|
SubscriptionManager.isValidSubscriptionId(subId) &&
|
||||||
!carrierConfigRepository.getBoolean(
|
!carrierConfigRepository.getBoolean(
|
||||||
subId, CarrierConfigManager.KEY_FORCE_HOME_NETWORK_BOOL)
|
subId, CarrierConfigManager.KEY_FORCE_HOME_NETWORK_BOOL)
|
||||||
|
|
||||||
|
override fun getSearchResult(subId: Int): MobileNetworkSettingsSearchResult? {
|
||||||
|
if (!isAvailable(subId)) return null
|
||||||
|
return MobileNetworkSettingsSearchResult(
|
||||||
|
key = "button_roaming_key",
|
||||||
|
title = context.getString(R.string.roaming),
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ import androidx.preference.Preference
|
|||||||
import androidx.preference.PreferenceScreen
|
import androidx.preference.PreferenceScreen
|
||||||
import com.android.settings.R
|
import com.android.settings.R
|
||||||
import com.android.settings.core.BasePreferenceController
|
import com.android.settings.core.BasePreferenceController
|
||||||
|
import com.android.settings.network.telephony.MobileNetworkSettingsSearchIndex.MobileNetworkSettingsSearchResult
|
||||||
import com.android.settings.network.telephony.MobileNetworkSettingsSearchIndex.MobileNetworkSettingsSearchItem
|
import com.android.settings.network.telephony.MobileNetworkSettingsSearchIndex.MobileNetworkSettingsSearchItem
|
||||||
import com.android.settings.network.telephony.wificalling.WifiCallingRepository
|
import com.android.settings.network.telephony.wificalling.WifiCallingRepository
|
||||||
import com.android.settingslib.spa.framework.util.collectLatestWithLifecycle
|
import com.android.settingslib.spa.framework.util.collectLatestWithLifecycle
|
||||||
@@ -132,12 +133,17 @@ open class WifiCallingPreferenceController @JvmOverloads constructor(
|
|||||||
class WifiCallingSearchItem(
|
class WifiCallingSearchItem(
|
||||||
private val context: Context,
|
private val context: Context,
|
||||||
) : MobileNetworkSettingsSearchItem {
|
) : MobileNetworkSettingsSearchItem {
|
||||||
override val key: String = "wifi_calling"
|
private fun isAvailable(subId: Int): Boolean = runBlocking {
|
||||||
override val title: String = context.getString(R.string.wifi_calling_settings_title)
|
|
||||||
|
|
||||||
override fun isAvailable(subId: Int): Boolean = runBlocking {
|
|
||||||
WifiCallingRepository(context, subId).wifiCallingReadyFlow().first()
|
WifiCallingRepository(context, subId).wifiCallingReadyFlow().first()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun getSearchResult(subId: Int): MobileNetworkSettingsSearchResult? {
|
||||||
|
if (!isAvailable(subId)) return null
|
||||||
|
return MobileNetworkSettingsSearchResult(
|
||||||
|
key = "wifi_calling",
|
||||||
|
title = context.getString(R.string.wifi_calling_settings_title),
|
||||||
|
)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import androidx.test.core.app.ApplicationProvider
|
|||||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||||
import com.android.settings.R
|
import com.android.settings.R
|
||||||
import com.android.settings.network.telephony.MobileNetworkSettingsSearchIndex.Companion.isMobileNetworkSettingsSearchable
|
import com.android.settings.network.telephony.MobileNetworkSettingsSearchIndex.Companion.isMobileNetworkSettingsSearchable
|
||||||
|
import com.android.settings.network.telephony.MobileNetworkSettingsSearchIndex.MobileNetworkSettingsSearchResult
|
||||||
import com.android.settings.spa.SpaSearchLanding.BundleValue
|
import com.android.settings.spa.SpaSearchLanding.BundleValue
|
||||||
import com.android.settings.spa.SpaSearchLanding.SpaSearchLandingFragment
|
import com.android.settings.spa.SpaSearchLanding.SpaSearchLandingFragment
|
||||||
import com.android.settings.spa.SpaSearchLanding.SpaSearchLandingKey
|
import com.android.settings.spa.SpaSearchLanding.SpaSearchLandingKey
|
||||||
@@ -62,10 +63,12 @@ class MobileNetworkSettingsSearchIndexTest {
|
|||||||
private val mobileNetworkSettingsSearchIndex = MobileNetworkSettingsSearchIndex {
|
private val mobileNetworkSettingsSearchIndex = MobileNetworkSettingsSearchIndex {
|
||||||
listOf(
|
listOf(
|
||||||
object : MobileNetworkSettingsSearchIndex.MobileNetworkSettingsSearchItem {
|
object : MobileNetworkSettingsSearchIndex.MobileNetworkSettingsSearchItem {
|
||||||
override val key = KEY
|
override fun getSearchResult(subId: Int): MobileNetworkSettingsSearchResult? =
|
||||||
override val title = TITLE
|
if (subId == SUB_ID_1) {
|
||||||
|
MobileNetworkSettingsSearchResult(key = KEY, title = TITLE)
|
||||||
override fun isAvailable(subId: Int) = subId == SUB_ID_1
|
} else {
|
||||||
|
null
|
||||||
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user