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