summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Riddle Hsu <riddlehsu@google.com> 2025-03-12 12:28:33 +0800
committer Riddle Hsu <riddlehsu@google.com> 2025-03-16 19:57:32 -0700
commitfadb0a19afe34e20a129fe1860b12a8b19e654dd (patch)
tree26d3bc088c7ef9ec91bfaaeeecaba0ab7b886084
parentf6992ead65e858ea91dc0d30063d89d701f7d1fb (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
-rw-r--r--services/core/java/com/android/server/wm/ActivityRecord.java12
-rw-r--r--services/core/java/com/android/server/wm/DisplayArea.java6
-rw-r--r--services/core/java/com/android/server/wm/Task.java68
-rw-r--r--services/core/java/com/android/server/wm/TaskDisplayArea.java30
-rw-r--r--services/core/java/com/android/server/wm/WindowContainer.java25
-rw-r--r--services/core/java/com/android/server/wm/WindowState.java12
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/ActivityRecordTests.java15
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/AppWindowTokenAnimationTests.java142
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/TaskDisplayAreaTests.java20
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);