summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/wm/ActivityRecord.java12
-rw-r--r--services/core/java/com/android/server/wm/RootWindowContainer.java21
2 files changed, 27 insertions, 6 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
index 2ea59b3fd6fd..6944b2918d84 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -5266,10 +5266,20 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
mTransitionController.collect(this);
} else {
inFinishingTransition = mTransitionController.inFinishingTransition(this);
- if (!inFinishingTransition) {
+ if (!inFinishingTransition && !mDisplayContent.isSleeping()) {
Slog.e(TAG, "setVisibility=" + visible
+ " while transition is not collecting or finishing "
+ this + " caller=" + Debug.getCallers(8));
+ // Force showing the parents because they may be hidden by previous transition.
+ if (visible) {
+ final Transaction t = getSyncTransaction();
+ for (WindowContainer<?> p = getParent(); p != null && p != mDisplayContent;
+ p = p.getParent()) {
+ if (p.mSurfaceControl != null) {
+ t.show(p.mSurfaceControl);
+ }
+ }
+ }
}
}
}
diff --git a/services/core/java/com/android/server/wm/RootWindowContainer.java b/services/core/java/com/android/server/wm/RootWindowContainer.java
index 2f5634362e68..07daa4b22ac9 100644
--- a/services/core/java/com/android/server/wm/RootWindowContainer.java
+++ b/services/core/java/com/android/server/wm/RootWindowContainer.java
@@ -2349,12 +2349,23 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
}
// Prepare transition before resume top activity, so it can be collected.
- if (!displayShouldSleep && display.isDefaultDisplay
- && !display.getDisplayPolicy().isAwake()
- && display.mTransitionController.isShellTransitionsEnabled()
+ if (!displayShouldSleep && display.mTransitionController.isShellTransitionsEnabled()
&& !display.mTransitionController.isCollecting()) {
- display.mTransitionController.requestTransitionIfNeeded(TRANSIT_WAKE,
- 0 /* flags */, null /* trigger */, display);
+ int transit = TRANSIT_NONE;
+ if (!display.getDisplayPolicy().isAwake()) {
+ // Note that currently this only happens on default display because non-default
+ // display is always awake.
+ transit = TRANSIT_WAKE;
+ } else if (display.isKeyguardOccluded()) {
+ // The display was awake so this is resuming activity for occluding keyguard.
+ transit = WindowManager.TRANSIT_KEYGUARD_OCCLUDE;
+ }
+ if (transit != TRANSIT_NONE) {
+ display.mTransitionController.requestStartTransition(
+ display.mTransitionController.createTransition(transit),
+ null /* startTask */, null /* remoteTransition */,
+ null /* displayChange */);
+ }
}
// Set the sleeping state of the root tasks on the display.
display.forAllRootTasks(rootTask -> {