diff options
| author | 2025-03-12 12:28:33 +0800 | |
|---|---|---|
| committer | 2025-03-16 19:57:32 -0700 | |
| commit | fadb0a19afe34e20a129fe1860b12a8b19e654dd (patch) | |
| tree | 26d3bc088c7ef9ec91bfaaeeecaba0ab7b886084 | |
| parent | f6992ead65e858ea91dc0d30063d89d701f7d1fb (diff) | |
Remove mNeedsZBoost
1. Now the transition layer is assigned by
com.android.wm.shell.transition.Transitions#setupAnimHierarchy.
2. Currently it is only set on last finishing activity of a task, and
it won't be unset because ActivityRecord no longer runs transition
animation in WM core.
Bug: 365884835
Flag: EXEMPT remove unused code
Test: CtsWindowManagerDeviceWindow
Change-Id: Iea7a3a8739138cd536b1cfde11040192d8ce155d
9 files changed, 30 insertions, 300 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java index df00fa195f03..0d39c1e9193e 100644 --- a/services/core/java/com/android/server/wm/ActivityRecord.java +++ b/services/core/java/com/android/server/wm/ActivityRecord.java @@ -3665,13 +3665,6 @@ final class ActivityRecord extends WindowToken { if (endTask) { mAtmService.getLockTaskController().clearLockedTask(task); - // This activity was in the top focused root task and this is the last - // activity in that task, give this activity a higher layer so it can stay on - // top before the closing task transition be executed. - if (mayAdjustTop) { - mNeedsZBoost = true; - mDisplayContent.assignWindowLayers(false /* setLayoutNeeded */); - } } } else if (!isState(PAUSING)) { if (mVisibleRequested) { @@ -7234,11 +7227,6 @@ final class ActivityRecord extends WindowToken { } @Override - boolean needsZBoost() { - return mNeedsZBoost || super.needsZBoost(); - } - - @Override public SurfaceControl getAnimationLeashParent() { // For transitions in the root pinned task (menu activity) we just let them occur as a child // of the root pinned task. diff --git a/services/core/java/com/android/server/wm/DisplayArea.java b/services/core/java/com/android/server/wm/DisplayArea.java index 6718ae435cd9..d7d5b44ed210 100644 --- a/services/core/java/com/android/server/wm/DisplayArea.java +++ b/services/core/java/com/android/server/wm/DisplayArea.java @@ -332,12 +332,6 @@ public class DisplayArea<T extends WindowContainer> extends WindowContainer<T> { } @Override - boolean needsZBoost() { - // Z Boost should only happen at or below the ActivityStack level. - return false; - } - - @Override boolean fillsParent() { return true; } diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index 8587b5a9c7ca..38aa1362b335 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -3607,43 +3607,39 @@ class Task extends TaskFragment { int layer = 0; boolean decorSurfacePlaced = false; - // We use two passes as a way to promote children which - // need Z-boosting to the end of the list. for (int j = 0; j < mChildren.size(); ++j) { final WindowContainer wc = mChildren.get(j); wc.assignChildLayers(t); - if (!wc.needsZBoost()) { - // Place the decor surface under any untrusted content. - if (mDecorSurfaceContainer != null - && !mDecorSurfaceContainer.mIsBoosted - && !decorSurfacePlaced - && shouldPlaceDecorSurfaceBelowContainer(wc)) { - mDecorSurfaceContainer.assignLayer(t, layer++); - decorSurfacePlaced = true; - } - wc.assignLayer(t, layer++); - - // Boost the adjacent TaskFragment for dimmer if needed. - final TaskFragment taskFragment = wc.asTaskFragment(); - if (taskFragment != null && taskFragment.isEmbedded() - && taskFragment.hasAdjacentTaskFragment()) { - final int[] nextLayer = { layer }; - taskFragment.forOtherAdjacentTaskFragments(adjacentTf -> { - if (adjacentTf.shouldBoostDimmer()) { - adjacentTf.assignLayer(t, nextLayer[0]++); - } - }); - layer = nextLayer[0]; - } + // Place the decor surface under any untrusted content. + if (mDecorSurfaceContainer != null + && !mDecorSurfaceContainer.mIsBoosted + && !decorSurfacePlaced + && shouldPlaceDecorSurfaceBelowContainer(wc)) { + mDecorSurfaceContainer.assignLayer(t, layer++); + decorSurfacePlaced = true; + } + wc.assignLayer(t, layer++); + + // Boost the adjacent TaskFragment for dimmer if needed. + final TaskFragment taskFragment = wc.asTaskFragment(); + if (taskFragment != null && taskFragment.isEmbedded() + && taskFragment.hasAdjacentTaskFragment()) { + final int[] nextLayer = { layer }; + taskFragment.forOtherAdjacentTaskFragments(adjacentTf -> { + if (adjacentTf.shouldBoostDimmer()) { + adjacentTf.assignLayer(t, nextLayer[0]++); + } + }); + layer = nextLayer[0]; + } - // Place the decor surface just above the owner TaskFragment. - if (mDecorSurfaceContainer != null - && !mDecorSurfaceContainer.mIsBoosted - && !decorSurfacePlaced - && wc == mDecorSurfaceContainer.mOwnerTaskFragment) { - mDecorSurfaceContainer.assignLayer(t, layer++); - decorSurfacePlaced = true; - } + // Place the decor surface just above the owner TaskFragment. + if (mDecorSurfaceContainer != null + && !mDecorSurfaceContainer.mIsBoosted + && !decorSurfacePlaced + && wc == mDecorSurfaceContainer.mOwnerTaskFragment) { + mDecorSurfaceContainer.assignLayer(t, layer++); + decorSurfacePlaced = true; } } @@ -3653,12 +3649,6 @@ class Task extends TaskFragment { mDecorSurfaceContainer.assignLayer(t, layer++); } - for (int j = 0; j < mChildren.size(); ++j) { - final WindowContainer wc = mChildren.get(j); - if (wc.needsZBoost()) { - wc.assignLayer(t, layer++); - } - } if (mOverlayHost != null) { mOverlayHost.setLayer(t, layer++); } diff --git a/services/core/java/com/android/server/wm/TaskDisplayArea.java b/services/core/java/com/android/server/wm/TaskDisplayArea.java index fb7bab4b3e26..1de139696c07 100644 --- a/services/core/java/com/android/server/wm/TaskDisplayArea.java +++ b/services/core/java/com/android/server/wm/TaskDisplayArea.java @@ -48,7 +48,6 @@ import android.content.pm.ActivityInfo.ScreenOrientation; import android.content.res.Configuration; import android.graphics.Color; import android.os.UserHandle; -import android.util.IntArray; import android.util.Slog; import android.view.SurfaceControl; import android.view.WindowManager; @@ -102,9 +101,6 @@ final class TaskDisplayArea extends DisplayArea<WindowContainer> { private final ArrayList<WindowContainer> mTmpAlwaysOnTopChildren = new ArrayList<>(); private final ArrayList<WindowContainer> mTmpNormalChildren = new ArrayList<>(); private final ArrayList<WindowContainer> mTmpHomeChildren = new ArrayList<>(); - private final IntArray mTmpNeedsZBoostIndexes = new IntArray(); - - private ArrayList<Task> mTmpTasks = new ArrayList<>(); private ActivityTaskManagerService mAtmService; @@ -740,40 +736,14 @@ final class TaskDisplayArea extends DisplayArea<WindowContainer> { */ private int adjustRootTaskLayer(SurfaceControl.Transaction t, ArrayList<WindowContainer> children, int startLayer) { - mTmpNeedsZBoostIndexes.clear(); final int childCount = children.size(); - boolean hasAdjacentTask = false; for (int i = 0; i < childCount; i++) { final WindowContainer child = children.get(i); - final TaskDisplayArea childTda = child.asTaskDisplayArea(); - final boolean childNeedsZBoost = childTda != null - ? childTda.childrenNeedZBoost() - : child.needsZBoost(); - - if (childNeedsZBoost) { - mTmpNeedsZBoostIndexes.add(i); - continue; - } - - child.assignLayer(t, startLayer++); - } - - final int zBoostSize = mTmpNeedsZBoostIndexes.size(); - for (int i = 0; i < zBoostSize; i++) { - final WindowContainer child = children.get(mTmpNeedsZBoostIndexes.get(i)); child.assignLayer(t, startLayer++); } return startLayer; } - private boolean childrenNeedZBoost() { - final boolean[] needsZBoost = new boolean[1]; - forAllRootTasks(task -> { - needsZBoost[0] |= task.needsZBoost(); - }); - return needsZBoost[0]; - } - void setBackgroundColor(@ColorInt int colorInt) { setBackgroundColor(colorInt, false /* restore */); } diff --git a/services/core/java/com/android/server/wm/WindowContainer.java b/services/core/java/com/android/server/wm/WindowContainer.java index 5cbba355a06f..2f01e8f05684 100644 --- a/services/core/java/com/android/server/wm/WindowContainer.java +++ b/services/core/java/com/android/server/wm/WindowContainer.java @@ -279,9 +279,6 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer< */ int mTransitFlags; - /** Whether this container should be boosted at the top of all its siblings. */ - @VisibleForTesting boolean mNeedsZBoost; - /** Layer used to constrain the animation to a container's stack bounds. */ SurfaceControl mAnimationBoundsLayer; @@ -2744,15 +2741,7 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer< for (int j = 0; j < mChildren.size(); ++j) { final WindowContainer wc = mChildren.get(j); wc.assignChildLayers(t); - if (!wc.needsZBoost()) { - wc.assignLayer(t, layer++); - } - } - for (int j = 0; j < mChildren.size(); ++j) { - final WindowContainer wc = mChildren.get(j); - if (wc.needsZBoost()) { - wc.assignLayer(t, layer++); - } + wc.assignLayer(t, layer++); } if (mOverlayHost != null) { mOverlayHost.setLayer(t, layer++); @@ -2764,16 +2753,6 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer< scheduleAnimation(); } - boolean needsZBoost() { - if (mNeedsZBoost) return true; - for (int i = 0; i < mChildren.size(); i++) { - if (mChildren.get(i).needsZBoost()) { - return true; - } - } - return false; - } - /** * Write to a protocol buffer output stream. Protocol buffer message definition is at * {@link com.android.server.wm.WindowContainerProto}. @@ -3114,7 +3093,6 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer< public void onAnimationLeashLost(Transaction t) { mLastLayer = -1; mAnimationLeash = null; - mNeedsZBoost = false; reassignLayer(t); updateSurfacePosition(t); } @@ -3140,7 +3118,6 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer< protected void onAnimationFinished(@AnimationType int type, AnimationAdapter anim) { doAnimationFinished(type, anim); mWmService.onAnimationFinished(); - mNeedsZBoost = false; } /** diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index a270af56cbcd..c00652578dbf 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -4989,18 +4989,6 @@ class WindowState extends WindowContainer<WindowState> implements WindowManagerP return true; } - @Override - boolean needsZBoost() { - final InsetsControlTarget target = getDisplayContent().getImeTarget(IME_TARGET_LAYERING); - if (mIsImWindow && target != null) { - final ActivityRecord activity = target.getWindow().mActivityRecord; - if (activity != null) { - return activity.needsZBoost(); - } - } - return false; - } - private boolean isStartingWindowAssociatedToTask() { return mStartingData != null && mStartingData.mAssociatedTask != null; } diff --git a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java index 7f242dea9f45..773a566f6315 100644 --- a/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java @@ -1459,21 +1459,6 @@ public class ActivityRecordTests extends WindowTestsBase { } /** - * Verify that finish bottom activity from a task won't boost it to top. - */ - @Test - public void testFinishBottomActivityIfPossible_noZBoost() { - final ActivityRecord bottomActivity = createActivityWithTask(); - final ActivityRecord topActivity = new ActivityBuilder(mAtm) - .setTask(bottomActivity.getTask()).build(); - topActivity.setVisibleRequested(true); - // simulating bottomActivity as a trampoline activity. - bottomActivity.setState(RESUMED, "test"); - bottomActivity.finishIfPossible("test", false); - assertFalse(bottomActivity.mNeedsZBoost); - } - - /** * Verify that complete finish request for visible activity must be delayed before the next one * becomes visible. */ diff --git a/services/tests/wmtests/src/com/android/server/wm/AppWindowTokenAnimationTests.java b/services/tests/wmtests/src/com/android/server/wm/AppWindowTokenAnimationTests.java deleted file mode 100644 index e4628c45a15b..000000000000 --- a/services/tests/wmtests/src/com/android/server/wm/AppWindowTokenAnimationTests.java +++ /dev/null @@ -1,142 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.server.wm; - -import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify; -import static com.android.server.wm.SurfaceAnimator.ANIMATION_TYPE_APP_TRANSITION; - -import static com.google.common.truth.Truth.assertThat; - -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.ArgumentMatchers.intThat; - -import android.platform.test.annotations.Presubmit; -import android.view.SurfaceControl; - -import androidx.test.filters.SmallTest; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.ArgumentCaptor; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; - - -/** - * Animation related tests for the {@link ActivityRecord} class. - * - * Build/Install/Run: - * atest AppWindowTokenAnimationTests - */ -@SmallTest -@Presubmit -@RunWith(WindowTestRunner.class) -public class AppWindowTokenAnimationTests extends WindowTestsBase { - - private ActivityRecord mActivity; - - @Mock - private AnimationAdapter mSpec; - - @Before - public void setUp() throws Exception { - MockitoAnnotations.initMocks(this); - - mActivity = createActivityRecord(mDisplayContent); - } - - @Test - public void clipAfterAnim_boundsLayerIsCreated() { - mActivity.mNeedsAnimationBoundsLayer = true; - - mActivity.mSurfaceAnimator.startAnimation(mTransaction, mSpec, true /* hidden */, - ANIMATION_TYPE_APP_TRANSITION); - verify(mTransaction).reparent(eq(mActivity.getSurfaceControl()), - eq(mActivity.mSurfaceAnimator.mLeash)); - verify(mTransaction).reparent(eq(mActivity.mSurfaceAnimator.mLeash), - eq(mActivity.mAnimationBoundsLayer)); - } - - @Test - public void clipAfterAnim_boundsLayerZBoosted() { - final Task task = mActivity.getTask(); - final ActivityRecord topActivity = createActivityRecord(task); - task.assignChildLayers(mTransaction); - - assertThat(topActivity.getLastLayer()).isGreaterThan(mActivity.getLastLayer()); - - mActivity.mNeedsAnimationBoundsLayer = true; - mActivity.mNeedsZBoost = true; - mActivity.mSurfaceAnimator.startAnimation(mTransaction, mSpec, true /* hidden */, - ANIMATION_TYPE_APP_TRANSITION); - - verify(mTransaction).setLayer(eq(mActivity.mAnimationBoundsLayer), - intThat(layer -> layer > topActivity.getLastLayer())); - - // The layer should be restored after the animation leash is removed. - mActivity.onAnimationLeashLost(mTransaction); - assertThat(mActivity.mNeedsZBoost).isFalse(); - assertThat(topActivity.getLastLayer()).isGreaterThan(mActivity.getLastLayer()); - } - - @Test - public void clipAfterAnim_boundsLayerIsDestroyed() { - mActivity.mNeedsAnimationBoundsLayer = true; - mActivity.mSurfaceAnimator.startAnimation(mTransaction, mSpec, true /* hidden */, - ANIMATION_TYPE_APP_TRANSITION); - final SurfaceControl leash = mActivity.mSurfaceAnimator.mLeash; - final SurfaceControl animationBoundsLayer = mActivity.mAnimationBoundsLayer; - final ArgumentCaptor<SurfaceAnimator.OnAnimationFinishedCallback> callbackCaptor = - ArgumentCaptor.forClass( - SurfaceAnimator.OnAnimationFinishedCallback.class); - verify(mSpec).startAnimation(any(), any(), eq(ANIMATION_TYPE_APP_TRANSITION), - callbackCaptor.capture()); - - callbackCaptor.getValue().onAnimationFinished( - ANIMATION_TYPE_APP_TRANSITION, mSpec); - verify(mTransaction).remove(eq(leash)); - verify(mTransaction).remove(eq(animationBoundsLayer)); - assertThat(mActivity.mNeedsAnimationBoundsLayer).isFalse(); - } - - @Test - public void clipAfterAnimCancelled_boundsLayerIsDestroyed() { - mActivity.mNeedsAnimationBoundsLayer = true; - mActivity.mSurfaceAnimator.startAnimation(mTransaction, mSpec, true /* hidden */, - ANIMATION_TYPE_APP_TRANSITION); - final SurfaceControl leash = mActivity.mSurfaceAnimator.mLeash; - final SurfaceControl animationBoundsLayer = mActivity.mAnimationBoundsLayer; - - mActivity.mSurfaceAnimator.cancelAnimation(); - verify(mTransaction).remove(eq(leash)); - verify(mTransaction).remove(eq(animationBoundsLayer)); - assertThat(mActivity.mNeedsAnimationBoundsLayer).isFalse(); - } - - @Test - public void clipNoneAnim_boundsLayerIsNotCreated() { - mActivity.mNeedsAnimationBoundsLayer = false; - - mActivity.mSurfaceAnimator.startAnimation(mTransaction, mSpec, true /* hidden */, - ANIMATION_TYPE_APP_TRANSITION); - verify(mTransaction).reparent(eq(mActivity.getSurfaceControl()), - eq(mActivity.mSurfaceAnimator.mLeash)); - assertThat(mActivity.mAnimationBoundsLayer).isNull(); - } -} diff --git a/services/tests/wmtests/src/com/android/server/wm/TaskDisplayAreaTests.java b/services/tests/wmtests/src/com/android/server/wm/TaskDisplayAreaTests.java index ec83c50e95aa..1aa8681c9bfd 100644 --- a/services/tests/wmtests/src/com/android/server/wm/TaskDisplayAreaTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/TaskDisplayAreaTests.java @@ -49,10 +49,8 @@ import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; -import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.clearInvocations; -import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import android.app.ActivityOptions; @@ -192,24 +190,6 @@ public class TaskDisplayAreaTests extends WindowTestsBase { } @Test - public void testActivityWithZBoost_taskDisplayAreaDoesNotMoveUp() { - final Task rootTask = createTask(mDisplayContent); - final Task task = createTaskInRootTask(rootTask, 0 /* userId */); - final ActivityRecord activity = createNonAttachedActivityRecord(mDisplayContent); - task.addChild(activity, 0 /* addPos */); - final TaskDisplayArea taskDisplayArea = activity.getDisplayArea(); - activity.mNeedsAnimationBoundsLayer = true; - activity.mNeedsZBoost = true; - spyOn(taskDisplayArea.mSurfaceAnimator); - - mDisplayContent.assignChildLayers(mTransaction); - - assertThat(activity.needsZBoost()).isTrue(); - assertThat(taskDisplayArea.needsZBoost()).isFalse(); - verify(taskDisplayArea.mSurfaceAnimator, never()).setLayer(eq(mTransaction), anyInt()); - } - - @Test public void testRootTaskPositionChildAt() { Task pinnedTask = createTask( mDisplayContent, WINDOWING_MODE_PINNED, ACTIVITY_TYPE_STANDARD); |