[RESTRICT AUTOMERGE] Make LockTaskController default behaviour match ScreenPinningSettings.

Fixes: 127605586
Test: atest LockTaskControllerTest
Change-Id: I7d4c53fd6740f500d1a0ce18b47b83ed895300a5
(cherry picked from commit 5d6c1e8f45)
This commit is contained in:
Jonathan Scott
2019-04-29 18:03:58 +01:00
committed by android-build-team Robot
parent b869620327
commit 2917b1f0d7
2 changed files with 91 additions and 11 deletions

View File

@@ -777,18 +777,24 @@ public class LockTaskController {
* leaves the pinned mode.
*/
private void lockKeyguardIfNeeded() {
if (shouldLockKeyguard()) {
mWindowManager.lockNow(null);
mWindowManager.dismissKeyguard(null /* callback */, null /* message */);
getLockPatternUtils().requireCredentialEntry(USER_ALL);
}
}
private boolean shouldLockKeyguard() {
// This functionality should be kept consistent with
// com.android.settings.security.ScreenPinningSettings (see b/127605586)
try {
boolean shouldLockKeyguard = Settings.Secure.getIntForUser(
return Settings.Secure.getIntForUser(
mContext.getContentResolver(),
Settings.Secure.LOCK_TO_APP_EXIT_LOCKED,
USER_CURRENT) != 0;
if (shouldLockKeyguard) {
mWindowManager.lockNow(null);
mWindowManager.dismissKeyguard(null /* callback */, null /* message */);
getLockPatternUtils().requireCredentialEntry(USER_ALL);
}
Settings.Secure.LOCK_TO_APP_EXIT_LOCKED, USER_CURRENT) != 0;
} catch (Settings.SettingNotFoundException e) {
// No setting, don't lock.
// Log to SafetyNet for b/127605586
android.util.EventLog.writeEvent(0x534e4554, "127605586", -1, "");
return mLockPatternUtils.isSecure(USER_CURRENT);
}
}

View File

@@ -389,7 +389,7 @@ public class LockTaskControllerTest {
mLockTaskController.startLockTaskMode(tr1, false, TEST_UID);
mLockTaskController.startLockTaskMode(tr2, false, TEST_UID);
// WHEN calling stopLockTaskMode on the root task
// WHEN calling clearLockedTasks on the root task
mLockTaskController.clearLockedTasks("testClearLockedTasks");
// THEN the lock task mode should be inactive
@@ -403,7 +403,81 @@ public class LockTaskControllerTest {
}
@Test
public void testUpdateLockTaskPackages() throws Exception {
public void testClearLockedTasks_noLockSetting_noPassword_deviceIsUnlocked() throws Exception {
// GIVEN There is no setting set for LOCK_TO_APP_EXIT_LOCKED
Settings.Secure.clearProviderForTest();
// AND no password is set
when(mLockPatternUtils.getKeyguardStoredPasswordQuality(anyInt()))
.thenReturn(DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED);
// AND there is a task record
TaskRecord tr1 = getTaskRecord(TaskRecord.LOCK_TASK_AUTH_WHITELISTED);
mLockTaskController.startLockTaskMode(tr1, true, TEST_UID);
// WHEN calling clearLockedTasks on the root task
mLockTaskController.clearLockedTasks("testClearLockedTasks");
// THEN the device should not be locked
verify(mWindowManager, never()).lockNow(any());
}
@Test
public void testClearLockedTasks_noLockSetting_password_deviceIsLocked() throws Exception {
// GIVEN There is no setting set for LOCK_TO_APP_EXIT_LOCKED
Settings.Secure.clearProviderForTest();
// AND a password is set
when(mLockPatternUtils.isSecure(anyInt()))
.thenReturn(true);
// AND there is a task record
TaskRecord tr1 = getTaskRecord(TaskRecord.LOCK_TASK_AUTH_WHITELISTED);
mLockTaskController.startLockTaskMode(tr1, true, TEST_UID);
// WHEN calling clearLockedTasks on the root task
mLockTaskController.clearLockedTasks("testClearLockedTasks");
// THEN the device should be locked
verify(mWindowManager, times(1)).lockNow(any());
}
@Test
public void testClearLockedTasks_lockSettingTrue_deviceIsLocked() throws Exception {
// GIVEN LOCK_TO_APP_EXIT_LOCKED is set to 1
Settings.Secure.putIntForUser(mContext.getContentResolver(),
Settings.Secure.LOCK_TO_APP_EXIT_LOCKED, 1, mContext.getUserId());
// AND there is a task record
TaskRecord tr1 = getTaskRecord(TaskRecord.LOCK_TASK_AUTH_WHITELISTED);
mLockTaskController.startLockTaskMode(tr1, true, TEST_UID);
// WHEN calling clearLockedTasks on the root task
mLockTaskController.clearLockedTasks("testClearLockedTasks");
// THEN the device should be locked
verify(mWindowManager, times(1)).lockNow(any());
}
@Test
public void testClearLockedTasks_lockSettingFalse_doesNotRequirePassword() throws Exception {
// GIVEN LOCK_TO_APP_EXIT_LOCKED is set to 1
Settings.Secure.putIntForUser(mContext.getContentResolver(),
Settings.Secure.LOCK_TO_APP_EXIT_LOCKED, 0, mContext.getUserId());
// AND there is a task record
TaskRecord tr1 = getTaskRecord(TaskRecord.LOCK_TASK_AUTH_WHITELISTED);
mLockTaskController.startLockTaskMode(tr1, true, TEST_UID);
// WHEN calling clearLockedTasks on the root task
mLockTaskController.clearLockedTasks("testClearLockedTasks");
// THEN the device should be unlocked
verify(mWindowManager, never()).lockNow(any());
}
@Test
public void testUpdateLockTaskPackages() {
String[] whitelist1 = {TEST_PACKAGE_NAME, TEST_PACKAGE_NAME_2};
String[] whitelist2 = {TEST_PACKAGE_NAME};