summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/wm/KeyguardController.java4
-rw-r--r--services/core/java/com/android/server/wm/RootWindowContainer.java40
2 files changed, 31 insertions, 13 deletions
diff --git a/services/core/java/com/android/server/wm/KeyguardController.java b/services/core/java/com/android/server/wm/KeyguardController.java
index 3208ae3aa97d..672ebf10dcf0 100644
--- a/services/core/java/com/android/server/wm/KeyguardController.java
+++ b/services/core/java/com/android/server/wm/KeyguardController.java
@@ -66,6 +66,8 @@ class KeyguardController {
private static final String TAG = TAG_WITH_CLASS_NAME ? "KeyguardController" : TAG_ATM;
+ static final String KEYGUARD_SLEEP_TOKEN_TAG = "keyguard";
+
private final ActivityTaskSupervisor mTaskSupervisor;
private WindowManagerService mWindowManager;
private boolean mKeyguardShowing;
@@ -82,7 +84,7 @@ class KeyguardController {
ActivityTaskSupervisor taskSupervisor) {
mService = service;
mTaskSupervisor = taskSupervisor;
- mSleepTokenAcquirer = mService.new SleepTokenAcquirerImpl("keyguard");
+ mSleepTokenAcquirer = mService.new SleepTokenAcquirerImpl(KEYGUARD_SLEEP_TOKEN_TAG);
}
void setWindowManager(WindowManagerService windowManager) {
diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java
index 32147215834f..b6e0d8de31f4 100644
--- a/services/core/java/com/android/server/wm/RootWindowContainer.java
+++ b/services/core/java/com/android/server/wm/RootWindowContainer.java
@@ -66,6 +66,7 @@ import static com.android.server.wm.ActivityTaskSupervisor.ON_TOP;
import static com.android.server.wm.ActivityTaskSupervisor.PRESERVE_WINDOWS;
import static com.android.server.wm.ActivityTaskSupervisor.dumpHistoryList;
import static com.android.server.wm.ActivityTaskSupervisor.printThisActivity;
+import static com.android.server.wm.KeyguardController.KEYGUARD_SLEEP_TOKEN_TAG;
import static com.android.server.wm.RootWindowContainerProto.IS_HOME_RECENTS_COMPONENT;
import static com.android.server.wm.RootWindowContainerProto.KEYGUARD_CONTROLLER;
import static com.android.server.wm.RootWindowContainerProto.WINDOW_CONTAINER;
@@ -2048,7 +2049,7 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
/**
* Move root task with all its existing content to specified task display area.
*
- * @param rootTaskId Id of root task to move.
+ * @param rootTaskId Id of root task to move.
* @param taskDisplayArea The task display area to move root task to.
* @param onTop Indicates whether container should be place on top or on bottom.
*/
@@ -2086,9 +2087,9 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
/**
* Move root task with all its existing content to specified display.
*
- * @param rootTaskId Id of root task to move.
- * @param displayId Id of display to move root task to.
- * @param onTop Indicates whether container should be place on top or on bottom.
+ * @param rootTaskId Id of root task to move.
+ * @param displayId Id of display to move root task to.
+ * @param onTop Indicates whether container should be place on top or on bottom.
*/
void moveRootTaskToDisplay(int rootTaskId, int displayId, boolean onTop) {
final DisplayContent displayContent = getDisplayContentOrCreate(displayId);
@@ -2171,7 +2172,7 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
final ActivityRecord oldTopActivity = task.getTopMostActivity();
if (oldTopActivity != null && oldTopActivity.isState(STOPPED)
&& task.getDisplayContent().mAppTransition.containsTransitRequest(
- TRANSIT_TO_BACK)) {
+ TRANSIT_TO_BACK)) {
task.getDisplayContent().mClosingApps.add(oldTopActivity);
oldTopActivity.mRequestForceTransition = true;
}
@@ -2664,13 +2665,28 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
}
mSleepTokens.remove(token.mHashKey);
final DisplayContent display = getDisplayContent(token.mDisplayId);
- if (display != null) {
- display.mAllSleepTokens.remove(token);
- if (display.mAllSleepTokens.isEmpty()) {
- mService.updateSleepIfNeededLocked();
- if (token.mTag.equals(DISPLAY_OFF_SLEEP_TOKEN_TAG)) {
- display.mSkipAppTransitionAnimation = true;
- }
+ if (display == null) {
+ Slog.d(TAG, "Remove sleep token for non-existing display: " + token + " from "
+ + Debug.getCallers(6));
+ return;
+ }
+
+ display.mAllSleepTokens.remove(token);
+ if (display.mAllSleepTokens.isEmpty()) {
+ mService.updateSleepIfNeededLocked();
+ // Assuming no lock screen is set and a user launches an activity, turns off the screen
+ // and turn on the screen again, then the launched activity should be displayed on the
+ // screen without app transition animation. When the screen turns on, both keyguard
+ // sleep token and display off sleep token are removed, but the order is
+ // non-deterministic.
+ // Note: Display#mSkipAppTransitionAnimation will be ignored when keyguard related
+ // transition exists, so this affects only when no lock screen is set. Otherwise
+ // keyguard going away animation will be played.
+ // See also AppTransitionController#getTransitCompatType for more details.
+ if ((!mTaskSupervisor.getKeyguardController().isDisplayOccluded(display.mDisplayId)
+ && token.mTag.equals(KEYGUARD_SLEEP_TOKEN_TAG))
+ || token.mTag.equals(DISPLAY_OFF_SLEEP_TOKEN_TAG)) {
+ display.mSkipAppTransitionAnimation = true;
}
}
}