diff options
author | 2024-05-22 12:01:39 +0000 | |
---|---|---|
committer | 2024-05-22 12:01:39 +0000 | |
commit | 64d7a0859d49c72017f7ef8ac4af3bf8b11b772d (patch) | |
tree | 9c0685987520488f0ca7a8d594abe54dd8e10438 | |
parent | fdfc178754a48aa5bd9782e51f9fab9f0e4d87e6 (diff) | |
parent | 9d48942ca0d7f4a4eb3529b16260ba8c4ec3af3c (diff) |
Merge "Narrow down the condition of wallpaper target for occluded keyguard" into 24D1-dev
3 files changed, 34 insertions, 1 deletions
diff --git a/services/core/java/com/android/server/wm/TransitionController.java b/services/core/java/com/android/server/wm/TransitionController.java index 503f925bf557..1e34ad9dd094 100644 --- a/services/core/java/com/android/server/wm/TransitionController.java +++ b/services/core/java/com/android/server/wm/TransitionController.java @@ -493,6 +493,27 @@ class TransitionController { return false; } + /** Returns {@code true} if the display contains a transient-launch transition. */ + boolean hasTransientLaunch(@NonNull DisplayContent dc) { + if (mCollectingTransition != null && mCollectingTransition.hasTransientLaunch() + && mCollectingTransition.isOnDisplay(dc)) { + return true; + } + for (int i = mWaitingTransitions.size() - 1; i >= 0; --i) { + final Transition transition = mWaitingTransitions.get(i); + if (transition.hasTransientLaunch() && transition.isOnDisplay(dc)) { + return true; + } + } + for (int i = mPlayingTransitions.size() - 1; i >= 0; --i) { + final Transition transition = mPlayingTransitions.get(i); + if (transition.hasTransientLaunch() && transition.isOnDisplay(dc)) { + return true; + } + } + return false; + } + boolean isTransientHide(@NonNull Task task) { if (mCollectingTransition != null && mCollectingTransition.isInTransientHide(task)) { return true; diff --git a/services/core/java/com/android/server/wm/WallpaperController.java b/services/core/java/com/android/server/wm/WallpaperController.java index c2b847cd08d7..1ac46efe05ba 100644 --- a/services/core/java/com/android/server/wm/WallpaperController.java +++ b/services/core/java/com/android/server/wm/WallpaperController.java @@ -166,7 +166,7 @@ class WallpaperController { || (w.mActivityRecord != null && !w.mActivityRecord.fillsParent()); } } else if (w.hasWallpaper() && mService.mPolicy.isKeyguardHostWindow(w.mAttrs) - && w.mTransitionController.isTransitionOnDisplay(mDisplayContent)) { + && w.mTransitionController.hasTransientLaunch(mDisplayContent)) { // If we have no candidates at all, notification shade is allowed to be the target // of last resort even if it has not been made visible yet. if (DEBUG_WALLPAPER) Slog.v(TAG, "Found keyguard as wallpaper target: " + w); diff --git a/services/tests/wmtests/src/com/android/server/wm/WallpaperControllerTests.java b/services/tests/wmtests/src/com/android/server/wm/WallpaperControllerTests.java index 72bedf2da21f..69f33d4f1965 100644 --- a/services/tests/wmtests/src/com/android/server/wm/WallpaperControllerTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/WallpaperControllerTests.java @@ -314,6 +314,18 @@ public class WallpaperControllerTests extends WindowTestsBase { // Wallpaper is invisible because the lowest show-when-locked activity is opaque. assertNull(wallpaperController.getWallpaperTarget()); + // Only transient-launch transition will make notification shade as last resort target. + // This verifies that regular transition won't choose invisible keyguard as the target. + final WindowState keyguard = createWindow(null /* parent */, + WindowManager.LayoutParams.TYPE_NOTIFICATION_SHADE, "keyguard"); + keyguard.mAttrs.flags |= FLAG_SHOW_WALLPAPER; + registerTestTransitionPlayer(); + final Transition transition = wallpaperWindow.mTransitionController.createTransition( + WindowManager.TRANSIT_CHANGE); + transition.collect(keyguard); + wallpaperController.adjustWallpaperWindows(); + assertNull(wallpaperController.getWallpaperTarget()); + // A show-when-locked wallpaper is used for lockscreen. So the top wallpaper should // be the one that is not show-when-locked. final WindowState wallpaperWindow2 = createWallpaperWindow(mDisplayContent); |