From a7a61594df2f0b6ee9e3577f3d928e5f01ab4a75 Mon Sep 17 00:00:00 2001 From: Jason Monk Date: Wed, 3 Sep 2014 13:17:05 -0400 Subject: [PATCH] Add lock task checking to moving tasks to back Chrome seems to use this method of moving itself to the back on back presses, causing it to escape lock task mode. Bug: 17365048 Change-Id: I2e8bc614f771951ed96cfc36f9789d12b1742e70 --- .../server/am/ActivityManagerService.java | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 008ec99411148..2e9df8a5171ed 100755 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -8408,6 +8408,10 @@ public final class ActivityManagerService extends ActivityManagerNative synchronized(this) { TaskRecord tr = recentTaskForIdLocked(taskId); if (tr != null) { + if (tr == mStackSupervisor.mLockTaskModeTask) { + mStackSupervisor.showLockTaskToast(); + return; + } if (DEBUG_STACK) Slog.d(TAG, "moveTaskToBack: moving task=" + tr); ActivityStack stack = tr.stack; if (stack.mResumedActivity != null && stack.mResumedActivity.task == tr) { @@ -8440,11 +8444,19 @@ public final class ActivityManagerService extends ActivityManagerNative enforceNotIsolatedCaller("moveActivityTaskToBack"); synchronized(this) { final long origId = Binder.clearCallingIdentity(); - int taskId = ActivityRecord.getTaskForActivityLocked(token, !nonRoot); - if (taskId >= 0) { - return ActivityRecord.getStackLocked(token).moveTaskToBackLocked(taskId, null); + try { + int taskId = ActivityRecord.getTaskForActivityLocked(token, !nonRoot); + if (taskId >= 0) { + if ((mStackSupervisor.mLockTaskModeTask != null) + && (mStackSupervisor.mLockTaskModeTask.taskId == taskId)) { + mStackSupervisor.showLockTaskToast(); + return false; + } + return ActivityRecord.getStackLocked(token).moveTaskToBackLocked(taskId, null); + } + } finally { + Binder.restoreCallingIdentity(origId); } - Binder.restoreCallingIdentity(origId); } return false; }