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

Commit 08575e11 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Apply admin restriction when network reset is disallowed" into oc-dev

parents 2721c8aa 5ca9063b
Loading
Loading
Loading
Loading
+4 −12
Original line number Diff line number Diff line
@@ -17,9 +17,6 @@
package com.android.settings.network;

import android.content.Context;
import android.os.UserHandle;
import android.os.UserManager;
import android.support.annotation.VisibleForTesting;
import android.view.Menu;
import android.view.MenuItem;

@@ -27,15 +24,16 @@ import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.ResetNetwork;
import com.android.settings.Utils;
import com.android.settingslib.RestrictedLockUtils;

public class NetworkResetActionMenuController {

    private static final int MENU_NETWORK_RESET = Menu.FIRST + 200;
    private final Context mContext;
    private final NetworkResetRestrictionChecker mRestrictionChecker;

    public NetworkResetActionMenuController(Context context) {
        mContext = context;
        mRestrictionChecker = new NetworkResetRestrictionChecker(context);
    }

    public void buildMenuItem(Menu menu) {
@@ -53,14 +51,8 @@ public class NetworkResetActionMenuController {
        }
    }

    @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
    boolean isAvailable() {
        return isAvailable(mContext);
    }

    static boolean isAvailable(Context context) {
        return !RestrictedLockUtils.hasBaseUserRestriction(context,
                UserManager.DISALLOW_NETWORK_RESET, UserHandle.myUserId());
    boolean isAvailable() {
        return !mRestrictionChecker.hasRestriction();
    }

}
+4 −1
Original line number Diff line number Diff line
@@ -22,13 +22,16 @@ import com.android.settings.core.PreferenceController;

public class NetworkResetPreferenceController extends PreferenceController {

    private final NetworkResetRestrictionChecker mRestrictionChecker;

    public NetworkResetPreferenceController(Context context) {
        super(context);
        mRestrictionChecker = new NetworkResetRestrictionChecker(context);
    }

    @Override
    public boolean isAvailable() {
        return NetworkResetActionMenuController.isAvailable(mContext);
        return !mRestrictionChecker.hasRestriction();
    }

    @Override
+53 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2017 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.settings.network;

import android.content.Context;
import android.os.UserHandle;
import android.os.UserManager;
import android.support.annotation.VisibleForTesting;

import com.android.settingslib.RestrictedLockUtils;

public class NetworkResetRestrictionChecker {

    private final Context mContext;
    private final UserManager mUserManager;

    public NetworkResetRestrictionChecker(Context context) {
        mContext = context;
        mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
    }

    @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
    boolean hasUserBaseRestriction() {
        return RestrictedLockUtils.hasBaseUserRestriction(mContext,
                UserManager.DISALLOW_NETWORK_RESET, UserHandle.myUserId());
    }

    @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE)
    boolean isRestrictionEnforcedByAdmin() {
        return RestrictedLockUtils.checkIfRestrictionEnforced(
                mContext, UserManager.DISALLOW_NETWORK_RESET, UserHandle.myUserId()) != null;
    }

    boolean hasRestriction() {
        return !mUserManager.isAdminUser()
                || hasUserBaseRestriction()
                || isRestrictionEnforcedByAdmin();
    }
}
+7 −6
Original line number Diff line number Diff line
@@ -19,9 +19,7 @@ package com.android.settings.network;

import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

@@ -39,6 +37,7 @@ import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import org.robolectric.util.ReflectionHelpers;

@RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
@@ -50,19 +49,21 @@ public class NetworkResetActionMenuControllerTest {
    private Menu mMenu;
    @Mock
    private MenuItem mMenuItem;
    @Mock
    private NetworkResetRestrictionChecker mRestrictionChecker;

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
        mContext = RuntimeEnvironment.application;
        mController = spy(new NetworkResetActionMenuController(mContext));
        mController = new NetworkResetActionMenuController(mContext);
        ReflectionHelpers.setField(mController, "mRestrictionChecker", mRestrictionChecker);
        when(mMenu.add(anyInt(), anyInt(), anyInt(), anyInt())).thenReturn(mMenuItem);
    }

    @Test
    public void buildMenuItem_available_shouldAddToMenu() {
        doReturn(true).when(mController).isAvailable();

        when(mRestrictionChecker.hasRestriction()).thenReturn(false);
        mController.buildMenuItem(mMenu);

        verify(mMenu).add(anyInt(), anyInt(), anyInt(), anyInt());
@@ -71,7 +72,7 @@ public class NetworkResetActionMenuControllerTest {

    @Test
    public void buildMenuItem_notAvailable_shouldNotAddToMenu() {
        doReturn(false).when(mController).isAvailable();
        when(mRestrictionChecker.hasRestriction()).thenReturn(true);

        mController.buildMenuItem(mMenu);

+90 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2017 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.settings.network;

import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;

import android.content.Context;
import android.os.UserManager;

import com.android.settings.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.annotation.Config;

@RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
public class NetworkResetRestrictionCheckerTest {

    @Mock
    private UserManager mUserManager;
    @Mock
    private Context mContext;
    private NetworkResetRestrictionChecker mRestrictionChecker;

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
        when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
        mRestrictionChecker = spy(new NetworkResetRestrictionChecker(mContext));
    }

    @Test
    public void testHasRestriction_notAdmin_shouldReturnTrue() {
        final Context context = mock(Context.class);
        when(context.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
        when(mUserManager.isAdminUser()).thenReturn(false);

        assertThat(mRestrictionChecker.hasRestriction()).isTrue();
    }

    @Test
    public void testHasRestriction_hasUserRestriction_shouldReturnTrue() {
        when(mUserManager.isAdminUser()).thenReturn(true);
        doReturn(true).when(mRestrictionChecker).hasUserBaseRestriction();
        doReturn(false).when(mRestrictionChecker).isRestrictionEnforcedByAdmin();

        assertThat(mRestrictionChecker.hasRestriction()).isTrue();
    }

    @Test
    public void testHasRestriction_hasAdminRestriction_shouldReturnTrue() {
        when(mUserManager.isAdminUser()).thenReturn(true);
        doReturn(false).when(mRestrictionChecker).hasUserBaseRestriction();
        doReturn(true).when(mRestrictionChecker).isRestrictionEnforcedByAdmin();

        assertThat(mRestrictionChecker.hasRestriction()).isTrue();
    }

    @Test
    public void testHasRestriction_noRestriction_shouldReturnFalse() {
        when(mUserManager.isAdminUser()).thenReturn(true);
        doReturn(false).when(mRestrictionChecker).hasUserBaseRestriction();
        doReturn(false).when(mRestrictionChecker).isRestrictionEnforcedByAdmin();

        assertThat(mRestrictionChecker.hasRestriction()).isFalse();
    }
}