From 2b048b22f014883af93a086db2577dca10dc272f Mon Sep 17 00:00:00 2001 From: Bonian Chen Date: Mon, 24 Oct 2022 01:12:17 +0000 Subject: [PATCH] [Settings][Back port] configuration for hidding SIM related UI Add overriable configuration for hidding SIM related UI. Bug: 240515161 Test: test cases and local testing Merged-In: I8d7ddd18861a696830da39f040dfb14b9ed46726 Change-Id: I709a8007362b09dbb1ec1bd5d32c68d23ed0cfa9 --- res/values/config.xml | 4 ++++ res/xml/my_device_info.xml | 3 +++ .../PhoneNumberPreferenceController.java | 7 +++++- .../imei/ImeiInfoPreferenceController.java | 7 +++++- .../SimStatusPreferenceController.java | 10 ++++++++ .../settings/network/SubscriptionUtil.java | 8 +++++++ .../ImeiInfoPreferenceControllerTest.java | 7 ++++++ .../SimStatusPreferenceControllerTest.java | 7 ++++++ .../network/SubscriptionUtilTest.java | 23 +++++++++++++++++++ 9 files changed, 74 insertions(+), 2 deletions(-) diff --git a/res/values/config.xml b/res/values/config.xml index 4b84bbac932..50e06ba1e66 100755 --- a/res/values/config.xml +++ b/res/values/config.xml @@ -639,4 +639,8 @@ false + + + true + diff --git a/res/xml/my_device_info.xml b/res/xml/my_device_info.xml index 9165745f472..08d3e6cc928 100644 --- a/res/xml/my_device_info.xml +++ b/res/xml/my_device_info.xml @@ -57,6 +57,7 @@ android:order="3" android:title="@string/status_number" android:summary="@string/summary_placeholder" + settings:isPreferenceVisible="@bool/config_show_sim_info" settings:controller="com.android.settings.deviceinfo.PhoneNumberPreferenceController" settings:enableCopying="true"/> @@ -98,6 +99,7 @@ android:title="@string/sim_status_title" settings:keywords="@string/keywords_sim_status" android:summary="@string/summary_placeholder" + settings:isPreferenceVisible="@bool/config_show_sim_info" settings:enableCopying="true"/> @@ -119,6 +121,7 @@ android:summary="@string/summary_placeholder" settings:keywords="@string/keywords_imei_info" settings:enableCopying="true" + settings:isPreferenceVisible="@bool/config_show_sim_info" settings:controller="com.android.settings.deviceinfo.imei.ImeiInfoPreferenceController"/> diff --git a/src/com/android/settings/deviceinfo/PhoneNumberPreferenceController.java b/src/com/android/settings/deviceinfo/PhoneNumberPreferenceController.java index eb8add5dbe9..f91b98f249e 100644 --- a/src/com/android/settings/deviceinfo/PhoneNumberPreferenceController.java +++ b/src/com/android/settings/deviceinfo/PhoneNumberPreferenceController.java @@ -29,6 +29,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.DeviceInfoUtils; import java.util.ArrayList; @@ -51,7 +52,8 @@ public class PhoneNumberPreferenceController extends BasePreferenceController { @Override public int getAvailabilityStatus() { - return mTelephonyManager.isVoiceCapable() ? AVAILABLE : UNSUPPORTED_ON_DEVICE; + return SubscriptionUtil.isSimHardwareVisible(mContext) ? + AVAILABLE : UNSUPPORTED_ON_DEVICE; } @Override @@ -79,6 +81,9 @@ public class PhoneNumberPreferenceController extends BasePreferenceController { @Override public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); + if (!SubscriptionUtil.isSimHardwareVisible(mContext)) { + return; + } final Preference preference = screen.findPreference(getPreferenceKey()); final PreferenceCategory category = screen.findPreference(KEY_PREFERENCE_CATEGORY); mPreferenceList.add(preference); diff --git a/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceController.java b/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceController.java index e90477270e0..9b7359b0c8d 100644 --- a/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceController.java +++ b/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceController.java @@ -33,6 +33,7 @@ import androidx.preference.PreferenceScreen; import com.android.settings.R; import com.android.settings.core.BasePreferenceController; import com.android.settings.deviceinfo.PhoneNumberSummaryPreference; +import com.android.settings.network.SubscriptionUtil; import com.android.settingslib.Utils; import java.util.ArrayList; @@ -63,6 +64,9 @@ public class ImeiInfoPreferenceController extends BasePreferenceController { @Override public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); + if (!SubscriptionUtil.isSimHardwareVisible(mContext)) { + return; + } final Preference preference = screen.findPreference(getPreferenceKey()); final PreferenceCategory category = screen.findPreference(KEY_PREFERENCE_CATEGORY); @@ -119,7 +123,8 @@ public class ImeiInfoPreferenceController extends BasePreferenceController { @Override public int getAvailabilityStatus() { - return mContext.getSystemService(UserManager.class).isAdminUser() + return SubscriptionUtil.isSimHardwareVisible(mContext) && + mContext.getSystemService(UserManager.class).isAdminUser() && !Utils.isWifiOnly(mContext) ? AVAILABLE : UNSUPPORTED_ON_DEVICE; } diff --git a/src/com/android/settings/deviceinfo/simstatus/SimStatusPreferenceController.java b/src/com/android/settings/deviceinfo/simstatus/SimStatusPreferenceController.java index e392bd6cc90..f811d2a86d2 100644 --- a/src/com/android/settings/deviceinfo/simstatus/SimStatusPreferenceController.java +++ b/src/com/android/settings/deviceinfo/simstatus/SimStatusPreferenceController.java @@ -29,6 +29,7 @@ import androidx.preference.PreferenceScreen; import com.android.settings.R; import com.android.settings.core.PreferenceControllerMixin; +import com.android.settings.network.SubscriptionUtil; import com.android.settingslib.deviceinfo.AbstractSimStatusImeiInfoPreferenceController; import java.util.ArrayList; @@ -59,9 +60,18 @@ public class SimStatusPreferenceController extends return KEY_SIM_STATUS; } + @Override + public boolean isAvailable() { + return SubscriptionUtil.isSimHardwareVisible(mContext) && + super.isAvailable(); + } + @Override public void displayPreference(PreferenceScreen screen) { super.displayPreference(screen); + if (!SubscriptionUtil.isSimHardwareVisible(mContext)) { + return; + } final Preference preference = screen.findPreference(getPreferenceKey()); if (!isAvailable() || preference == null || !preference.isVisible()) { return; diff --git a/src/com/android/settings/network/SubscriptionUtil.java b/src/com/android/settings/network/SubscriptionUtil.java index 0bba86fafed..ccfcfb0a752 100644 --- a/src/com/android/settings/network/SubscriptionUtil.java +++ b/src/com/android/settings/network/SubscriptionUtil.java @@ -86,6 +86,14 @@ public class SubscriptionUtil { return subscriptions; } + /** + * Check if SIM hardware is visible to the end user. + */ + public static boolean isSimHardwareVisible(Context context) { + return context.getResources() + .getBoolean(R.bool.config_show_sim_info); + } + @VisibleForTesting static boolean isInactiveInsertedPSim(UiccSlotInfo slotInfo) { if (slotInfo == null) { diff --git a/tests/robotests/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceControllerTest.java index 55194add83d..bae629ced42 100644 --- a/tests/robotests/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/deviceinfo/imei/ImeiInfoPreferenceControllerTest.java @@ -29,6 +29,7 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.content.Context; +import android.content.res.Resources; import android.os.UserManager; import android.telephony.TelephonyManager; @@ -69,12 +70,18 @@ public class ImeiInfoPreferenceControllerTest { private PreferenceCategory mCategory; private Context mContext; + private Resources mResources; private ImeiInfoPreferenceController mController; @Before public void setUp() { MockitoAnnotations.initMocks(this); mContext = spy(RuntimeEnvironment.application); + + mResources = spy(mContext.getResources()); + when(mContext.getResources()).thenReturn(mResources); + when(mResources.getBoolean(R.bool.config_show_sim_info)).thenReturn(true); + doReturn(mUserManager).when(mContext).getSystemService(UserManager.class); mController = spy(new ImeiInfoPreferenceController(mContext, "imei_info")); mController.setHost(mFragment); diff --git a/tests/robotests/src/com/android/settings/deviceinfo/simstatus/SimStatusPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/deviceinfo/simstatus/SimStatusPreferenceControllerTest.java index 85a6fac765a..4ffaf7ae6ec 100644 --- a/tests/robotests/src/com/android/settings/deviceinfo/simstatus/SimStatusPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/deviceinfo/simstatus/SimStatusPreferenceControllerTest.java @@ -25,6 +25,7 @@ import static org.mockito.Mockito.when; import android.content.Context; import android.os.UserManager; +import android.content.res.Resources; import android.telephony.TelephonyManager; import androidx.fragment.app.Fragment; @@ -64,12 +65,18 @@ public class SimStatusPreferenceControllerTest { private PreferenceCategory mCategory; private Context mContext; + private Resources mResources; private SimStatusPreferenceController mController; @Before public void setUp() { MockitoAnnotations.initMocks(this); mContext = spy(RuntimeEnvironment.application); + + mResources = spy(mContext.getResources()); + when(mContext.getResources()).thenReturn(mResources); + when(mResources.getBoolean(R.bool.config_show_sim_info)).thenReturn(true); + doReturn(mUserManager).when(mContext).getSystemService(UserManager.class); mController = spy(new SimStatusPreferenceController(mContext, mFragment)); doReturn(true).when(mController).isAvailable(); diff --git a/tests/unit/src/com/android/settings/network/SubscriptionUtilTest.java b/tests/unit/src/com/android/settings/network/SubscriptionUtilTest.java index 43a32b51fbc..63dca7e88eb 100644 --- a/tests/unit/src/com/android/settings/network/SubscriptionUtilTest.java +++ b/tests/unit/src/com/android/settings/network/SubscriptionUtilTest.java @@ -25,11 +25,14 @@ import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; import android.content.Context; +import android.content.res.Resources; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.text.TextUtils; +import com.android.settings.R; + import androidx.test.core.app.ApplicationProvider; import androidx.test.ext.junit.runners.AndroidJUnit4; @@ -58,6 +61,8 @@ public class SubscriptionUtilTest { private SubscriptionManager mSubMgr; @Mock private TelephonyManager mTelMgr; + @Mock + private Resources mResources; @Before @@ -443,4 +448,22 @@ public class SubscriptionUtilTest { public void isInactiveInsertedPSim_nullSubInfo_doesNotCrash() { assertThat(SubscriptionUtil.isInactiveInsertedPSim(null)).isFalse(); } + + @Test + public void isSimHardwareVisible_configAsInvisible_returnFalse() { + when(mContext.getResources()).thenReturn(mResources); + when(mResources.getBoolean(R.bool.config_show_sim_info)) + .thenReturn(false); + + assertThat(SubscriptionUtil.isSimHardwareVisible(mContext)).isFalse(); + } + + @Test + public void isSimHardwareVisible_configAsVisible_returnTrue() { + when(mContext.getResources()).thenReturn(mResources); + when(mResources.getBoolean(R.bool.config_show_sim_info)) + .thenReturn(true); + + assertTrue(SubscriptionUtil.isSimHardwareVisible(mContext)); + } }