diff --git a/src/com/android/settings/network/apn/ApnEditor.java b/src/com/android/settings/network/apn/ApnEditor.java index 68855f0cfa8..82584f69316 100644 --- a/src/com/android/settings/network/apn/ApnEditor.java +++ b/src/com/android/settings/network/apn/ApnEditor.java @@ -25,6 +25,7 @@ import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.os.PersistableBundle; +import android.os.UserManager; import android.provider.Telephony; import android.telephony.CarrierConfigManager; import android.telephony.SubscriptionInfo; @@ -281,6 +282,11 @@ public class ApnEditor extends SettingsPreferenceFragment @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); + if (isUserRestricted()) { + Log.e(TAG, "This setting isn't available due to user restriction."); + finish(); + return; + } setLifecycleForAllControllers(); @@ -1452,6 +1458,23 @@ public class ApnEditor extends SettingsPreferenceFragment return apnData; } + @VisibleForTesting + boolean isUserRestricted() { + UserManager userManager = getContext().getSystemService(UserManager.class); + if (userManager == null) { + return false; + } + if (!userManager.isAdminUser()) { + Log.e(TAG, "User is not an admin"); + return true; + } + if (userManager.hasUserRestriction(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS)) { + Log.e(TAG, "User is not allowed to configure mobile network"); + return true; + } + return false; + } + @VisibleForTesting static class ApnData { /** diff --git a/tests/robotests/src/com/android/settings/network/apn/ApnEditorTest.java b/tests/robotests/src/com/android/settings/network/apn/ApnEditorTest.java index 242ec682f88..1006c32fb71 100644 --- a/tests/robotests/src/com/android/settings/network/apn/ApnEditorTest.java +++ b/tests/robotests/src/com/android/settings/network/apn/ApnEditorTest.java @@ -38,6 +38,7 @@ import android.content.res.Resources; import android.database.Cursor; import android.net.Uri; import android.os.PersistableBundle; +import android.os.UserManager; import android.telephony.CarrierConfigManager; import android.view.KeyEvent; import android.view.Menu; @@ -107,6 +108,8 @@ public class ApnEditorTest { @Mock private FragmentActivity mActivity; @Mock + private UserManager mUserManager; + @Mock private ProxySubscriptionManager mProxySubscriptionMgr; @Mock private CarrierConfigManager mCarrierConfigManager; @@ -134,6 +137,10 @@ public class ApnEditorTest { doReturn(mContext.getTheme()).when(mActivity).getTheme(); doReturn(mContext.getContentResolver()).when(mActivity).getContentResolver(); + doReturn(mUserManager).when(mContext).getSystemService(UserManager.class); + doReturn(true).when(mUserManager).isAdminUser(); + doReturn(false).when(mUserManager) + .hasUserRestriction(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS); doReturn(mCarrierConfigManager).when(mContext) .getSystemService(Context.CARRIER_CONFIG_SERVICE); doReturn(mBundle).when(mCarrierConfigManager).getConfigForSubId(anyInt()); @@ -489,6 +496,27 @@ public class ApnEditorTest { assertThat(ApnEditor.formatInteger("not an int")).isEqualTo("not an int"); } + @Test + @Config(shadows = ShadowFragment.class) + public void onCreate_notAdminUser_shouldFinish() { + doReturn(false).when(mUserManager).isAdminUser(); + + mApnEditorUT.onCreate(null); + + verify(mApnEditorUT).finish(); + } + + @Test + @Config(shadows = ShadowFragment.class) + public void onCreate_hasUserRestriction_shouldFinish() { + doReturn(true).when(mUserManager) + .hasUserRestriction(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS); + + mApnEditorUT.onCreate(null); + + verify(mApnEditorUT).finish(); + } + @Test @Config(shadows = ShadowFragment.class) public void onCreate_noAction_shouldFinishAndNoCrash() {