diff options
| author | 2024-01-30 10:39:12 +0000 | |
|---|---|---|
| committer | 2024-01-30 10:39:12 +0000 | |
| commit | 907c616757e7c42d85705c7de896b8c95df7b0d0 (patch) | |
| tree | 20782db9d7be4ee7b0a5b3f4341473c77af1c312 | |
| parent | 6b135b0151b4d8fc233fb05ac6a1f12096cb12b2 (diff) | |
| parent | 6a9ebce1762f53e635f8c1d03d15da3b4aa7bfdf (diff) | |
Merge "Force update the surface of opening targets to visible" into main
3 files changed, 31 insertions, 23 deletions
diff --git a/services/core/java/com/android/server/wm/BackNavigationController.java b/services/core/java/com/android/server/wm/BackNavigationController.java index 83ccbdc1a4d1..13f6a5f1a27b 100644 --- a/services/core/java/com/android/server/wm/BackNavigationController.java +++ b/services/core/java/com/android/server/wm/BackNavigationController.java @@ -1527,6 +1527,12 @@ class BackNavigationController { setLaunchBehind(visibleOpenActivities[i]); } } + // Force update mLastSurfaceShowing for opening activity and its task. + if (mWindowManagerService.mRoot.mTransitionController.isShellTransitionsEnabled()) { + for (int i = visibleOpenActivities.length - 1; i >= 0; --i) { + WindowContainer.enforceSurfaceVisible(visibleOpenActivities[i]); + } + } } @Nullable Runnable build() { diff --git a/services/core/java/com/android/server/wm/TransitionController.java b/services/core/java/com/android/server/wm/TransitionController.java index 25b5630f16b2..70775530d0e2 100644 --- a/services/core/java/com/android/server/wm/TransitionController.java +++ b/services/core/java/com/android/server/wm/TransitionController.java @@ -994,39 +994,18 @@ class TransitionController { Slog.e(TAG, "Set visible without transition " + wc + " playing=" + isPlaying + " caller=" + caller); if (!isPlaying) { - enforceSurfaceVisible(wc); + WindowContainer.enforceSurfaceVisible(wc); return; } // Update surface visibility after the playing transitions are finished, so the last // visibility won't be replaced by the finish transaction of transition. mStateValidators.add(() -> { if (wc.isVisibleRequested()) { - enforceSurfaceVisible(wc); + WindowContainer.enforceSurfaceVisible(wc); } }); } - private void enforceSurfaceVisible(WindowContainer<?> wc) { - if (wc.mSurfaceControl == null) return; - wc.getSyncTransaction().show(wc.mSurfaceControl); - final ActivityRecord ar = wc.asActivityRecord(); - if (ar != null) { - ar.mLastSurfaceShowing = true; - } - // Force showing the parents because they may be hidden by previous transition. - for (WindowContainer<?> p = wc.getParent(); p != null && p != wc.mDisplayContent; - p = p.getParent()) { - if (p.mSurfaceControl != null) { - p.getSyncTransaction().show(p.mSurfaceControl); - final Task task = p.asTask(); - if (task != null) { - task.mLastSurfaceShowing = true; - } - } - } - wc.scheduleAnimation(); - } - /** * Called when the transition has a complete set of participants for its operation. In other * words, it is when the transition is "ready" but is still waiting for participants to draw. diff --git a/services/core/java/com/android/server/wm/WindowContainer.java b/services/core/java/com/android/server/wm/WindowContainer.java index 286182eedf44..2d2857aba781 100644 --- a/services/core/java/com/android/server/wm/WindowContainer.java +++ b/services/core/java/com/android/server/wm/WindowContainer.java @@ -3625,6 +3625,29 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer< return mSurfaceControl.getHeight(); } + static void enforceSurfaceVisible(@NonNull WindowContainer<?> wc) { + if (wc.mSurfaceControl == null) { + return; + } + wc.getSyncTransaction().show(wc.mSurfaceControl); + final ActivityRecord ar = wc.asActivityRecord(); + if (ar != null) { + ar.mLastSurfaceShowing = true; + } + // Force showing the parents because they may be hidden by previous transition. + for (WindowContainer<?> p = wc.getParent(); p != null && p != wc.mDisplayContent; + p = p.getParent()) { + if (p.mSurfaceControl != null) { + p.getSyncTransaction().show(p.mSurfaceControl); + final Task task = p.asTask(); + if (task != null) { + task.mLastSurfaceShowing = true; + } + } + } + wc.scheduleAnimation(); + } + @CallSuper void dump(PrintWriter pw, String prefix, boolean dumpAll) { if (mSurfaceAnimator.isAnimating()) { |