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

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

Merge "Block sleep options in Settings app when DISALLOW_CONFIG_SCREEN_TIMEOUT is set."

parents 95c89da2 cdeeaff4
Loading
Loading
Loading
Loading
+11 −3
Original line number Original line Diff line number Diff line
@@ -13,9 +13,11 @@
 */
 */
package com.android.settings.display;
package com.android.settings.display;


import android.app.admin.DevicePolicyManager;
import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;

import android.content.Context;
import android.content.Context;
import android.os.UserHandle;
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.Settings;
import android.provider.Settings;
import android.support.v7.preference.Preference;
import android.support.v7.preference.Preference;
import android.util.Log;
import android.util.Log;
@@ -25,10 +27,9 @@ import com.android.settings.TimeoutListPreference;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.wrapper.DevicePolicyManagerWrapper;
import com.android.settings.wrapper.DevicePolicyManagerWrapper;
import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.AbstractPreferenceController;


import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;

public class TimeoutPreferenceController extends AbstractPreferenceController implements
public class TimeoutPreferenceController extends AbstractPreferenceController implements
        PreferenceControllerMixin, Preference.OnPreferenceChangeListener {
        PreferenceControllerMixin, Preference.OnPreferenceChangeListener {


@@ -69,6 +70,13 @@ public class TimeoutPreferenceController extends AbstractPreferenceController im
            timeoutListPreference.removeUnusableTimeouts(maxTimeout, admin);
            timeoutListPreference.removeUnusableTimeouts(maxTimeout, admin);
        }
        }
        updateTimeoutPreferenceDescription(timeoutListPreference, currentTimeout);
        updateTimeoutPreferenceDescription(timeoutListPreference, currentTimeout);

        EnforcedAdmin admin = RestrictedLockUtils.checkIfRestrictionEnforced(
                        mContext, UserManager.DISALLOW_CONFIG_SCREEN_TIMEOUT,
                        UserHandle.myUserId());
        if(admin != null) {
            timeoutListPreference.removeUnusableTimeouts(0/* disable all*/, admin);
        }
    }
    }


    @Override
    @Override
+38 −0
Original line number Original line Diff line number Diff line
@@ -20,8 +20,12 @@ import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;


import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assertThat;


import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertTrue;

import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.mockito.Mockito.when;


@@ -34,16 +38,20 @@ import com.android.settings.TestConfig;
import com.android.settings.TimeoutListPreference;
import com.android.settings.TimeoutListPreference;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.testutils.shadow.ShadowDevicePolicyManagerWrapper;
import com.android.settings.testutils.shadow.ShadowDevicePolicyManagerWrapper;
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;


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


import java.util.ArrayList;
import java.util.Collections;
import java.util.Collections;
import java.util.List;


@RunWith(SettingsRobolectricTestRunner.class)
@RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION,
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION,
@@ -93,4 +101,34 @@ public class TimeoutPreferenceControllerTest {
        mController.updateState(mPreference);
        mController.updateState(mPreference);
        verify(mPreference).removeUnusableTimeouts(timeout, null);
        verify(mPreference).removeUnusableTimeouts(timeout, null);
    }
    }

    @Test
    public void testUpdateStateWithAdminTimeoutsAndRestriction() {
        final int profileUserId = UserHandle.myUserId();
        final long timeout = 100;
        when(mUserManager.getProfiles(profileUserId)).thenReturn(Collections.emptyList());
        ShadowDevicePolicyManagerWrapper.setMaximumTimeToLock(profileUserId, timeout);

        int userId = UserHandle.myUserId();
        List<UserManager.EnforcingUser> enforcingUsers = new ArrayList<>();
        // Add two enforcing users so that RestrictedLockUtils.checkIfRestrictionEnforced returns
        // non-null.
        enforcingUsers.add(new UserManager.EnforcingUser(userId,
                UserManager.RESTRICTION_SOURCE_DEVICE_OWNER));
        enforcingUsers.add(new UserManager.EnforcingUser(userId,
                UserManager.RESTRICTION_SOURCE_PROFILE_OWNER));
        when(mUserManager.getUserRestrictionSources(
                UserManager.DISALLOW_CONFIG_SCREEN_TIMEOUT, UserHandle.of(userId)))
                .thenReturn(enforcingUsers);

        mController.updateState(mPreference);

        ArgumentCaptor<Long> longCaptor = ArgumentCaptor.forClass(Long.class);
        ArgumentCaptor<EnforcedAdmin> adminCaptor = ArgumentCaptor.forClass(EnforcedAdmin.class);

        verify(mPreference, times(2)).removeUnusableTimeouts(
                longCaptor.capture(), adminCaptor.capture());
        assertEquals(0, (long)longCaptor.getValue());
        assertTrue(adminCaptor.getValue() != null);
    }
}
}
+2 −1
Original line number Original line Diff line number Diff line
@@ -66,7 +66,8 @@ public class UserRestrictionTest {
            UserManager.DISALLOW_CONFIG_VPN,
            UserManager.DISALLOW_CONFIG_VPN,
            UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS,
            UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS,
            UserManager.DISALLOW_AIRPLANE_MODE,
            UserManager.DISALLOW_AIRPLANE_MODE,
            UserManager.DISALLOW_CONFIG_BRIGHTNESS
            UserManager.DISALLOW_CONFIG_BRIGHTNESS,
            UserManager.DISALLOW_CONFIG_SCREEN_TIMEOUT
    );
    );


    @Before
    @Before