Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b281aa2d authored by Weng Su's avatar Weng Su Committed by Nolen Johnson
Browse files

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
make RunSettingsRoboTests ROBOTEST_FILTER=ApnEditorTest
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:5c2d727b8f9198bf758a4896eda7c9e5385435ff)
Merged-In: Iecdbbff7e21dfb11e3ba385858747a220cfd3e04
Change-Id: Iecdbbff7e21dfb11e3ba385858747a220cfd3e04
parent b585ef7e
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
@@ -27,6 +27,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.support.annotation.VisibleForTesting;
import android.support.v14.preference.MultiSelectListPreference;
@@ -203,6 +204,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;
        }

        addPreferencesFromResource(R.xml.apn_editor);

@@ -1166,6 +1172,23 @@ public class ApnEditor extends SettingsPreferenceFragment
        return userEnteredApnType;
    }

    @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;
    }

    public static class ErrorDialog extends InstrumentedDialogFragment {

        public static void showError(ApnEditor editor) {
+30 −1
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ import android.content.Context;
import android.content.res.Resources;
import android.database.Cursor;
import android.net.Uri;
import android.os.UserManager;
import android.support.v14.preference.MultiSelectListPreference;
import android.support.v14.preference.SwitchPreference;
import android.support.v7.preference.EditTextPreference;
@@ -97,6 +98,8 @@ public class ApnEditorTest {

    private ApnEditor mApnEditorUT;
    private Activity mActivity;
    @Mock
    private UserManager mUserManager;
    private Resources mResources;

    @Before
@@ -111,6 +114,11 @@ public class ApnEditorTest {
        doNothing().when(mApnEditorUT).finish();
        doNothing().when(mApnEditorUT).showError();

        doReturn(mUserManager).when(mContext).getSystemService(UserManager.class);
        doReturn(true).when(mUserManager).isAdminUser();
        doReturn(false).when(mUserManager)
                .hasUserRestriction(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS);

        setMockPreference(mActivity);
        mApnEditorUT.mApnData = new FakeApnData(APN_DATA);
        mApnEditorUT.sNotSet = "Not Set";
@@ -447,6 +455,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();
    }

    private void initCursor() {
        doReturn(2).when(mCursor).getColumnCount();
        doReturn(Integer.valueOf(2)).when(mCursor).getInt(CURSOR_INTEGER_INDEX);