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
This commit is contained in:
@@ -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
|
||||
|
@@ -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)
|
||||
|
@@ -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<UserManager>()
|
||||
private val mockTelephonyManager = mock<TelephonyManager>()
|
||||
private val mockSubscriptionManager = mock<SubscriptionManager>()
|
||||
|
||||
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<SubscriptionInfo>()
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
@@ -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<UserManager>()
|
||||
private val mockSubscriptionRepository = mock<SubscriptionRepository>()
|
||||
|
||||
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
|
||||
|
Reference in New Issue
Block a user