diff --git a/src/com/android/settings/network/MobileNetworkListFragment.kt b/src/com/android/settings/network/MobileNetworkListFragment.kt index d110779b36d..3118088c6c3 100644 --- a/src/com/android/settings/network/MobileNetworkListFragment.kt +++ b/src/com/android/settings/network/MobileNetworkListFragment.kt @@ -89,7 +89,7 @@ class MobileNetworkListFragment : DashboardFragment() { private val simRepositoryFactory: (Context) -> SimRepository = ::SimRepository ) : BaseSearchIndexProvider(R.xml.network_provider_sims_list) { public override fun isPageSearchEnabled(context: Context): Boolean = - simRepositoryFactory(context).showMobileNetworkPage() + simRepositoryFactory(context).canEnterMobileNetworkPage() } } } diff --git a/src/com/android/settings/network/MobileNetworkSummaryController.kt b/src/com/android/settings/network/MobileNetworkSummaryController.kt index 5980bbd7d05..8cf9bec283e 100644 --- a/src/com/android/settings/network/MobileNetworkSummaryController.kt +++ b/src/com/android/settings/network/MobileNetworkSummaryController.kt @@ -57,7 +57,7 @@ constructor( private var isAirplaneModeOn = false override fun getAvailabilityStatus() = - if (SimRepository(mContext).showMobileNetworkPage()) AVAILABLE + if (SimRepository(mContext).showMobileNetworkPageEntrance()) AVAILABLE else CONDITIONALLY_UNAVAILABLE override fun displayPreference(screen: PreferenceScreen) { diff --git a/src/com/android/settings/network/TopLevelNetworkEntryPreferenceController.kt b/src/com/android/settings/network/TopLevelNetworkEntryPreferenceController.kt index 1722f6ae6b9..11698a6699c 100644 --- a/src/com/android/settings/network/TopLevelNetworkEntryPreferenceController.kt +++ b/src/com/android/settings/network/TopLevelNetworkEntryPreferenceController.kt @@ -48,7 +48,7 @@ constructor( override fun getSummary(): CharSequence { val summaryResId = - if (simRepository.showMobileNetworkPage()) { + if (simRepository.showMobileNetworkPageEntrance()) { R.string.network_dashboard_summary_mobile } else { R.string.network_dashboard_summary_no_mobile diff --git a/src/com/android/settings/network/telephony/MobileNetworkSettingsSearchIndex.kt b/src/com/android/settings/network/telephony/MobileNetworkSettingsSearchIndex.kt index 83e3a31ff3f..f850e1d9b4b 100644 --- a/src/com/android/settings/network/telephony/MobileNetworkSettingsSearchIndex.kt +++ b/src/com/android/settings/network/telephony/MobileNetworkSettingsSearchIndex.kt @@ -21,7 +21,6 @@ import android.provider.Settings import android.telephony.SubscriptionInfo import com.android.settings.R 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.DataUsagePreferenceController.Companion.DataUsageSearchItem 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.settingslib.search.SearchIndexableData import com.android.settingslib.search.SearchIndexableRaw -import com.android.settingslib.spaprivileged.framework.common.userManager import com.android.settingslib.spaprivileged.settingsprovider.settingsGlobalBoolean class MobileNetworkSettingsSearchIndex( @@ -109,12 +107,8 @@ class MobileNetworkSettingsSearchIndex( companion object { /** suppress full page if user is not admin */ @JvmStatic - fun isMobileNetworkSettingsSearchable(context: Context): Boolean { - val isAirplaneMode by context.settingsGlobalBoolean(Settings.Global.AIRPLANE_MODE_ON) - return SubscriptionUtil.isSimHardwareVisible(context) && - !isAirplaneMode && - context.userManager.isAdminUser - } + fun isMobileNetworkSettingsSearchable(context: Context): Boolean = + SimRepository(context).canEnterMobileNetworkPage() fun createSearchItems(context: Context): List = listOf( diff --git a/src/com/android/settings/network/telephony/SimRepository.kt b/src/com/android/settings/network/telephony/SimRepository.kt index ed3c8aa303c..baff5cbe2a3 100644 --- a/src/com/android/settings/network/telephony/SimRepository.kt +++ b/src/com/android/settings/network/telephony/SimRepository.kt @@ -18,13 +18,24 @@ package com.android.settings.network.telephony import android.content.Context 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.settingsprovider.settingsGlobalBoolean -class SimRepository(context: Context) { +class SimRepository(private val context: Context) { private val packageManager = context.packageManager private val userManager = context.userManager - /** Gets whether we show mobile network settings page to the current user. */ - fun showMobileNetworkPage(): Boolean = + /** Gets whether show mobile network settings page entrance to the current user. */ + fun showMobileNetworkPageEntrance(): Boolean = 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) + } } diff --git a/src/com/android/settings/spa/network/NetworkCellularGroupProvider.kt b/src/com/android/settings/spa/network/NetworkCellularGroupProvider.kt index d736fe5224a..f60ba81fc4c 100644 --- a/src/com/android/settings/spa/network/NetworkCellularGroupProvider.kt +++ b/src/com/android/settings/spa/network/NetworkCellularGroupProvider.kt @@ -212,7 +212,7 @@ open class NetworkCellularGroupProvider : SettingsPageProvider, SearchablePage { const val fileName = "NetworkCellularGroupProvider" private fun isPageSearchable(context: Context) = - Flags.isDualSimOnboardingEnabled() && SimRepository(context).showMobileNetworkPage() + Flags.isDualSimOnboardingEnabled() && SimRepository(context).canEnterMobileNetworkPage() } } diff --git a/tests/spa_unit/src/com/android/settings/network/MobileNetworkListFragmentTest.kt b/tests/spa_unit/src/com/android/settings/network/MobileNetworkListFragmentTest.kt index 4bb5f2f803f..226f14f1dd2 100644 --- a/tests/spa_unit/src/com/android/settings/network/MobileNetworkListFragmentTest.kt +++ b/tests/spa_unit/src/com/android/settings/network/MobileNetworkListFragmentTest.kt @@ -36,7 +36,7 @@ class MobileNetworkListFragmentTest { @Test fun isPageSearchEnabled_showMobileNetworkPage_returnTrue() { - mockSimRepository.stub { on { showMobileNetworkPage() } doReturn true } + mockSimRepository.stub { on { canEnterMobileNetworkPage() } doReturn true } val isEnabled = SearchIndexProvider { mockSimRepository }.isPageSearchEnabled(context) @@ -45,7 +45,7 @@ class MobileNetworkListFragmentTest { @Test fun isPageSearchEnabled_hideMobileNetworkPage_returnFalse() { - mockSimRepository.stub { on { showMobileNetworkPage() } doReturn false } + mockSimRepository.stub { on { canEnterMobileNetworkPage() } doReturn false } val isEnabled = SearchIndexProvider { mockSimRepository }.isPageSearchEnabled(context) diff --git a/tests/spa_unit/src/com/android/settings/network/TopLevelNetworkEntryPreferenceControllerTest.kt b/tests/spa_unit/src/com/android/settings/network/TopLevelNetworkEntryPreferenceControllerTest.kt index 27c960282dc..78d2941ae89 100644 --- a/tests/spa_unit/src/com/android/settings/network/TopLevelNetworkEntryPreferenceControllerTest.kt +++ b/tests/spa_unit/src/com/android/settings/network/TopLevelNetworkEntryPreferenceControllerTest.kt @@ -71,7 +71,7 @@ class TopLevelNetworkEntryPreferenceControllerTest { @Test fun getSummary_hasMobile_shouldReturnMobileSummary() { - mockSimRepository.stub { on { showMobileNetworkPage() } doReturn true } + mockSimRepository.stub { on { showMobileNetworkPageEntrance() } doReturn true } val summary = controller.summary @@ -84,7 +84,7 @@ class TopLevelNetworkEntryPreferenceControllerTest { @Test fun getSummary_noMobile_shouldReturnNoMobileSummary() { - mockSimRepository.stub { on { showMobileNetworkPage() } doReturn false } + mockSimRepository.stub { on { showMobileNetworkPageEntrance() } doReturn false } val summary = controller.summary diff --git a/tests/spa_unit/src/com/android/settings/network/telephony/SimRepositoryTest.kt b/tests/spa_unit/src/com/android/settings/network/telephony/SimRepositoryTest.kt index bbcac086a10..e80cc2f8704 100644 --- a/tests/spa_unit/src/com/android/settings/network/telephony/SimRepositoryTest.kt +++ b/tests/spa_unit/src/com/android/settings/network/telephony/SimRepositoryTest.kt @@ -37,50 +37,76 @@ class SimRepositoryTest { private val mockPackageManager = mock() - private val context: Context = spy(ApplicationProvider.getApplicationContext()) { - on { userManager } doReturn mockUserManager - on { packageManager } doReturn mockPackageManager - } + private val context: Context = + spy(ApplicationProvider.getApplicationContext()) { + on { userManager } doReturn mockUserManager + on { packageManager } doReturn mockPackageManager + } private val repository = SimRepository(context) @Test - fun showMobileNetworkPage_adminUserAndHasTelephony_returnTrue() { - mockUserManager.stub { - on { isAdminUser } doReturn true - } + fun showMobileNetworkPageEntrance_adminUserAndHasTelephony_returnTrue() { + mockUserManager.stub { on { isAdminUser } doReturn true } mockPackageManager.stub { on { hasSystemFeature(PackageManager.FEATURE_TELEPHONY) } doReturn true } - val showMobileNetworkPage = repository.showMobileNetworkPage() + val showMobileNetworkPage = repository.showMobileNetworkPageEntrance() assertThat(showMobileNetworkPage).isTrue() } @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 { - on { isAdminUser } doReturn false + on { isAdminUser } doReturn true + on { hasUserRestriction(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS) } doReturn false } mockPackageManager.stub { 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 { on { isAdminUser } doReturn true + on { hasUserRestriction(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS) } doReturn true } 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() }