diff options
| -rw-r--r-- | services/core/java/com/android/server/wm/ActivityRecord.java | 12 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/RootWindowContainer.java | 21 |
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 -> { |