From 616fbc4f937e3bdff1b26abe13b0ec74f2c3c445 Mon Sep 17 00:00:00 2001 From: Aleksander Morgado Date: Thu, 6 Feb 2025 17:19:22 +0000 Subject: [PATCH 1/4] Added unit tests for PhoneNumberPreferenceController visibility The tests check whether the item is available based on the result of the SubscriptionUtil.isSimHardwareVisible() method, which is the one allowing to check the value of the config_show_sim_info boolean flag on non-test runtime. Bug: 392808943 Flag: EXEMPT test only Test: atest PhoneNumberPreferenceControllerTest Change-Id: I2d1361ecef8a9c1083b4fd6fd4462c7815574827 --- .../PhoneNumberPreferenceControllerTest.kt | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/tests/spa_unit/src/com/android/settings/deviceinfo/PhoneNumberPreferenceControllerTest.kt b/tests/spa_unit/src/com/android/settings/deviceinfo/PhoneNumberPreferenceControllerTest.kt index 8524ef462fd..bde92507dc3 100644 --- a/tests/spa_unit/src/com/android/settings/deviceinfo/PhoneNumberPreferenceControllerTest.kt +++ b/tests/spa_unit/src/com/android/settings/deviceinfo/PhoneNumberPreferenceControllerTest.kt @@ -25,20 +25,27 @@ import androidx.preference.PreferenceCategory import androidx.preference.PreferenceManager import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 +import com.android.dx.mockito.inline.extended.ExtendedMockito import com.android.settings.R +import com.android.settings.core.BasePreferenceController +import com.android.settings.network.SubscriptionUtil import com.google.common.truth.Truth.assertThat +import org.junit.After import org.junit.Before import org.junit.Test import org.junit.runner.RunWith +import org.mockito.MockitoSession import org.mockito.kotlin.any import org.mockito.kotlin.doReturn import org.mockito.kotlin.mock import org.mockito.kotlin.spy import org.mockito.kotlin.verify import org.mockito.kotlin.whenever +import org.mockito.quality.Strictness @RunWith(AndroidJUnit4::class) class PhoneNumberPreferenceControllerTest { + private lateinit var mockSession: MockitoSession private val mockTelephonyManager = mock() private val mockSubscriptionManager = mock() @@ -61,6 +68,15 @@ class PhoneNumberPreferenceControllerTest { @Before fun setup() { + mockSession = + ExtendedMockito.mockitoSession() + .mockStatic(SubscriptionUtil::class.java) + .strictness(Strictness.LENIENT) + .startMocking() + + // By default, available + whenever(SubscriptionUtil.isSimHardwareVisible(context)).thenReturn(true) + preference.setKey(controller.preferenceKey) preference.isVisible = true preferenceScreen.addPreference(preference) @@ -70,6 +86,11 @@ class PhoneNumberPreferenceControllerTest { doReturn(secondPreference).whenever(controller).createNewPreference(context) } + @After + fun teardown() { + mockSession.finishMocking() + } + @Test fun displayPreference_multiSim_shouldAddSecondPreference() { whenever(mockTelephonyManager.phoneCount).thenReturn(2) @@ -132,4 +153,19 @@ class PhoneNumberPreferenceControllerTest { verify(preference).summary = context.getString(R.string.device_info_not_available) } + + @Test + fun getAvailabilityStatus_simHardwareVisible_displayed() { + // Use defaults from setup() + val availabilityStatus = controller.availabilityStatus + assertThat(availabilityStatus).isEqualTo(BasePreferenceController.AVAILABLE) + } + + @Test + fun getAvailabilityStatus_notSimHardwareVisible_notDisplayed() { + whenever(SubscriptionUtil.isSimHardwareVisible(context)).thenReturn(false) + + val availabilityStatus = controller.availabilityStatus + assertThat(availabilityStatus).isEqualTo(BasePreferenceController.UNSUPPORTED_ON_DEVICE) + } } From 035a15ac374ae934c3697ea3c999108a4af08eb7 Mon Sep 17 00:00:00 2001 From: Aleksander Morgado Date: Thu, 6 Feb 2025 17:30:18 +0000 Subject: [PATCH 2/4] Added unit test for MobileNetworkPhoneNumberPreferenceController visibility The new test checks whether the item is available when the SubscriptionUtil.isSimHardwareVisible() method returns true, i.e. if the config_show_sim_info boolean flag is true on non-test runtime. The default visibility status for all tests is defined in the test setup() method, as this will also simplify the addition of new checks later on. Bug: 392808943 Flag: EXEMPT test only Test: atest MobileNetworkPhoneNumberPreferenceControllerTest Change-Id: Icedef190a8140fd8164dd8035ae93735a666b9f0 --- ...eNetworkPhoneNumberPreferenceControllerTest.kt | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/tests/spa_unit/src/com/android/settings/network/telephony/MobileNetworkPhoneNumberPreferenceControllerTest.kt b/tests/spa_unit/src/com/android/settings/network/telephony/MobileNetworkPhoneNumberPreferenceControllerTest.kt index f56c0c4b351..a7a87380c8d 100644 --- a/tests/spa_unit/src/com/android/settings/network/telephony/MobileNetworkPhoneNumberPreferenceControllerTest.kt +++ b/tests/spa_unit/src/com/android/settings/network/telephony/MobileNetworkPhoneNumberPreferenceControllerTest.kt @@ -61,6 +61,9 @@ class MobileNetworkPhoneNumberPreferenceControllerTest { .strictness(Strictness.LENIENT) .startMocking() + // By default, available + whenever(SubscriptionUtil.isSimHardwareVisible(context)).thenReturn(true) + preferenceScreen.addPreference(preference) controller.init(SUB_ID) controller.displayPreference(preferenceScreen) @@ -73,7 +76,6 @@ class MobileNetworkPhoneNumberPreferenceControllerTest { @Test fun onViewCreated_cannotGetPhoneNumber_displayUnknown() = runBlocking { - whenever(SubscriptionUtil.isSimHardwareVisible(context)).thenReturn(true) mockSubscriptionRepository.stub { on { phoneNumberFlow(SUB_ID) } doReturn flowOf(null) } @@ -86,7 +88,6 @@ class MobileNetworkPhoneNumberPreferenceControllerTest { @Test fun onViewCreated_canGetPhoneNumber_displayPhoneNumber() = runBlocking { - whenever(SubscriptionUtil.isSimHardwareVisible(context)).thenReturn(true) mockSubscriptionRepository.stub { on { phoneNumberFlow(SUB_ID) } doReturn flowOf(PHONE_NUMBER) } @@ -98,11 +99,17 @@ class MobileNetworkPhoneNumberPreferenceControllerTest { } @Test - fun getAvailabilityStatus_notSimHardwareVisible() { + fun getAvailabilityStatus_simHardwareVisible_displayed() { + // Use defaults from setup() + val availabilityStatus = controller.availabilityStatus + assertThat(availabilityStatus).isEqualTo(BasePreferenceController.AVAILABLE) + } + + @Test + fun getAvailabilityStatus_notSimHardwareVisible_notDisplayed() { whenever(SubscriptionUtil.isSimHardwareVisible(context)).thenReturn(false) val availabilityStatus = controller.availabilityStatus - assertThat(availabilityStatus).isEqualTo(BasePreferenceController.CONDITIONALLY_UNAVAILABLE) } From 571103b8913f7864647c9d2768c6ba2dc21029fa Mon Sep 17 00:00:00 2001 From: Aleksander Morgado Date: Thu, 6 Feb 2025 17:49:40 +0000 Subject: [PATCH 3/4] Phone number only available for admin users The phone number is hidden to non-admin users, following the same reasoning that exists for other telephony-specific fields like the baseband IMEI. Bug: 392808943 Flag: EXEMPT bugfix Test: atest PhoneNumberPreferenceControllerTest Test: atest MobileNetworkPhoneNumberPreferenceControllerTest Change-Id: I4e612219d0c7439930e91b3e1d6e368a0dfd073e --- .../PhoneNumberPreferenceController.java | 10 +++++-- ...eNetworkPhoneNumberPreferenceController.kt | 15 ++++++----- .../PhoneNumberPreferenceControllerTest.kt | 25 ++++++++++++++---- ...workPhoneNumberPreferenceControllerTest.kt | 26 ++++++++++++++++--- 4 files changed, 59 insertions(+), 17 deletions(-) diff --git a/src/com/android/settings/deviceinfo/PhoneNumberPreferenceController.java b/src/com/android/settings/deviceinfo/PhoneNumberPreferenceController.java index 421963eb31c..12a45dea79c 100644 --- a/src/com/android/settings/deviceinfo/PhoneNumberPreferenceController.java +++ b/src/com/android/settings/deviceinfo/PhoneNumberPreferenceController.java @@ -17,6 +17,7 @@ package com.android.settings.deviceinfo; import android.content.Context; +import android.os.UserManager; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; @@ -51,8 +52,13 @@ public class PhoneNumberPreferenceController extends BasePreferenceController { @Override public int getAvailabilityStatus() { - return SubscriptionUtil.isSimHardwareVisible(mContext) ? - AVAILABLE : UNSUPPORTED_ON_DEVICE; + if (!SubscriptionUtil.isSimHardwareVisible(mContext)) { + return UNSUPPORTED_ON_DEVICE; + } + if (!mContext.getSystemService(UserManager.class).isAdminUser()) { + return DISABLED_FOR_USER; + } + return AVAILABLE; } @Override diff --git a/src/com/android/settings/network/telephony/MobileNetworkPhoneNumberPreferenceController.kt b/src/com/android/settings/network/telephony/MobileNetworkPhoneNumberPreferenceController.kt index db16acdfc59..c62599969dc 100644 --- a/src/com/android/settings/network/telephony/MobileNetworkPhoneNumberPreferenceController.kt +++ b/src/com/android/settings/network/telephony/MobileNetworkPhoneNumberPreferenceController.kt @@ -25,6 +25,7 @@ import com.android.settings.R import com.android.settings.flags.Flags import com.android.settings.network.SubscriptionUtil import com.android.settingslib.spa.framework.util.collectLatestWithLifecycle +import com.android.settingslib.spaprivileged.framework.common.userManager /** Preference controller for "Phone number" */ class MobileNetworkPhoneNumberPreferenceController @@ -41,13 +42,13 @@ constructor( mSubId = subId } - override fun getAvailabilityStatus(subId: Int): Int = - when { - !Flags.isDualSimOnboardingEnabled() -> CONDITIONALLY_UNAVAILABLE - SubscriptionManager.isValidSubscriptionId(subId) && - SubscriptionUtil.isSimHardwareVisible(mContext) -> AVAILABLE - else -> CONDITIONALLY_UNAVAILABLE - } + override fun getAvailabilityStatus(subId: Int): Int = when { + !Flags.isDualSimOnboardingEnabled() + || !SubscriptionManager.isValidSubscriptionId(subId) + || !SubscriptionUtil.isSimHardwareVisible(mContext) -> CONDITIONALLY_UNAVAILABLE + !mContext.userManager.isAdminUser -> DISABLED_FOR_USER + else -> AVAILABLE + } override fun displayPreference(screen: PreferenceScreen) { super.displayPreference(screen) diff --git a/tests/spa_unit/src/com/android/settings/deviceinfo/PhoneNumberPreferenceControllerTest.kt b/tests/spa_unit/src/com/android/settings/deviceinfo/PhoneNumberPreferenceControllerTest.kt index bde92507dc3..d9470469401 100644 --- a/tests/spa_unit/src/com/android/settings/deviceinfo/PhoneNumberPreferenceControllerTest.kt +++ b/tests/spa_unit/src/com/android/settings/deviceinfo/PhoneNumberPreferenceControllerTest.kt @@ -17,6 +17,7 @@ package com.android.settings.deviceinfo import android.content.Context +import android.os.UserManager import android.telephony.SubscriptionInfo import android.telephony.SubscriptionManager import android.telephony.TelephonyManager @@ -39,6 +40,7 @@ import org.mockito.kotlin.any import org.mockito.kotlin.doReturn import org.mockito.kotlin.mock import org.mockito.kotlin.spy +import org.mockito.kotlin.stub import org.mockito.kotlin.verify import org.mockito.kotlin.whenever import org.mockito.quality.Strictness @@ -47,15 +49,15 @@ import org.mockito.quality.Strictness class PhoneNumberPreferenceControllerTest { private lateinit var mockSession: MockitoSession + private val mockUserManager = mock() private val mockTelephonyManager = mock() private val mockSubscriptionManager = mock() private val context: Context = spy(ApplicationProvider.getApplicationContext()) { - on { getSystemService(SubscriptionManager::class.java) } doReturn - mockSubscriptionManager - + on { getSystemService(SubscriptionManager::class.java) } doReturn mockSubscriptionManager on { getSystemService(TelephonyManager::class.java) } doReturn mockTelephonyManager + on { getSystemService(UserManager::class.java) } doReturn mockUserManager } private val subscriptionInfo = mock() @@ -76,6 +78,9 @@ class PhoneNumberPreferenceControllerTest { // By default, available whenever(SubscriptionUtil.isSimHardwareVisible(context)).thenReturn(true) + mockUserManager.stub { + on { isAdminUser } doReturn true + } preference.setKey(controller.preferenceKey) preference.isVisible = true @@ -155,17 +160,27 @@ class PhoneNumberPreferenceControllerTest { } @Test - fun getAvailabilityStatus_simHardwareVisible_displayed() { + fun getAvailabilityStatus_simHardwareVisible_userAdmin_displayed() { // Use defaults from setup() val availabilityStatus = controller.availabilityStatus assertThat(availabilityStatus).isEqualTo(BasePreferenceController.AVAILABLE) } @Test - fun getAvailabilityStatus_notSimHardwareVisible_notDisplayed() { + fun getAvailabilityStatus_notSimHardwareVisible_userAdmin_notDisplayed() { whenever(SubscriptionUtil.isSimHardwareVisible(context)).thenReturn(false) val availabilityStatus = controller.availabilityStatus assertThat(availabilityStatus).isEqualTo(BasePreferenceController.UNSUPPORTED_ON_DEVICE) } + + @Test + fun getAvailabilityStatus_simHardwareVisible_notUserAdmin_notDisplayed() { + mockUserManager.stub { + on { isAdminUser } doReturn false + } + + val availabilityStatus = controller.availabilityStatus + assertThat(availabilityStatus).isEqualTo(BasePreferenceController.DISABLED_FOR_USER) + } } diff --git a/tests/spa_unit/src/com/android/settings/network/telephony/MobileNetworkPhoneNumberPreferenceControllerTest.kt b/tests/spa_unit/src/com/android/settings/network/telephony/MobileNetworkPhoneNumberPreferenceControllerTest.kt index a7a87380c8d..c6bd0bdcc85 100644 --- a/tests/spa_unit/src/com/android/settings/network/telephony/MobileNetworkPhoneNumberPreferenceControllerTest.kt +++ b/tests/spa_unit/src/com/android/settings/network/telephony/MobileNetworkPhoneNumberPreferenceControllerTest.kt @@ -17,6 +17,7 @@ package com.android.settings.network.telephony import android.content.Context +import android.os.UserManager import androidx.lifecycle.testing.TestLifecycleOwner import androidx.preference.Preference import androidx.preference.PreferenceManager @@ -37,6 +38,7 @@ import org.junit.runner.RunWith import org.mockito.MockitoSession import org.mockito.kotlin.doReturn import org.mockito.kotlin.mock +import org.mockito.kotlin.spy import org.mockito.kotlin.stub import org.mockito.kotlin.whenever import org.mockito.quality.Strictness @@ -45,9 +47,14 @@ import org.mockito.quality.Strictness class MobileNetworkPhoneNumberPreferenceControllerTest { private lateinit var mockSession: MockitoSession - private val context: Context = ApplicationProvider.getApplicationContext() + private val mockUserManager = mock() private val mockSubscriptionRepository = mock() + private val context: Context = + spy(ApplicationProvider.getApplicationContext()) { + on { getSystemService(UserManager::class.java) } doReturn mockUserManager + } + private val controller = MobileNetworkPhoneNumberPreferenceController(context, TEST_KEY, mockSubscriptionRepository) private val preference = Preference(context).apply { key = TEST_KEY } @@ -63,6 +70,9 @@ class MobileNetworkPhoneNumberPreferenceControllerTest { // By default, available whenever(SubscriptionUtil.isSimHardwareVisible(context)).thenReturn(true) + mockUserManager.stub { + on { isAdminUser } doReturn true + } preferenceScreen.addPreference(preference) controller.init(SUB_ID) @@ -99,20 +109,30 @@ class MobileNetworkPhoneNumberPreferenceControllerTest { } @Test - fun getAvailabilityStatus_simHardwareVisible_displayed() { + fun getAvailabilityStatus_simHardwareVisible_userAdmin_displayed() { // Use defaults from setup() val availabilityStatus = controller.availabilityStatus assertThat(availabilityStatus).isEqualTo(BasePreferenceController.AVAILABLE) } @Test - fun getAvailabilityStatus_notSimHardwareVisible_notDisplayed() { + fun getAvailabilityStatus_notSimHardwareVisible_userAdmin_notDisplayed() { whenever(SubscriptionUtil.isSimHardwareVisible(context)).thenReturn(false) val availabilityStatus = controller.availabilityStatus assertThat(availabilityStatus).isEqualTo(BasePreferenceController.CONDITIONALLY_UNAVAILABLE) } + @Test + fun getAvailabilityStatus_simHardwareVisible_notUserAdmin_notDisplayed() { + mockUserManager.stub { + on { isAdminUser } doReturn false + } + + val availabilityStatus = controller.availabilityStatus + assertThat(availabilityStatus).isEqualTo(BasePreferenceController.DISABLED_FOR_USER) + } + private companion object { const val TEST_KEY = "test_key" const val SUB_ID = 10 From 731df0fa98d1824c15dc261e354f5e166034a6ec Mon Sep 17 00:00:00 2001 From: Aleksander Morgado Date: Thu, 6 Feb 2025 18:14:32 +0000 Subject: [PATCH 4/4] Phone number only available if telephony capable The Phone Number field in either the about or network details pages should not be shown if the device does not have telephony capabilities. Bug: 392808943 Flag: EXEMPT bugfix Test: atest PhoneNumberPreferenceControllerTest Test: atest MobileNetworkPhoneNumberPreferenceControllerTest Change-Id: I04f682cc829d5dc7879e6cdacdaebc55a3b6fd2c --- .../PhoneNumberPreferenceController.java | 3 ++- ...ileNetworkPhoneNumberPreferenceController.kt | 4 +++- .../PhoneNumberPreferenceControllerTest.kt | 17 ++++++++++++++--- ...etworkPhoneNumberPreferenceControllerTest.kt | 17 ++++++++++++++--- 4 files changed, 33 insertions(+), 8 deletions(-) diff --git a/src/com/android/settings/deviceinfo/PhoneNumberPreferenceController.java b/src/com/android/settings/deviceinfo/PhoneNumberPreferenceController.java index 12a45dea79c..b49d62d444f 100644 --- a/src/com/android/settings/deviceinfo/PhoneNumberPreferenceController.java +++ b/src/com/android/settings/deviceinfo/PhoneNumberPreferenceController.java @@ -31,6 +31,7 @@ import androidx.preference.PreferenceScreen; import com.android.settings.R; import com.android.settings.core.BasePreferenceController; import com.android.settings.network.SubscriptionUtil; +import com.android.settingslib.Utils; import java.util.ArrayList; import java.util.List; @@ -52,7 +53,7 @@ public class PhoneNumberPreferenceController extends BasePreferenceController { @Override public int getAvailabilityStatus() { - if (!SubscriptionUtil.isSimHardwareVisible(mContext)) { + if (!SubscriptionUtil.isSimHardwareVisible(mContext) || Utils.isWifiOnly(mContext)) { return UNSUPPORTED_ON_DEVICE; } if (!mContext.getSystemService(UserManager.class).isAdminUser()) { diff --git a/src/com/android/settings/network/telephony/MobileNetworkPhoneNumberPreferenceController.kt b/src/com/android/settings/network/telephony/MobileNetworkPhoneNumberPreferenceController.kt index c62599969dc..40cb6f93ace 100644 --- a/src/com/android/settings/network/telephony/MobileNetworkPhoneNumberPreferenceController.kt +++ b/src/com/android/settings/network/telephony/MobileNetworkPhoneNumberPreferenceController.kt @@ -26,6 +26,7 @@ import com.android.settings.flags.Flags import com.android.settings.network.SubscriptionUtil import com.android.settingslib.spa.framework.util.collectLatestWithLifecycle import com.android.settingslib.spaprivileged.framework.common.userManager +import com.android.settingslib.Utils /** Preference controller for "Phone number" */ class MobileNetworkPhoneNumberPreferenceController @@ -45,7 +46,8 @@ constructor( override fun getAvailabilityStatus(subId: Int): Int = when { !Flags.isDualSimOnboardingEnabled() || !SubscriptionManager.isValidSubscriptionId(subId) - || !SubscriptionUtil.isSimHardwareVisible(mContext) -> CONDITIONALLY_UNAVAILABLE + || !SubscriptionUtil.isSimHardwareVisible(mContext) + || Utils.isWifiOnly(mContext) -> CONDITIONALLY_UNAVAILABLE !mContext.userManager.isAdminUser -> DISABLED_FOR_USER else -> AVAILABLE } diff --git a/tests/spa_unit/src/com/android/settings/deviceinfo/PhoneNumberPreferenceControllerTest.kt b/tests/spa_unit/src/com/android/settings/deviceinfo/PhoneNumberPreferenceControllerTest.kt index d9470469401..ed40a8c87ac 100644 --- a/tests/spa_unit/src/com/android/settings/deviceinfo/PhoneNumberPreferenceControllerTest.kt +++ b/tests/spa_unit/src/com/android/settings/deviceinfo/PhoneNumberPreferenceControllerTest.kt @@ -30,6 +30,7 @@ import com.android.dx.mockito.inline.extended.ExtendedMockito import com.android.settings.R import com.android.settings.core.BasePreferenceController import com.android.settings.network.SubscriptionUtil +import com.android.settingslib.Utils import com.google.common.truth.Truth.assertThat import org.junit.After import org.junit.Before @@ -73,11 +74,13 @@ class PhoneNumberPreferenceControllerTest { mockSession = ExtendedMockito.mockitoSession() .mockStatic(SubscriptionUtil::class.java) + .mockStatic(Utils::class.java) .strictness(Strictness.LENIENT) .startMocking() // By default, available whenever(SubscriptionUtil.isSimHardwareVisible(context)).thenReturn(true) + whenever(Utils.isWifiOnly(context)).thenReturn(false) mockUserManager.stub { on { isAdminUser } doReturn true } @@ -160,14 +163,14 @@ class PhoneNumberPreferenceControllerTest { } @Test - fun getAvailabilityStatus_simHardwareVisible_userAdmin_displayed() { + fun getAvailabilityStatus_simHardwareVisible_userAdmin_notWifiOnly_displayed() { // Use defaults from setup() val availabilityStatus = controller.availabilityStatus assertThat(availabilityStatus).isEqualTo(BasePreferenceController.AVAILABLE) } @Test - fun getAvailabilityStatus_notSimHardwareVisible_userAdmin_notDisplayed() { + fun getAvailabilityStatus_notSimHardwareVisible_userAdmin_notWifiOnly_notDisplayed() { whenever(SubscriptionUtil.isSimHardwareVisible(context)).thenReturn(false) val availabilityStatus = controller.availabilityStatus @@ -175,7 +178,7 @@ class PhoneNumberPreferenceControllerTest { } @Test - fun getAvailabilityStatus_simHardwareVisible_notUserAdmin_notDisplayed() { + fun getAvailabilityStatus_simHardwareVisible_notUserAdmin_notWifiOnly_notDisplayed() { mockUserManager.stub { on { isAdminUser } doReturn false } @@ -183,4 +186,12 @@ class PhoneNumberPreferenceControllerTest { val availabilityStatus = controller.availabilityStatus assertThat(availabilityStatus).isEqualTo(BasePreferenceController.DISABLED_FOR_USER) } + + @Test + fun getAvailabilityStatus_simHardwareVisible_userAdmin_wifiOnly_notDisplayed() { + whenever(Utils.isWifiOnly(context)).thenReturn(true) + + val availabilityStatus = controller.availabilityStatus + assertThat(availabilityStatus).isEqualTo(BasePreferenceController.UNSUPPORTED_ON_DEVICE) + } } diff --git a/tests/spa_unit/src/com/android/settings/network/telephony/MobileNetworkPhoneNumberPreferenceControllerTest.kt b/tests/spa_unit/src/com/android/settings/network/telephony/MobileNetworkPhoneNumberPreferenceControllerTest.kt index c6bd0bdcc85..a46b71033b6 100644 --- a/tests/spa_unit/src/com/android/settings/network/telephony/MobileNetworkPhoneNumberPreferenceControllerTest.kt +++ b/tests/spa_unit/src/com/android/settings/network/telephony/MobileNetworkPhoneNumberPreferenceControllerTest.kt @@ -27,6 +27,7 @@ import com.android.dx.mockito.inline.extended.ExtendedMockito import com.android.settings.R import com.android.settings.core.BasePreferenceController import com.android.settings.network.SubscriptionUtil +import com.android.settingslib.Utils import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.delay import kotlinx.coroutines.flow.flowOf @@ -65,11 +66,13 @@ class MobileNetworkPhoneNumberPreferenceControllerTest { mockSession = ExtendedMockito.mockitoSession() .mockStatic(SubscriptionUtil::class.java) + .mockStatic(Utils::class.java) .strictness(Strictness.LENIENT) .startMocking() // By default, available whenever(SubscriptionUtil.isSimHardwareVisible(context)).thenReturn(true) + whenever(Utils.isWifiOnly(context)).thenReturn(false) mockUserManager.stub { on { isAdminUser } doReturn true } @@ -109,14 +112,14 @@ class MobileNetworkPhoneNumberPreferenceControllerTest { } @Test - fun getAvailabilityStatus_simHardwareVisible_userAdmin_displayed() { + fun getAvailabilityStatus_simHardwareVisible_userAdmin_notWifiOnly_displayed() { // Use defaults from setup() val availabilityStatus = controller.availabilityStatus assertThat(availabilityStatus).isEqualTo(BasePreferenceController.AVAILABLE) } @Test - fun getAvailabilityStatus_notSimHardwareVisible_userAdmin_notDisplayed() { + fun getAvailabilityStatus_notSimHardwareVisible_userAdmin_notWifiOnly_notDisplayed() { whenever(SubscriptionUtil.isSimHardwareVisible(context)).thenReturn(false) val availabilityStatus = controller.availabilityStatus @@ -124,7 +127,7 @@ class MobileNetworkPhoneNumberPreferenceControllerTest { } @Test - fun getAvailabilityStatus_simHardwareVisible_notUserAdmin_notDisplayed() { + fun getAvailabilityStatus_simHardwareVisible_notUserAdmin_notWifiOnly_notDisplayed() { mockUserManager.stub { on { isAdminUser } doReturn false } @@ -133,6 +136,14 @@ class MobileNetworkPhoneNumberPreferenceControllerTest { assertThat(availabilityStatus).isEqualTo(BasePreferenceController.DISABLED_FOR_USER) } + @Test + fun getAvailabilityStatus_simHardwareVisible_userAdmin_wifiOnly_notDisplayed() { + whenever(Utils.isWifiOnly(context)).thenReturn(true) + + val availabilityStatus = controller.availabilityStatus + assertThat(availabilityStatus).isEqualTo(BasePreferenceController.CONDITIONALLY_UNAVAILABLE) + } + private companion object { const val TEST_KEY = "test_key" const val SUB_ID = 10