Headless: fix locking work profile with separate challenge on power button
SystemUI is querying the profile of its own running user, but in headless system user mode this should really be the current foreground user. Also fix a bug in DevicePolicyManager where device lock timeout is pushed to the wrong user. Bug: 265021591 Test: manual run of the CtsVerifier test Change-Id: I714cda9040b8712df6753a9d37e8c293fe527ad9
This commit is contained in:
@@ -1610,8 +1610,9 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
|
||||
}
|
||||
|
||||
private void doKeyguardLaterForChildProfilesLocked() {
|
||||
UserManager um = UserManager.get(mContext);
|
||||
for (int profileId : um.getEnabledProfileIds(UserHandle.myUserId())) {
|
||||
for (UserInfo profile : mUserTracker.getUserProfiles()) {
|
||||
if (!profile.isEnabled()) continue;
|
||||
final int profileId = profile.id;
|
||||
if (mLockPatternUtils.isSeparateProfileChallengeEnabled(profileId)) {
|
||||
long userTimeout = getLockTimeout(profileId);
|
||||
if (userTimeout == 0) {
|
||||
@@ -1634,8 +1635,9 @@ public class KeyguardViewMediator implements CoreStartable, Dumpable,
|
||||
}
|
||||
|
||||
private void doKeyguardForChildProfilesLocked() {
|
||||
UserManager um = UserManager.get(mContext);
|
||||
for (int profileId : um.getEnabledProfileIds(UserHandle.myUserId())) {
|
||||
for (UserInfo profile : mUserTracker.getUserProfiles()) {
|
||||
if (!profile.isEnabled()) continue;
|
||||
final int profileId = profile.id;
|
||||
if (mLockPatternUtils.isSeparateProfileChallengeEnabled(profileId)) {
|
||||
lockProfile(profileId);
|
||||
}
|
||||
|
||||
@@ -5865,8 +5865,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
||||
// would allow bypassing of the maximum time to lock.
|
||||
mInjector.settingsGlobalPutInt(Settings.Global.STAY_ON_WHILE_PLUGGED_IN, 0);
|
||||
}
|
||||
getPowerManagerInternal().setMaximumScreenOffTimeoutFromDeviceAdmin(
|
||||
UserHandle.USER_SYSTEM, timeMs);
|
||||
getPowerManagerInternal().setMaximumScreenOffTimeoutFromDeviceAdmin(parentId, timeMs);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -3267,31 +3267,31 @@ public class DevicePolicyManagerTest extends DpmTestBase {
|
||||
reset(getServices().settings);
|
||||
|
||||
dpm.setMaximumTimeToLock(admin1, 0);
|
||||
verifyScreenTimeoutCall(null, UserHandle.USER_SYSTEM);
|
||||
verifyScreenTimeoutCall(null, CALLER_USER_HANDLE);
|
||||
verifyStayOnWhilePluggedCleared(false);
|
||||
reset(getServices().powerManagerInternal);
|
||||
reset(getServices().settings);
|
||||
|
||||
dpm.setMaximumTimeToLock(admin1, 1);
|
||||
verifyScreenTimeoutCall(1L, UserHandle.USER_SYSTEM);
|
||||
verifyScreenTimeoutCall(1L, CALLER_USER_HANDLE);
|
||||
verifyStayOnWhilePluggedCleared(true);
|
||||
reset(getServices().powerManagerInternal);
|
||||
reset(getServices().settings);
|
||||
|
||||
dpm.setMaximumTimeToLock(admin2, 10);
|
||||
verifyScreenTimeoutCall(null, UserHandle.USER_SYSTEM);
|
||||
verifyScreenTimeoutCall(null, CALLER_USER_HANDLE);
|
||||
verifyStayOnWhilePluggedCleared(false);
|
||||
reset(getServices().powerManagerInternal);
|
||||
reset(getServices().settings);
|
||||
|
||||
dpm.setMaximumTimeToLock(admin1, 5);
|
||||
verifyScreenTimeoutCall(5L, UserHandle.USER_SYSTEM);
|
||||
verifyScreenTimeoutCall(5L, CALLER_USER_HANDLE);
|
||||
verifyStayOnWhilePluggedCleared(true);
|
||||
reset(getServices().powerManagerInternal);
|
||||
reset(getServices().settings);
|
||||
|
||||
dpm.setMaximumTimeToLock(admin2, 4);
|
||||
verifyScreenTimeoutCall(4L, UserHandle.USER_SYSTEM);
|
||||
verifyScreenTimeoutCall(4L, CALLER_USER_HANDLE);
|
||||
verifyStayOnWhilePluggedCleared(true);
|
||||
reset(getServices().powerManagerInternal);
|
||||
reset(getServices().settings);
|
||||
@@ -3301,20 +3301,20 @@ public class DevicePolicyManagerTest extends DpmTestBase {
|
||||
reset(getServices().settings);
|
||||
|
||||
dpm.setMaximumTimeToLock(admin2, Long.MAX_VALUE);
|
||||
verifyScreenTimeoutCall(Long.MAX_VALUE, UserHandle.USER_SYSTEM);
|
||||
verifyScreenTimeoutCall(Long.MAX_VALUE, CALLER_USER_HANDLE);
|
||||
verifyStayOnWhilePluggedCleared(true);
|
||||
reset(getServices().powerManagerInternal);
|
||||
reset(getServices().settings);
|
||||
|
||||
dpm.setMaximumTimeToLock(admin2, 10);
|
||||
verifyScreenTimeoutCall(10L, UserHandle.USER_SYSTEM);
|
||||
verifyScreenTimeoutCall(10L, CALLER_USER_HANDLE);
|
||||
verifyStayOnWhilePluggedCleared(true);
|
||||
reset(getServices().powerManagerInternal);
|
||||
reset(getServices().settings);
|
||||
|
||||
// There's no restriction; should be set to MAX.
|
||||
dpm.setMaximumTimeToLock(admin2, 0);
|
||||
verifyScreenTimeoutCall(Long.MAX_VALUE, UserHandle.USER_SYSTEM);
|
||||
verifyScreenTimeoutCall(Long.MAX_VALUE, CALLER_USER_HANDLE);
|
||||
verifyStayOnWhilePluggedCleared(false);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user