Check DISALLOW_CONFIG_MOBILE_NETWORKS when search

If disallowed, not show mobile related search results.

Bug: 358238959
Flag: EXEMPT bug fix
Test: manual - search Mobile Settings
Test: atest MobileNetworkSettingsSearchIndexTest
Change-Id: I79b984f41f09dd9612bcd0c9942089756d5d365d
This commit is contained in:
Chaohui Wang
2024-09-20 15:27:57 +08:00
parent d1ced23c7f
commit 73fb290969
9 changed files with 66 additions and 35 deletions

View File

@@ -89,7 +89,7 @@ class MobileNetworkListFragment : DashboardFragment() {
private val simRepositoryFactory: (Context) -> SimRepository = ::SimRepository private val simRepositoryFactory: (Context) -> SimRepository = ::SimRepository
) : BaseSearchIndexProvider(R.xml.network_provider_sims_list) { ) : BaseSearchIndexProvider(R.xml.network_provider_sims_list) {
public override fun isPageSearchEnabled(context: Context): Boolean = public override fun isPageSearchEnabled(context: Context): Boolean =
simRepositoryFactory(context).showMobileNetworkPage() simRepositoryFactory(context).canEnterMobileNetworkPage()
} }
} }
} }

View File

@@ -57,7 +57,7 @@ constructor(
private var isAirplaneModeOn = false private var isAirplaneModeOn = false
override fun getAvailabilityStatus() = override fun getAvailabilityStatus() =
if (SimRepository(mContext).showMobileNetworkPage()) AVAILABLE if (SimRepository(mContext).showMobileNetworkPageEntrance()) AVAILABLE
else CONDITIONALLY_UNAVAILABLE else CONDITIONALLY_UNAVAILABLE
override fun displayPreference(screen: PreferenceScreen) { override fun displayPreference(screen: PreferenceScreen) {

View File

@@ -48,7 +48,7 @@ constructor(
override fun getSummary(): CharSequence { override fun getSummary(): CharSequence {
val summaryResId = val summaryResId =
if (simRepository.showMobileNetworkPage()) { if (simRepository.showMobileNetworkPageEntrance()) {
R.string.network_dashboard_summary_mobile R.string.network_dashboard_summary_mobile
} else { } else {
R.string.network_dashboard_summary_no_mobile R.string.network_dashboard_summary_no_mobile

View File

@@ -21,7 +21,6 @@ import android.provider.Settings
import android.telephony.SubscriptionInfo import android.telephony.SubscriptionInfo
import com.android.settings.R import com.android.settings.R
import com.android.settings.datausage.BillingCyclePreferenceController.Companion.BillingCycleSearchItem import com.android.settings.datausage.BillingCyclePreferenceController.Companion.BillingCycleSearchItem
import com.android.settings.network.SubscriptionUtil
import com.android.settings.network.telephony.CarrierSettingsVersionPreferenceController.Companion.CarrierSettingsVersionSearchItem import com.android.settings.network.telephony.CarrierSettingsVersionPreferenceController.Companion.CarrierSettingsVersionSearchItem
import com.android.settings.network.telephony.DataUsagePreferenceController.Companion.DataUsageSearchItem import com.android.settings.network.telephony.DataUsagePreferenceController.Companion.DataUsageSearchItem
import com.android.settings.network.telephony.MmsMessagePreferenceController.Companion.MmsMessageSearchItem import com.android.settings.network.telephony.MmsMessagePreferenceController.Companion.MmsMessageSearchItem
@@ -36,7 +35,6 @@ import com.android.settings.spa.search.SpaSearchRepository.Companion.createSearc
import com.android.settings.spa.search.SpaSearchRepository.Companion.searchIndexProviderOf import com.android.settings.spa.search.SpaSearchRepository.Companion.searchIndexProviderOf
import com.android.settingslib.search.SearchIndexableData import com.android.settingslib.search.SearchIndexableData
import com.android.settingslib.search.SearchIndexableRaw import com.android.settingslib.search.SearchIndexableRaw
import com.android.settingslib.spaprivileged.framework.common.userManager
import com.android.settingslib.spaprivileged.settingsprovider.settingsGlobalBoolean import com.android.settingslib.spaprivileged.settingsprovider.settingsGlobalBoolean
class MobileNetworkSettingsSearchIndex( class MobileNetworkSettingsSearchIndex(
@@ -109,12 +107,8 @@ class MobileNetworkSettingsSearchIndex(
companion object { companion object {
/** suppress full page if user is not admin */ /** suppress full page if user is not admin */
@JvmStatic @JvmStatic
fun isMobileNetworkSettingsSearchable(context: Context): Boolean { fun isMobileNetworkSettingsSearchable(context: Context): Boolean =
val isAirplaneMode by context.settingsGlobalBoolean(Settings.Global.AIRPLANE_MODE_ON) SimRepository(context).canEnterMobileNetworkPage()
return SubscriptionUtil.isSimHardwareVisible(context) &&
!isAirplaneMode &&
context.userManager.isAdminUser
}
fun createSearchItems(context: Context): List<MobileNetworkSettingsSearchItem> = fun createSearchItems(context: Context): List<MobileNetworkSettingsSearchItem> =
listOf( listOf(

View File

@@ -18,13 +18,24 @@ package com.android.settings.network.telephony
import android.content.Context import android.content.Context
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.os.UserManager
import android.provider.Settings
import com.android.settingslib.spaprivileged.framework.common.userManager import com.android.settingslib.spaprivileged.framework.common.userManager
import com.android.settingslib.spaprivileged.settingsprovider.settingsGlobalBoolean
class SimRepository(context: Context) { class SimRepository(private val context: Context) {
private val packageManager = context.packageManager private val packageManager = context.packageManager
private val userManager = context.userManager private val userManager = context.userManager
/** Gets whether we show mobile network settings page to the current user. */ /** Gets whether show mobile network settings page entrance to the current user. */
fun showMobileNetworkPage(): Boolean = fun showMobileNetworkPageEntrance(): Boolean =
packageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY) && userManager.isAdminUser packageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY) && userManager.isAdminUser
/** Gets whether current user can enter mobile network settings page. */
fun canEnterMobileNetworkPage(): Boolean {
val isAirplaneMode by context.settingsGlobalBoolean(Settings.Global.AIRPLANE_MODE_ON)
return showMobileNetworkPageEntrance() &&
!isAirplaneMode &&
!userManager.hasUserRestriction(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS)
}
} }

View File

@@ -212,7 +212,7 @@ open class NetworkCellularGroupProvider : SettingsPageProvider, SearchablePage {
const val fileName = "NetworkCellularGroupProvider" const val fileName = "NetworkCellularGroupProvider"
private fun isPageSearchable(context: Context) = private fun isPageSearchable(context: Context) =
Flags.isDualSimOnboardingEnabled() && SimRepository(context).showMobileNetworkPage() Flags.isDualSimOnboardingEnabled() && SimRepository(context).canEnterMobileNetworkPage()
} }
} }

View File

@@ -36,7 +36,7 @@ class MobileNetworkListFragmentTest {
@Test @Test
fun isPageSearchEnabled_showMobileNetworkPage_returnTrue() { fun isPageSearchEnabled_showMobileNetworkPage_returnTrue() {
mockSimRepository.stub { on { showMobileNetworkPage() } doReturn true } mockSimRepository.stub { on { canEnterMobileNetworkPage() } doReturn true }
val isEnabled = SearchIndexProvider { mockSimRepository }.isPageSearchEnabled(context) val isEnabled = SearchIndexProvider { mockSimRepository }.isPageSearchEnabled(context)
@@ -45,7 +45,7 @@ class MobileNetworkListFragmentTest {
@Test @Test
fun isPageSearchEnabled_hideMobileNetworkPage_returnFalse() { fun isPageSearchEnabled_hideMobileNetworkPage_returnFalse() {
mockSimRepository.stub { on { showMobileNetworkPage() } doReturn false } mockSimRepository.stub { on { canEnterMobileNetworkPage() } doReturn false }
val isEnabled = SearchIndexProvider { mockSimRepository }.isPageSearchEnabled(context) val isEnabled = SearchIndexProvider { mockSimRepository }.isPageSearchEnabled(context)

View File

@@ -71,7 +71,7 @@ class TopLevelNetworkEntryPreferenceControllerTest {
@Test @Test
fun getSummary_hasMobile_shouldReturnMobileSummary() { fun getSummary_hasMobile_shouldReturnMobileSummary() {
mockSimRepository.stub { on { showMobileNetworkPage() } doReturn true } mockSimRepository.stub { on { showMobileNetworkPageEntrance() } doReturn true }
val summary = controller.summary val summary = controller.summary
@@ -84,7 +84,7 @@ class TopLevelNetworkEntryPreferenceControllerTest {
@Test @Test
fun getSummary_noMobile_shouldReturnNoMobileSummary() { fun getSummary_noMobile_shouldReturnNoMobileSummary() {
mockSimRepository.stub { on { showMobileNetworkPage() } doReturn false } mockSimRepository.stub { on { showMobileNetworkPageEntrance() } doReturn false }
val summary = controller.summary val summary = controller.summary

View File

@@ -37,50 +37,76 @@ class SimRepositoryTest {
private val mockPackageManager = mock<PackageManager>() private val mockPackageManager = mock<PackageManager>()
private val context: Context = spy(ApplicationProvider.getApplicationContext()) { private val context: Context =
on { userManager } doReturn mockUserManager spy(ApplicationProvider.getApplicationContext()) {
on { packageManager } doReturn mockPackageManager on { userManager } doReturn mockUserManager
} on { packageManager } doReturn mockPackageManager
}
private val repository = SimRepository(context) private val repository = SimRepository(context)
@Test @Test
fun showMobileNetworkPage_adminUserAndHasTelephony_returnTrue() { fun showMobileNetworkPageEntrance_adminUserAndHasTelephony_returnTrue() {
mockUserManager.stub { mockUserManager.stub { on { isAdminUser } doReturn true }
on { isAdminUser } doReturn true
}
mockPackageManager.stub { mockPackageManager.stub {
on { hasSystemFeature(PackageManager.FEATURE_TELEPHONY) } doReturn true on { hasSystemFeature(PackageManager.FEATURE_TELEPHONY) } doReturn true
} }
val showMobileNetworkPage = repository.showMobileNetworkPage() val showMobileNetworkPage = repository.showMobileNetworkPageEntrance()
assertThat(showMobileNetworkPage).isTrue() assertThat(showMobileNetworkPage).isTrue()
} }
@Test @Test
fun showMobileNetworkPage_notAdminUser_returnFalse() { fun showMobileNetworkPageEntrance_notAdminUser_returnFalse() {
mockUserManager.stub { on { isAdminUser } doReturn false }
mockPackageManager.stub {
on { hasSystemFeature(PackageManager.FEATURE_TELEPHONY) } doReturn true
}
val showMobileNetworkPage = repository.showMobileNetworkPageEntrance()
assertThat(showMobileNetworkPage).isFalse()
}
@Test
fun showMobileNetworkPageEntrance_noTelephony_returnFalse() {
mockUserManager.stub { on { isAdminUser } doReturn true }
mockPackageManager.stub {
on { hasSystemFeature(PackageManager.FEATURE_TELEPHONY) } doReturn false
}
val showMobileNetworkPage = repository.showMobileNetworkPageEntrance()
assertThat(showMobileNetworkPage).isFalse()
}
@Test
fun canEnterMobileNetworkPage_allowConfigMobileNetwork_returnTrue() {
mockUserManager.stub { mockUserManager.stub {
on { isAdminUser } doReturn false on { isAdminUser } doReturn true
on { hasUserRestriction(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS) } doReturn false
} }
mockPackageManager.stub { mockPackageManager.stub {
on { hasSystemFeature(PackageManager.FEATURE_TELEPHONY) } doReturn true on { hasSystemFeature(PackageManager.FEATURE_TELEPHONY) } doReturn true
} }
val showMobileNetworkPage = repository.showMobileNetworkPage() val showMobileNetworkPage = repository.canEnterMobileNetworkPage()
assertThat(showMobileNetworkPage).isFalse() assertThat(showMobileNetworkPage).isTrue()
} }
@Test fun showMobileNetworkPage_noTelephony_returnFalse() { @Test
fun canEnterMobileNetworkPage_disallowConfigMobileNetwork_returnFalse() {
mockUserManager.stub { mockUserManager.stub {
on { isAdminUser } doReturn true on { isAdminUser } doReturn true
on { hasUserRestriction(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS) } doReturn true
} }
mockPackageManager.stub { mockPackageManager.stub {
on { hasSystemFeature(PackageManager.FEATURE_TELEPHONY) } doReturn false on { hasSystemFeature(PackageManager.FEATURE_TELEPHONY) } doReturn true
} }
val showMobileNetworkPage = repository.showMobileNetworkPage() val showMobileNetworkPage = repository.canEnterMobileNetworkPage()
assertThat(showMobileNetworkPage).isFalse() assertThat(showMobileNetworkPage).isFalse()
} }