diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/fullscreen/FullscreenTaskListener.java b/libs/WindowManager/Shell/src/com/android/wm/shell/fullscreen/FullscreenTaskListener.java index b9caf62012a61..26f47fcdaa440 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/fullscreen/FullscreenTaskListener.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/fullscreen/FullscreenTaskListener.java @@ -114,7 +114,9 @@ public class FullscreenTaskListener implements ShellTaskOrganizer.TaskListener { t.setPosition(leash, positionInParent.x, positionInParent.y); t.setAlpha(leash, 1f); t.setMatrix(leash, 1, 0, 0, 1); - t.show(leash); + if (taskInfo.isVisible) { + t.show(leash); + } }); } } diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index 22033e17cbff9..90cae0afe0aa0 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -3327,12 +3327,17 @@ class Task extends TaskFragment { // We intend to let organizer manage task visibility but it doesn't // have enough information until we finish shell transitions. // In the mean time we do an easy fix here. - final boolean show = isVisible() || isAnimating(TRANSITION | PARENTS | CHILDREN); + final boolean visible = isVisible(); + final boolean show = visible || isAnimating(TRANSITION | PARENTS | CHILDREN); if (mSurfaceControl != null) { if (show != mLastSurfaceShowing) { t.setVisibility(mSurfaceControl, show); } } + // Only show the overlay if the task has other visible children + if (mOverlayHost != null) { + mOverlayHost.setVisibility(t, visible); + } mLastSurfaceShowing = show; } diff --git a/services/core/java/com/android/server/wm/TrustedOverlayHost.java b/services/core/java/com/android/server/wm/TrustedOverlayHost.java index 975b21c6f02c0..88c410b263ca9 100644 --- a/services/core/java/com/android/server/wm/TrustedOverlayHost.java +++ b/services/core/java/com/android/server/wm/TrustedOverlayHost.java @@ -80,6 +80,12 @@ class TrustedOverlayHost { } } + void setVisibility(SurfaceControl.Transaction t, boolean visible) { + if (mSurfaceControl != null) { + t.setVisibility(mSurfaceControl, visible); + } + } + void addOverlay(SurfaceControlViewHost.SurfacePackage p, SurfaceControl currentParent) { requireOverlaySurfaceControl(); mOverlays.add(p);