Loading services/core/java/com/android/server/wm/Transition.java +8 −3 Original line number Diff line number Diff line Loading @@ -533,10 +533,15 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe } // Need to update layers on involved displays since they were all paused while // the animation played. This puts the layers back into the correct order. mController.mBuildingFinishLayers = true; try { for (int i = displays.size() - 1; i >= 0; --i) { if (displays.valueAt(i) == null) continue; displays.valueAt(i).assignChildLayers(t); } } finally { mController.mBuildingFinishLayers = false; } if (rootLeash.isValid()) { t.reparent(rootLeash, null); } Loading services/core/java/com/android/server/wm/TransitionController.java +17 −0 Original line number Diff line number Diff line Loading @@ -100,6 +100,14 @@ class TransitionController { // TODO(b/188595497): remove when not needed. final StatusBarManagerInternal mStatusBar; /** * `true` when building surface layer order for the finish transaction. We want to prevent * wm from touching z-order of surfaces during transitions, but we still need to be able to * calculate the layers for the finishTransaction. So, when assigning layers into the finish * transaction, set this to true so that the {@link canAssignLayers} will allow it. */ boolean mBuildingFinishLayers = false; TransitionController(ActivityTaskManagerService atm, TaskSnapshotController taskSnapshotController, TransitionTracer transitionTracer) { Loading Loading @@ -309,6 +317,15 @@ class TransitionController { return false; } /** * Whether WM can assign layers to window surfaces at this time. This is usually false while * playing, but can be "opened-up" for certain transition operations like calculating layers * for finishTransaction. */ boolean canAssignLayers() { return mBuildingFinishLayers || !isPlaying(); } @WindowConfiguration.WindowingMode int getWindowingModeAtStart(@NonNull WindowContainer wc) { if (mCollectingTransition == null) return wc.getWindowingMode(); Loading services/core/java/com/android/server/wm/WindowContainer.java +1 −1 Original line number Diff line number Diff line Loading @@ -2473,7 +2473,7 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer< void assignLayer(Transaction t, int layer) { // Don't assign layers while a transition animation is playing // TODO(b/173528115): establish robust best-practices around z-order fighting. if (mTransitionController.isPlaying()) return; if (!mTransitionController.canAssignLayers()) return; final boolean changed = layer != mLastLayer || mLastRelativeToLayer != null; if (mSurfaceControl != null && changed) { setLayer(t, layer); Loading Loading
services/core/java/com/android/server/wm/Transition.java +8 −3 Original line number Diff line number Diff line Loading @@ -533,10 +533,15 @@ class Transition extends Binder implements BLASTSyncEngine.TransactionReadyListe } // Need to update layers on involved displays since they were all paused while // the animation played. This puts the layers back into the correct order. mController.mBuildingFinishLayers = true; try { for (int i = displays.size() - 1; i >= 0; --i) { if (displays.valueAt(i) == null) continue; displays.valueAt(i).assignChildLayers(t); } } finally { mController.mBuildingFinishLayers = false; } if (rootLeash.isValid()) { t.reparent(rootLeash, null); } Loading
services/core/java/com/android/server/wm/TransitionController.java +17 −0 Original line number Diff line number Diff line Loading @@ -100,6 +100,14 @@ class TransitionController { // TODO(b/188595497): remove when not needed. final StatusBarManagerInternal mStatusBar; /** * `true` when building surface layer order for the finish transaction. We want to prevent * wm from touching z-order of surfaces during transitions, but we still need to be able to * calculate the layers for the finishTransaction. So, when assigning layers into the finish * transaction, set this to true so that the {@link canAssignLayers} will allow it. */ boolean mBuildingFinishLayers = false; TransitionController(ActivityTaskManagerService atm, TaskSnapshotController taskSnapshotController, TransitionTracer transitionTracer) { Loading Loading @@ -309,6 +317,15 @@ class TransitionController { return false; } /** * Whether WM can assign layers to window surfaces at this time. This is usually false while * playing, but can be "opened-up" for certain transition operations like calculating layers * for finishTransaction. */ boolean canAssignLayers() { return mBuildingFinishLayers || !isPlaying(); } @WindowConfiguration.WindowingMode int getWindowingModeAtStart(@NonNull WindowContainer wc) { if (mCollectingTransition == null) return wc.getWindowingMode(); Loading
services/core/java/com/android/server/wm/WindowContainer.java +1 −1 Original line number Diff line number Diff line Loading @@ -2473,7 +2473,7 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer< void assignLayer(Transaction t, int layer) { // Don't assign layers while a transition animation is playing // TODO(b/173528115): establish robust best-practices around z-order fighting. if (mTransitionController.isPlaying()) return; if (!mTransitionController.canAssignLayers()) return; final boolean changed = layer != mLastLayer || mLastRelativeToLayer != null; if (mSurfaceControl != null && changed) { setLayer(t, layer); Loading