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
) : BaseSearchIndexProvider(R.xml.network_provider_sims_list) {
public override fun isPageSearchEnabled(context: Context): Boolean =
simRepositoryFactory(context).showMobileNetworkPage()
simRepositoryFactory(context).canEnterMobileNetworkPage()
}
}
}

View File

@@ -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) {

View File

@@ -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

View File

@@ -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<MobileNetworkSettingsSearchItem> =
listOf(

View File

@@ -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)
}
}

View File

@@ -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()
}
}

View File

@@ -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)

View File

@@ -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

View File

@@ -37,50 +37,76 @@ class SimRepositoryTest {
private val mockPackageManager = mock<PackageManager>()
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()
}