summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/window/TransitionInfo.java26
-rw-r--r--core/java/android/window/flags/windowing_sdk.aconfig7
-rw-r--r--libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitController.java19
-rw-r--r--libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitPresenter.java13
-rw-r--r--libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/OverlayPresentationTest.java47
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationRunner.java40
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationRunnerTests.java15
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/activityembedding/ActivityEmbeddingControllerTests.java4
-rw-r--r--services/core/java/com/android/server/wm/ActivityClientController.java6
-rw-r--r--services/core/java/com/android/server/wm/ActivityRecord.java8
-rw-r--r--services/core/java/com/android/server/wm/Transition.java36
-rw-r--r--services/core/java/com/android/server/wm/TransitionController.java12
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/TransitionTests.java35
13 files changed, 87 insertions, 181 deletions
diff --git a/core/java/android/window/TransitionInfo.java b/core/java/android/window/TransitionInfo.java
index 32175f122d61..63c55ad6a889 100644
--- a/core/java/android/window/TransitionInfo.java
+++ b/core/java/android/window/TransitionInfo.java
@@ -1152,7 +1152,6 @@ public final class TransitionInfo implements Parcelable {
mEnterResId = in.readInt();
mChangeResId = in.readInt();
mExitResId = in.readInt();
- mBackgroundColor = in.readInt();
mOverrideTaskTransition = in.readBoolean();
mPackageName = in.readString();
mTransitionBounds.readFromParcel(in);
@@ -1203,23 +1202,6 @@ public final class TransitionInfo implements Parcelable {
}
/**
- * Make options for a custom animation based on anim resources.
- *
- * @param packageName the package name to find the animation resources
- * @param enterResId the open animation resources ID
- * @param exitResId the close animation resources ID
- * @param backgroundColor the background color
- * @param overrideTaskTransition whether to override the task transition
- */
- @NonNull
- public static AnimationOptions makeCustomAnimOptions(@NonNull String packageName,
- @AnimRes int enterResId, @AnimRes int exitResId, @ColorInt int backgroundColor,
- boolean overrideTaskTransition) {
- return makeCustomAnimOptions(packageName, enterResId, DEFAULT_ANIMATION_RESOURCES_ID,
- exitResId, backgroundColor, overrideTaskTransition);
- }
-
- /**
* Creates a {@link android.app.ActivityOptions#ANIM_CUSTOM} {@link AnimationOptions}.
*
* @param packageName the package name that includes the animation resources.
@@ -1231,13 +1213,12 @@ public final class TransitionInfo implements Parcelable {
@NonNull
public static AnimationOptions makeCustomAnimOptions(@NonNull String packageName,
@AnimRes int enterResId, @AnimRes int changeResId, @AnimRes int exitResId,
- @ColorInt int backgroundColor, boolean overrideTaskTransition) {
+ boolean overrideTaskTransition) {
AnimationOptions options = new AnimationOptions(ANIM_CUSTOM);
options.mPackageName = packageName;
options.mEnterResId = enterResId;
options.mChangeResId = changeResId;
options.mExitResId = exitResId;
- options.mBackgroundColor = backgroundColor;
options.mOverrideTaskTransition = overrideTaskTransition;
return options;
}
@@ -1313,10 +1294,6 @@ public final class TransitionInfo implements Parcelable {
return mExitResId;
}
- public @ColorInt int getBackgroundColor() {
- return mBackgroundColor;
- }
-
public boolean getOverrideTaskTransition() {
return mOverrideTaskTransition;
}
@@ -1352,7 +1329,6 @@ public final class TransitionInfo implements Parcelable {
dest.writeInt(mEnterResId);
dest.writeInt(mChangeResId);
dest.writeInt(mExitResId);
- dest.writeInt(mBackgroundColor);
dest.writeBoolean(mOverrideTaskTransition);
dest.writeString(mPackageName);
mTransitionBounds.writeToParcel(dest, flags);
diff --git a/core/java/android/window/flags/windowing_sdk.aconfig b/core/java/android/window/flags/windowing_sdk.aconfig
index de49eaef058e..9f768f065fe9 100644
--- a/core/java/android/window/flags/windowing_sdk.aconfig
+++ b/core/java/android/window/flags/windowing_sdk.aconfig
@@ -7,13 +7,6 @@ container: "system"
flag {
namespace: "windowing_sdk"
- name: "activity_embedding_overlay_presentation_flag"
- description: "Whether the overlay presentation feature is enabled"
- bug: "293370683"
-}
-
-flag {
- namespace: "windowing_sdk"
name: "task_fragment_system_organizer_flag"
description: "Whether the TaskFragment system organizer feature is enabled"
bug: "284050041"
diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitController.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitController.java
index b0fadb06b7e3..e141f70d8abb 100644
--- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitController.java
+++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitController.java
@@ -107,7 +107,6 @@ import androidx.window.extensions.embedding.TransactionManager.TransactionRecord
import androidx.window.extensions.layout.WindowLayoutComponentImpl;
import com.android.internal.annotations.VisibleForTesting;
-import com.android.window.flags.Flags;
import java.util.ArrayList;
import java.util.Collections;
@@ -421,9 +420,6 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen
public void setActivityStackAttributesCalculator(
@NonNull Function<ActivityStackAttributesCalculatorParams, ActivityStackAttributes>
calculator) {
- if (!Flags.activityEmbeddingOverlayPresentationFlag()) {
- return;
- }
synchronized (mLock) {
mActivityStackAttributesCalculator = calculator;
}
@@ -431,9 +427,6 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen
@Override
public void clearActivityStackAttributesCalculator() {
- if (!Flags.activityEmbeddingOverlayPresentationFlag()) {
- return;
- }
synchronized (mLock) {
mActivityStackAttributesCalculator = null;
}
@@ -623,9 +616,6 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen
@Override
public void updateActivityStackAttributes(@NonNull ActivityStack.Token activityStackToken,
@NonNull ActivityStackAttributes attributes) {
- if (!Flags.activityEmbeddingOverlayPresentationFlag()) {
- return;
- }
Objects.requireNonNull(activityStackToken);
Objects.requireNonNull(attributes);
@@ -652,9 +642,6 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen
@Nullable
public ParentContainerInfo getParentContainerInfo(
@NonNull ActivityStack.Token activityStackToken) {
- if (!Flags.activityEmbeddingOverlayPresentationFlag()) {
- return null;
- }
Objects.requireNonNull(activityStackToken);
synchronized (mLock) {
final TaskFragmentContainer container = getContainer(activityStackToken.getRawToken());
@@ -670,9 +657,6 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen
@Override
@Nullable
public ActivityStack.Token getActivityStackToken(@NonNull String tag) {
- if (!Flags.activityEmbeddingOverlayPresentationFlag()) {
- return null;
- }
Objects.requireNonNull(tag);
synchronized (mLock) {
final TaskFragmentContainer taskFragmentContainer =
@@ -3152,8 +3136,7 @@ public class SplitController implements JetpackTaskFragmentOrganizer.TaskFragmen
final TaskFragmentContainer launchedInTaskFragment;
if (launchingActivity != null) {
final String overlayTag = options.getString(KEY_OVERLAY_TAG);
- if (Flags.activityEmbeddingOverlayPresentationFlag()
- && overlayTag != null) {
+ if (overlayTag != null) {
launchedInTaskFragment = createOrUpdateOverlayTaskFragmentIfNeeded(wct,
options, intent, launchingActivity);
} else {
diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitPresenter.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitPresenter.java
index 7ab9e2e65b76..f2c1115306d0 100644
--- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitPresenter.java
+++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/SplitPresenter.java
@@ -62,7 +62,6 @@ import androidx.window.extensions.layout.WindowLayoutInfo;
import com.android.internal.R;
import com.android.internal.annotations.VisibleForTesting;
-import com.android.window.flags.Flags;
import java.util.ArrayList;
import java.util.List;
@@ -465,9 +464,6 @@ class SplitPresenter extends JetpackTaskFragmentOrganizer {
void setTaskFragmentIsolatedNavigation(@NonNull WindowContainerTransaction wct,
@NonNull TaskFragmentContainer container,
boolean isolatedNavigationEnabled) {
- if (!Flags.activityEmbeddingOverlayPresentationFlag() && container.isOverlay()) {
- return;
- }
if (container.isIsolatedNavigationEnabled() == isolatedNavigationEnabled) {
return;
}
@@ -488,9 +484,6 @@ class SplitPresenter extends JetpackTaskFragmentOrganizer {
void setTaskFragmentPinned(@NonNull WindowContainerTransaction wct,
@NonNull TaskFragmentContainer container,
boolean pinned) {
- if (!Flags.activityEmbeddingOverlayPresentationFlag() && container.isOverlay()) {
- return;
- }
if (container.isPinned() == pinned) {
return;
}
@@ -692,7 +685,7 @@ class SplitPresenter extends JetpackTaskFragmentOrganizer {
final TaskContainer taskContainer = container.getTaskContainer();
final int windowingMode = taskContainer.getWindowingModeForTaskFragment(relativeBounds);
updateTaskFragmentWindowingModeIfRegistered(wct, container, windowingMode);
- if (container.isOverlay() && isOverlayTransitionSupported()) {
+ if (container.isOverlay()) {
// Use the overlay transition for the overlay container if it's supported.
final TaskFragmentAnimationParams params = createOverlayAnimationParams(relativeBounds,
taskContainer.getBounds(), container);
@@ -704,10 +697,6 @@ class SplitPresenter extends JetpackTaskFragmentOrganizer {
setTaskFragmentDimOnTask(wct, fragmentToken, dimOnTask);
}
- private static boolean isOverlayTransitionSupported() {
- return Flags.activityEmbeddingOverlayPresentationFlag();
- }
-
@NonNull
private static TaskFragmentAnimationParams createOverlayAnimationParams(
@NonNull Rect relativeBounds, @NonNull Rect parentContainerBounds,
diff --git a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/OverlayPresentationTest.java b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/OverlayPresentationTest.java
index 5b97e7e2ca71..4334a9c266d1 100644
--- a/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/OverlayPresentationTest.java
+++ b/libs/WindowManager/Jetpack/tests/unittest/src/androidx/window/extensions/embedding/OverlayPresentationTest.java
@@ -58,7 +58,6 @@ import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import android.app.Activity;
-import android.app.ActivityOptions;
import android.content.ComponentName;
import android.content.Intent;
import android.content.pm.ActivityInfo;
@@ -70,7 +69,6 @@ import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.platform.test.annotations.Presubmit;
-import android.platform.test.flag.junit.SetFlagsRule;
import android.util.Size;
import android.window.TaskFragmentAnimationParams;
import android.window.TaskFragmentInfo;
@@ -85,8 +83,6 @@ import androidx.window.common.DeviceStateManagerFoldingFeatureProducer;
import androidx.window.extensions.layout.WindowLayoutComponentImpl;
import androidx.window.extensions.layout.WindowLayoutInfo;
-import com.android.window.flags.Flags;
-
import com.google.testing.junit.testparameterinjector.TestParameter;
import com.google.testing.junit.testparameterinjector.TestParameterInjector;
@@ -121,9 +117,6 @@ public class OverlayPresentationTest {
private static final Intent PLACEHOLDER_INTENT = new Intent().setComponent(
new ComponentName("test", "placeholder"));
- @Rule
- public final SetFlagsRule mSetFlagRule = new SetFlagsRule();
-
private SplitController.ActivityStartMonitor mMonitor;
private Intent mIntent;
@@ -168,8 +161,6 @@ public class OverlayPresentationTest {
doReturn(activityConfig).when(mActivityResources).getConfiguration();
doReturn(mHandler).when(mSplitController).getHandler();
mActivity = createMockActivity();
-
- mSetFlagRule.enableFlags(Flags.FLAG_ACTIVITY_EMBEDDING_OVERLAY_PRESENTATION_FLAG);
}
/** Creates a mock activity in the organizer process. */
@@ -187,44 +178,6 @@ public class OverlayPresentationTest {
}
@Test
- public void testStartActivity_overlayFeatureDisabled_notInvokeCreateOverlayContainer() {
- mSetFlagRule.disableFlags(Flags.FLAG_ACTIVITY_EMBEDDING_OVERLAY_PRESENTATION_FLAG);
-
- final Bundle optionsBundle = ActivityOptions.makeBasic().toBundle();
- optionsBundle.putString(KEY_OVERLAY_TAG, "test");
- mMonitor.onStartActivity(mActivity, mIntent, optionsBundle);
-
- verify(mSplitController, never()).createOrUpdateOverlayTaskFragmentIfNeeded(any(), any(),
- any(), any());
- }
-
- @Test
- public void testSetIsolatedNavigation_overlayFeatureDisabled_earlyReturn() {
- mSetFlagRule.disableFlags(Flags.FLAG_ACTIVITY_EMBEDDING_OVERLAY_PRESENTATION_FLAG);
-
- final TaskFragmentContainer container = createTestOverlayContainer(TASK_ID, "test");
-
- mSplitPresenter.setTaskFragmentIsolatedNavigation(mTransaction, container,
- !container.isIsolatedNavigationEnabled());
-
- verify(mSplitPresenter, never()).setTaskFragmentIsolatedNavigation(any(),
- any(IBinder.class), anyBoolean());
- }
-
- @Test
- public void testSetPinned_overlayFeatureDisabled_earlyReturn() {
- mSetFlagRule.disableFlags(Flags.FLAG_ACTIVITY_EMBEDDING_OVERLAY_PRESENTATION_FLAG);
-
- final TaskFragmentContainer container = createTestOverlayContainer(TASK_ID, "test");
-
- mSplitPresenter.setTaskFragmentPinned(mTransaction, container,
- !container.isPinned());
-
- verify(mSplitPresenter, never()).setTaskFragmentPinned(any(), any(IBinder.class),
- anyBoolean());
- }
-
- @Test
public void testGetAllNonFinishingOverlayContainers() {
assertThat(mSplitController.getAllNonFinishingOverlayContainers()).isEmpty();
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationRunner.java b/libs/WindowManager/Shell/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationRunner.java
index 78f5154c0ecb..c3e783ddf4f1 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationRunner.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationRunner.java
@@ -46,7 +46,6 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.android.internal.annotations.VisibleForTesting;
-import com.android.window.flags.Flags;
import com.android.wm.shell.activityembedding.ActivityEmbeddingAnimationAdapter.SnapshotAdapter;
import com.android.wm.shell.common.ScreenshotUtils;
import com.android.wm.shell.shared.TransitionUtil;
@@ -443,7 +442,7 @@ class ActivityEmbeddingAnimationRunner {
}
}
- calculateParentBounds(change, boundsAnimationChange, parentBounds);
+ calculateParentBounds(change, parentBounds);
// There are two animations in the array. The first one is for the start leash
// (snapshot), and the second one is for the end leash (TaskFragment).
final Animation[] animations =
@@ -529,32 +528,19 @@ class ActivityEmbeddingAnimationRunner {
*/
@VisibleForTesting
static void calculateParentBounds(@NonNull TransitionInfo.Change change,
- @NonNull TransitionInfo.Change boundsAnimationChange, @NonNull Rect outParentBounds) {
- if (Flags.activityEmbeddingOverlayPresentationFlag()) {
- final Point endParentSize = change.getEndParentSize();
- if (endParentSize.equals(0, 0)) {
- return;
- }
- final Point endRelPosition = change.getEndRelOffset();
- final Point endAbsPosition = new Point(change.getEndAbsBounds().left,
- change.getEndAbsBounds().top);
- final Point parentEndAbsPosition = new Point(endAbsPosition.x - endRelPosition.x,
- endAbsPosition.y - endRelPosition.y);
- outParentBounds.set(parentEndAbsPosition.x, parentEndAbsPosition.y,
- parentEndAbsPosition.x + endParentSize.x,
- parentEndAbsPosition.y + endParentSize.y);
- } else {
- // The TaskFragment may be enter/exit split, so we take the union of both as
- // the parent size.
- outParentBounds.union(boundsAnimationChange.getStartAbsBounds());
- outParentBounds.union(boundsAnimationChange.getEndAbsBounds());
- if (boundsAnimationChange != change) {
- // Union the change starting bounds in case the activity is resized and
- // reparented to a TaskFragment. In that case, the TaskFragment may not cover
- // the activity's starting bounds.
- outParentBounds.union(change.getStartAbsBounds());
- }
+ @NonNull Rect outParentBounds) {
+ final Point endParentSize = change.getEndParentSize();
+ if (endParentSize.equals(0, 0)) {
+ return;
}
+ final Point endRelPosition = change.getEndRelOffset();
+ final Point endAbsPosition = new Point(change.getEndAbsBounds().left,
+ change.getEndAbsBounds().top);
+ final Point parentEndAbsPosition = new Point(endAbsPosition.x - endRelPosition.x,
+ endAbsPosition.y - endRelPosition.y);
+ outParentBounds.set(parentEndAbsPosition.x, parentEndAbsPosition.y,
+ parentEndAbsPosition.x + endParentSize.x,
+ parentEndAbsPosition.y + endParentSize.y);
}
/**
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationRunnerTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationRunnerTests.java
index d4d8d93abf7d..bc965b9729cb 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationRunnerTests.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationRunnerTests.java
@@ -39,14 +39,12 @@ import android.animation.Animator;
import android.annotation.NonNull;
import android.graphics.Point;
import android.graphics.Rect;
-import android.platform.test.annotations.EnableFlags;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.window.TransitionInfo;
import androidx.test.filters.SmallTest;
-import com.android.window.flags.Flags;
import com.android.wm.shell.transition.TransitionInfoBuilder;
import com.google.testing.junit.testparameterinjector.TestParameter;
@@ -135,8 +133,8 @@ public class ActivityEmbeddingAnimationRunnerTests extends ActivityEmbeddingAnim
.addChange(createChange(FLAG_IN_TASK_WITH_EMBEDDED_ACTIVITY, TRANSIT_OPEN))
.build();
info.getChanges().getFirst().setAnimationOptions(TransitionInfo.AnimationOptions
- .makeCustomAnimOptions("packageName", 0 /* enterResId */, 0 /* exitResId */,
- 0 /* backgroundColor */, false /* overrideTaskTransition */));
+ .makeCustomAnimOptions("packageName", 0 /* enterResId */, 0 /* changeResId */,
+ 0 /* exitResId */, false /* overrideTaskTransition */));
final Animator animator = mAnimRunner.createAnimator(
info, mStartTransaction, mFinishTransaction,
() -> mFinishCallback.onTransitionFinished(null /* wct */),
@@ -146,12 +144,9 @@ public class ActivityEmbeddingAnimationRunnerTests extends ActivityEmbeddingAnim
assertEquals(0, animator.getDuration());
}
- // TODO(b/243518738): Rewrite with TestParameter
- @EnableFlags(Flags.FLAG_ACTIVITY_EMBEDDING_OVERLAY_PRESENTATION_FLAG)
@Test
public void testCalculateParentBounds_flagEnabled_emptyParentSize() {
TransitionInfo.Change change;
- final TransitionInfo.Change stubChange = createChange(0 /* flags */);
final Rect actualParentBounds = new Rect();
change = prepareChangeForParentBoundsCalculationTest(
new Point(0, 0) /* endRelOffset */,
@@ -159,17 +154,15 @@ public class ActivityEmbeddingAnimationRunnerTests extends ActivityEmbeddingAnim
new Point() /* endParentSize */
);
- calculateParentBounds(change, stubChange, actualParentBounds);
+ calculateParentBounds(change, actualParentBounds);
assertTrue("Parent bounds must be empty because end parent size is not set.",
actualParentBounds.isEmpty());
}
- @EnableFlags(Flags.FLAG_ACTIVITY_EMBEDDING_OVERLAY_PRESENTATION_FLAG)
@Test
public void testCalculateParentBounds_flagEnabled(
@TestParameter ParentBoundsTestParameters params) {
- final TransitionInfo.Change stubChange = createChange(0 /*flags*/);
final Rect parentBounds = params.getParentBounds();
final Rect endAbsBounds = params.getEndAbsBounds();
final TransitionInfo.Change change = prepareChangeForParentBoundsCalculationTest(
@@ -178,7 +171,7 @@ public class ActivityEmbeddingAnimationRunnerTests extends ActivityEmbeddingAnim
endAbsBounds, new Point(parentBounds.width(), parentBounds.height()));
final Rect actualParentBounds = new Rect();
- calculateParentBounds(change, stubChange, actualParentBounds);
+ calculateParentBounds(change, actualParentBounds);
assertEquals(parentBounds, actualParentBounds);
}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/activityembedding/ActivityEmbeddingControllerTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/activityembedding/ActivityEmbeddingControllerTests.java
index 53a13d0d4ffd..da4543b4d910 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/activityembedding/ActivityEmbeddingControllerTests.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/activityembedding/ActivityEmbeddingControllerTests.java
@@ -195,8 +195,8 @@ public class ActivityEmbeddingControllerTests extends ActivityEmbeddingAnimation
final TransitionInfo.Change change = info.getChanges().getFirst();
change.setAnimationOptions(TransitionInfo.AnimationOptions
- .makeCustomAnimOptions("packageName", 0 /* enterResId */, 0 /* exitResId */,
- 0 /* backgroundColor */, false /* overrideTaskTransition */));
+ .makeCustomAnimOptions("packageName", 0 /* enterResId */, 0 /* changeResId */,
+ 0 /* exitResId */, false /* overrideTaskTransition */));
assertTrue(mController.shouldAnimate(info));
change.setAnimationOptions(TransitionInfo.AnimationOptions
diff --git a/services/core/java/com/android/server/wm/ActivityClientController.java b/services/core/java/com/android/server/wm/ActivityClientController.java
index 05794cd61fb3..7ce52b101824 100644
--- a/services/core/java/com/android/server/wm/ActivityClientController.java
+++ b/services/core/java/com/android/server/wm/ActivityClientController.java
@@ -1515,8 +1515,10 @@ class ActivityClientController extends IActivityClientController.Stub {
r.mOverrideTaskTransition);
r.mTransitionController.setOverrideAnimation(
TransitionInfo.AnimationOptions.makeCustomAnimOptions(packageName,
- enterAnim, exitAnim, backgroundColor, r.mOverrideTaskTransition), r,
- null /* startCallback */, null /* finishCallback */);
+ enterAnim, 0 /* changeResId */, exitAnim,
+ r.mOverrideTaskTransition),
+ r, null /* startCallback */, null /* finishCallback */);
+ r.mTransitionController.setOverrideBackgroundColor(backgroundColor);
}
}
Binder.restoreCallingIdentity(origId);
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
index 8f816d225759..dcc3cf7ccf9e 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -5075,8 +5075,8 @@ final class ActivityRecord extends WindowToken {
switch (animationType) {
case ANIM_CUSTOM:
options = AnimationOptions.makeCustomAnimOptions(pendingOptions.getPackageName(),
- pendingOptions.getCustomEnterResId(), pendingOptions.getCustomExitResId(),
- pendingOptions.getCustomBackgroundColor(),
+ pendingOptions.getCustomEnterResId(), 0 /* changeResId */,
+ pendingOptions.getCustomExitResId(),
pendingOptions.getOverrideTaskTransition());
startCallback = pendingOptions.getAnimationStartedListener();
finishCallback = pendingOptions.getAnimationFinishedListener();
@@ -5137,6 +5137,10 @@ final class ActivityRecord extends WindowToken {
mTransitionController.setOverrideAnimation(options, this, startCallback,
finishCallback);
}
+ final int backgroundColor = pendingOptions.getCustomBackgroundColor();
+ if (backgroundColor != 0) {
+ mTransitionController.setOverrideBackgroundColor(backgroundColor);
+ }
}
void clearAllDrawn() {
diff --git a/services/core/java/com/android/server/wm/Transition.java b/services/core/java/com/android/server/wm/Transition.java
index 63a8c86f5ba8..78c6f9024657 100644
--- a/services/core/java/com/android/server/wm/Transition.java
+++ b/services/core/java/com/android/server/wm/Transition.java
@@ -77,6 +77,7 @@ import static com.android.server.wm.WindowContainer.AnimationFlags.PARENTS;
import static com.android.server.wm.WindowState.BLAST_TIMEOUT_DURATION;
import static com.android.window.flags.Flags.enableDisplayFocusInShellTransitions;
+import android.annotation.ColorInt;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
@@ -257,6 +258,12 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener {
/** Custom activity-level animation options and callbacks. */
private AnimationOptions mOverrideOptions;
+ /**
+ * Custom background color
+ */
+ @ColorInt
+ private int mOverrideBackgroundColor;
+
private IRemoteCallback mClientAnimationStartCallback = null;
private IRemoteCallback mClientAnimationFinishCallback = null;
@@ -1011,6 +1018,13 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener {
}
/**
+ * Set background color for collecting transition.
+ */
+ void setOverrideBackgroundColor(@ColorInt int backgroundColor) {
+ mOverrideBackgroundColor = backgroundColor;
+ }
+
+ /**
* Call this when all known changes related to this transition have been applied. Until
* all participants have finished drawing, the transition can still collect participants.
*
@@ -2038,8 +2052,7 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener {
if (container.asActivityRecord() != null
|| shouldApplyAnimOptionsToTask(container.asTask())) {
changes.get(i).setAnimationOptions(mOverrideOptions);
- // TODO(b/295805497): Extract mBackgroundColor from AnimationOptions.
- changes.get(i).setBackgroundColor(mOverrideOptions.getBackgroundColor());
+ changes.get(i).setBackgroundColor(mOverrideBackgroundColor);
} else if (shouldApplyAnimOptionsToEmbeddedTf(container.asTaskFragment())) {
// We only override AnimationOptions because backgroundColor should be from
// TaskFragmentAnimationParams.
@@ -2495,7 +2508,12 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener {
sb.append(" id=" + mSyncId);
sb.append(" type=" + transitTypeToString(mType));
sb.append(" flags=0x" + Integer.toHexString(mFlags));
- sb.append(" overrideAnimOptions=" + mOverrideOptions);
+ if (mOverrideOptions != null) {
+ sb.append(" overrideAnimOptions=" + mOverrideOptions);
+ }
+ if (mOverrideBackgroundColor != 0) {
+ sb.append(" overrideBackgroundColor=" + mOverrideBackgroundColor);
+ }
if (!mChanges.isEmpty()) {
sb.append(" c=[");
for (int i = 0; i < mChanges.size(); i++) {
@@ -3006,9 +3024,7 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener {
final Rect parentBounds = parent.getBounds();
change.setEndRelOffset(bounds.left - parentBounds.left,
bounds.top - parentBounds.top);
- if (Flags.activityEmbeddingOverlayPresentationFlag()) {
- change.setEndParentSize(parentBounds.width(), parentBounds.height());
- }
+ change.setEndParentSize(parentBounds.width(), parentBounds.height());
int endRotation = target.getWindowConfiguration().getRotation();
if (activityRecord != null) {
// TODO(b/227427984): Shell needs to aware letterbox.
@@ -3059,18 +3075,14 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener {
AnimationOptions animOptions = null;
if (activityRecord != null && animOptionsForActivityTransition != null) {
animOptions = animOptionsForActivityTransition;
- } else if (Flags.activityEmbeddingOverlayPresentationFlag()
- && isEmbeddedTaskFragment) {
+ } else if (isEmbeddedTaskFragment) {
final TaskFragmentAnimationParams params = taskFragment.getAnimationParams();
if (params.hasOverrideAnimation()) {
// Only set AnimationOptions if there's any animation override.
- // We use separated field for backgroundColor, and
- // AnimationOptions#backgroundColor will be removed in long term.
animOptions = AnimationOptions.makeCustomAnimOptions(
taskFragment.getTask().getBasePackageName(),
params.getOpenAnimationResId(), params.getChangeAnimationResId(),
- params.getCloseAnimationResId(), 0 /* backgroundColor */,
- false /* overrideTaskTransition */);
+ params.getCloseAnimationResId(), false /* overrideTaskTransition */);
animOptions.setUserId(taskFragment.getTask().mUserId);
}
}
diff --git a/services/core/java/com/android/server/wm/TransitionController.java b/services/core/java/com/android/server/wm/TransitionController.java
index ba7f36419ac5..11c5c9345ab2 100644
--- a/services/core/java/com/android/server/wm/TransitionController.java
+++ b/services/core/java/com/android/server/wm/TransitionController.java
@@ -23,6 +23,7 @@ import static android.view.WindowManager.TRANSIT_NONE;
import static com.android.server.wm.ActivityTaskManagerService.POWER_MODE_REASON_CHANGE_DISPLAY;
+import android.annotation.ColorInt;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityManager;
@@ -938,12 +939,19 @@ class TransitionController {
}
/** @see Transition#setOverrideAnimation */
- void setOverrideAnimation(TransitionInfo.AnimationOptions options, ActivityRecord r,
- @Nullable IRemoteCallback startCallback, @Nullable IRemoteCallback finishCallback) {
+ void setOverrideAnimation(@NonNull TransitionInfo.AnimationOptions options,
+ @NonNull ActivityRecord r, @Nullable IRemoteCallback startCallback,
+ @Nullable IRemoteCallback finishCallback) {
if (mCollectingTransition == null) return;
mCollectingTransition.setOverrideAnimation(options, r, startCallback, finishCallback);
}
+ /** @see Transition#setOverrideBackgroundColor */
+ void setOverrideBackgroundColor(@ColorInt int backgroundColor) {
+ if (mCollectingTransition == null) return;
+ mCollectingTransition.setOverrideBackgroundColor(backgroundColor);
+ }
+
void setNoAnimation(WindowContainer wc) {
if (mCollectingTransition == null) return;
mCollectingTransition.setNoAnimation(wc);
diff --git a/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java b/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java
index c0cb09f9a7d7..5699c2929b1d 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java
@@ -2088,14 +2088,16 @@ public class TransitionTests extends WindowTestsBase {
@Test
public void testOverrideAnimationOptionsToInfoIfNecessary_customAnimOptions() {
- ActivityRecord r = initializeOverrideAnimationOptionsTest();
- TransitionInfo.AnimationOptions options = TransitionInfo.AnimationOptions
+ final ActivityRecord r = initializeOverrideAnimationOptionsTest();
+ final TransitionInfo.AnimationOptions options = TransitionInfo.AnimationOptions
.makeCustomAnimOptions("testPackage", Resources.ID_NULL,
TransitionInfo.AnimationOptions.DEFAULT_ANIMATION_RESOURCES_ID,
TransitionInfo.AnimationOptions.DEFAULT_ANIMATION_RESOURCES_ID,
- Color.GREEN, false /* overrideTaskTransition */);
+ false /* overrideTaskTransition */);
mTransition.setOverrideAnimation(options, r, null /* startCallback */,
null /* finishCallback */);
+ final int expectedBackgroundColor = Color.GREEN;
+ mTransition.setOverrideBackgroundColor(expectedBackgroundColor);
mTransition.overrideAnimationOptionsToInfoIfNecessary(mInfo);
@@ -2115,12 +2117,13 @@ public class TransitionTests extends WindowTestsBase {
assertEquals("Activity change's AnimationOptions must be overridden.",
options, activityChange.getAnimationOptions());
assertEquals("Activity change's background color must be overridden.",
- options.getBackgroundColor(), activityChange.getBackgroundColor());
+ expectedBackgroundColor, activityChange.getBackgroundColor());
+
}
@Test
public void testOverrideAnimationOptionsToInfoIfNecessary_haveTaskFragmentAnimParams() {
- ActivityRecord r = initializeOverrideAnimationOptionsTest();
+ final ActivityRecord r = initializeOverrideAnimationOptionsTest();
final TaskFragment embeddedTf = mTransition.mTargets.get(2).mContainer.asTaskFragment();
embeddedTf.setAnimationParams(new TaskFragmentAnimationParams.Builder()
@@ -2128,13 +2131,15 @@ public class TransitionTests extends WindowTestsBase {
.setOpenAnimationResId(0x12345678)
.build());
- TransitionInfo.AnimationOptions options = TransitionInfo.AnimationOptions
+ final TransitionInfo.AnimationOptions options = TransitionInfo.AnimationOptions
.makeCustomAnimOptions("testPackage", Resources.ID_NULL,
TransitionInfo.AnimationOptions.DEFAULT_ANIMATION_RESOURCES_ID,
TransitionInfo.AnimationOptions.DEFAULT_ANIMATION_RESOURCES_ID,
- Color.GREEN, false /* overrideTaskTransition */);
+ false /* overrideTaskTransition */);
mTransition.setOverrideAnimation(options, r, null /* startCallback */,
null /* finishCallback */);
+ final int expectedBackgroundColor = Color.GREEN;
+ mTransition.setOverrideBackgroundColor(expectedBackgroundColor);
final TransitionInfo.Change displayChange = mInfo.getChanges().get(0);
final TransitionInfo.Change taskChange = mInfo.getChanges().get(1);
@@ -2147,7 +2152,7 @@ public class TransitionTests extends WindowTestsBase {
.makeCustomAnimOptions("testPackage", 0x12345678,
TransitionInfo.AnimationOptions.DEFAULT_ANIMATION_RESOURCES_ID,
TransitionInfo.AnimationOptions.DEFAULT_ANIMATION_RESOURCES_ID,
- 0, false /* overrideTaskTransition */);
+ false /* overrideTaskTransition */);
embeddedTfChange.setAnimationOptions(expectedOptions);
mTransition.overrideAnimationOptionsToInfoIfNecessary(mInfo);
@@ -2163,19 +2168,21 @@ public class TransitionTests extends WindowTestsBase {
assertEquals("Activity change's AnimationOptions must be overridden.",
options, activityChange.getAnimationOptions());
assertEquals("Activity change's background color must be overridden.",
- options.getBackgroundColor(), activityChange.getBackgroundColor());
+ expectedBackgroundColor, activityChange.getBackgroundColor());
}
@Test
public void testOverrideAnimationOptionsToInfoIfNecessary_customAnimOptionsWithTaskOverride() {
- ActivityRecord r = initializeOverrideAnimationOptionsTest();
- TransitionInfo.AnimationOptions options = TransitionInfo.AnimationOptions
+ final ActivityRecord r = initializeOverrideAnimationOptionsTest();
+ final TransitionInfo.AnimationOptions options = TransitionInfo.AnimationOptions
.makeCustomAnimOptions("testPackage", Resources.ID_NULL,
TransitionInfo.AnimationOptions.DEFAULT_ANIMATION_RESOURCES_ID,
TransitionInfo.AnimationOptions.DEFAULT_ANIMATION_RESOURCES_ID,
- Color.GREEN, true /* overrideTaskTransition */);
+ true /* overrideTaskTransition */);
mTransition.setOverrideAnimation(options, r, null /* startCallback */,
null /* finishCallback */);
+ final int expectedBackgroundColor = Color.GREEN;
+ mTransition.setOverrideBackgroundColor(expectedBackgroundColor);
mTransition.overrideAnimationOptionsToInfoIfNecessary(mInfo);
@@ -2189,7 +2196,7 @@ public class TransitionTests extends WindowTestsBase {
assertEquals("Task change's AnimationOptions must be overridden.",
options, taskChange.getAnimationOptions());
assertEquals("Task change's background color must be overridden.",
- options.getBackgroundColor(), taskChange.getBackgroundColor());
+ expectedBackgroundColor, taskChange.getBackgroundColor());
assertEquals("Embedded TF change's AnimationOptions must be overridden.",
options, embeddedTfChange.getAnimationOptions());
assertEquals("Embedded TF change's background color must be overridden.",
@@ -2197,7 +2204,7 @@ public class TransitionTests extends WindowTestsBase {
assertEquals("Activity change's AnimationOptions must be overridden.",
options, activityChange.getAnimationOptions());
assertEquals("Activity change's background color must be overridden.",
- options.getBackgroundColor(), activityChange.getBackgroundColor());
+ expectedBackgroundColor, activityChange.getBackgroundColor());
}
private ActivityRecord initializeOverrideAnimationOptionsTest() {