From 277fb13f2b4394c3eb4ab74b86e53996172b6815 Mon Sep 17 00:00:00 2001 From: wilsonshih Date: Tue, 11 Jul 2023 10:08:32 +0000 Subject: [PATCH] Commit wallpaper visibility directly when target token is invisibile When first transition finish and another transition is collecting, the wallpaper can be collected if the first transition has commit an invisible activity(e.g. Launcher), there should just hide wallpaper. Bug: 290203002 Test: manual, run test app from shortcut. Change-Id: I7f2d49ee942f3be83bd6e6c34ec99299f14281d9 --- .../com/android/server/wm/ActivityRecord.java | 7 ------ .../com/android/server/wm/Transition.java | 24 +++++++++++-------- 2 files changed, 14 insertions(+), 17 deletions(-) diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index 0994fa4464db0..dd6bcb1060ea1 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -5660,13 +5660,6 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A final DisplayContent displayContent = getDisplayContent(); if (!visible) { mImeInsetsFrozenUntilStartInput = true; - if (usingShellTransitions) { - final WindowState wallpaperTarget = - displayContent.mWallpaperController.getWallpaperTarget(); - if (wallpaperTarget != null && wallpaperTarget.mActivityRecord == this) { - displayContent.mWallpaperController.hideWallpapers(wallpaperTarget); - } - } } if (!displayContent.mClosingApps.contains(this) diff --git a/services/core/java/com/android/server/wm/Transition.java b/services/core/java/com/android/server/wm/Transition.java index 1b27bb17f5994..c14a8a0e678ff 100644 --- a/services/core/java/com/android/server/wm/Transition.java +++ b/services/core/java/com/android/server/wm/Transition.java @@ -1177,16 +1177,6 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener { hasParticipatedDisplay = true; continue; } - final WallpaperWindowToken wt = participant.asWallpaperToken(); - if (wt != null) { - final boolean visibleAtTransitionEnd = mVisibleAtTransitionEndTokens.contains(wt); - if (!visibleAtTransitionEnd && !wt.isVisibleRequested()) { - ProtoLog.v(ProtoLogGroup.WM_DEBUG_WINDOW_TRANSITIONS, - " Commit wallpaper becoming invisible: %s", wt); - wt.commitVisibility(false /* visible */); - } - continue; - } final Task tr = participant.asTask(); if (tr != null && tr.isVisibleRequested() && tr.inPinnedWindowingMode()) { final ActivityRecord top = tr.getTopNonFinishingActivity(); @@ -1206,6 +1196,20 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener { } } } + // Commit wallpaper visibility after activity, because usually the wallpaper target token is + // an activity, and wallpaper's visibility is depends on activity's visibility. + for (int i = mParticipants.size() - 1; i >= 0; --i) { + final WallpaperWindowToken wt = mParticipants.valueAt(i).asWallpaperToken(); + if (wt == null) continue; + final WindowState target = wt.mDisplayContent.mWallpaperController.getWallpaperTarget(); + final boolean isTargetInvisible = target == null || !target.mToken.isVisible(); + if (isTargetInvisible || (!wt.isVisibleRequested() + && !mVisibleAtTransitionEndTokens.contains(wt))) { + ProtoLog.v(ProtoLogGroup.WM_DEBUG_WINDOW_TRANSITIONS, + " Commit wallpaper becoming invisible: %s", wt); + wt.commitVisibility(false /* visible */); + } + } if (committedSomeInvisible) { mController.onCommittedInvisibles(); }