Block sleep options in Settings app when DISALLOW_CONFIG_SCREEN_TIMEOUT is set.

Test: m -j RunSettingsRoboTests
Bug: 67675734
Change-Id: Icdcadd03caa2884338d4300fb41f0036b8b9eb51
This commit is contained in:
yuemingw
2018-01-18 21:05:12 +00:00
parent ad6ba3bd5a
commit cdeeaff473
3 changed files with 51 additions and 4 deletions

View File

@@ -13,9 +13,11 @@
*/
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.os.UserHandle;
import android.os.UserManager;
import android.provider.Settings;
import android.support.v7.preference.Preference;
import android.util.Log;
@@ -25,10 +27,9 @@ import com.android.settings.TimeoutListPreference;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.wrapper.DevicePolicyManagerWrapper;
import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
import com.android.settingslib.core.AbstractPreferenceController;
import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;
public class TimeoutPreferenceController extends AbstractPreferenceController implements
PreferenceControllerMixin, Preference.OnPreferenceChangeListener {
@@ -69,6 +70,13 @@ public class TimeoutPreferenceController extends AbstractPreferenceController im
timeoutListPreference.removeUnusableTimeouts(maxTimeout, admin);
}
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

View File

@@ -20,8 +20,12 @@ import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;
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.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@@ -34,16 +38,20 @@ import com.android.settings.TestConfig;
import com.android.settings.TimeoutListPreference;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.testutils.shadow.ShadowDevicePolicyManagerWrapper;
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION,
@@ -93,4 +101,34 @@ public class TimeoutPreferenceControllerTest {
mController.updateState(mPreference);
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);
}
}

View File

@@ -65,7 +65,8 @@ public class UserRestrictionTest {
UserManager.DISALLOW_CONFIG_VPN,
UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS,
UserManager.DISALLOW_AIRPLANE_MODE,
UserManager.DISALLOW_CONFIG_BRIGHTNESS
UserManager.DISALLOW_CONFIG_BRIGHTNESS,
UserManager.DISALLOW_CONFIG_SCREEN_TIMEOUT
);
@Before