[RESTRICT AUTOMERGE] Restrict ApnEditor settings

- Finish ApnEditor settings if user is not an admin

- Finish ApnEditor settings if user has DISALLOW_CONFIG_MOBILE_NETWORKS restriction

Bug: 279902472
Test: manual test
atest -c ApnEditorTest

Change-Id: Iecdbbff7e21dfb11e3ba385858747a220cfd3e04
This commit is contained in:
Weng Su
2023-07-07 19:52:04 +08:00
parent c6bded5070
commit 6afcad7626
2 changed files with 52 additions and 0 deletions

View File

@@ -25,6 +25,7 @@ import android.database.Cursor;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.os.PersistableBundle; import android.os.PersistableBundle;
import android.os.UserManager;
import android.provider.Telephony; import android.provider.Telephony;
import android.telephony.CarrierConfigManager; import android.telephony.CarrierConfigManager;
import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionInfo;
@@ -266,6 +267,11 @@ public class ApnEditor extends SettingsPreferenceFragment
@Override @Override
public void onCreate(Bundle icicle) { public void onCreate(Bundle icicle) {
super.onCreate(icicle); super.onCreate(icicle);
if (isUserRestricted()) {
Log.e(TAG, "This setting isn't available due to user restriction.");
finish();
return;
}
setLifecycleForAllControllers(); setLifecycleForAllControllers();
@@ -1409,6 +1415,23 @@ public class ApnEditor extends SettingsPreferenceFragment
return apnData; 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 @VisibleForTesting
static class ApnData { static class ApnData {
/** /**

View File

@@ -34,6 +34,7 @@ import android.content.Intent;
import android.content.res.Resources; import android.content.res.Resources;
import android.database.Cursor; import android.database.Cursor;
import android.net.Uri; import android.net.Uri;
import android.os.UserManager;
import android.view.KeyEvent; import android.view.KeyEvent;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
@@ -102,6 +103,8 @@ public class ApnEditorTest {
@Mock @Mock
private FragmentActivity mActivity; private FragmentActivity mActivity;
@Mock @Mock
private UserManager mUserManager;
@Mock
private ProxySubscriptionManager mProxySubscriptionMgr; private ProxySubscriptionManager mProxySubscriptionMgr;
@Captor @Captor
@@ -127,6 +130,11 @@ public class ApnEditorTest {
doReturn(mContext.getTheme()).when(mActivity).getTheme(); doReturn(mContext.getTheme()).when(mActivity).getTheme();
doReturn(mContext.getContentResolver()).when(mActivity).getContentResolver(); 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);
setMockPreference(mContext); setMockPreference(mContext);
mApnEditorUT.mApnData = new FakeApnData(APN_DATA); mApnEditorUT.mApnData = new FakeApnData(APN_DATA);
mApnEditorUT.sNotSet = "Not Set"; mApnEditorUT.sNotSet = "Not Set";
@@ -451,6 +459,27 @@ public class ApnEditorTest {
assertThat(ApnEditor.formatInteger("not an int")).isEqualTo("not an int"); 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 @Test
@Config(shadows = ShadowFragment.class) @Config(shadows = ShadowFragment.class)
public void onCreate_noAction_shouldFinishAndNoCrash() { public void onCreate_noAction_shouldFinishAndNoCrash() {