summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Charles Chen <charlesccchen@google.com> 2025-02-11 20:35:50 +0800
committer Charles Chen <charlesccchen@google.com> 2025-02-21 12:04:47 +0800
commit773d8aaf2f99adf14a1e1d87279e8bc646cad623 (patch)
treea70dd43b545924384eae7ab9ff62bd0c12533024
parent7a248913517a2789ac7444cae939b58af71b3625 (diff)
Extract background color from AnimationOptions
Test: presubmit Bug: 327332488 Flag: EXEMPT refactors only Change-Id: I43661f619ef4d6abf659fb769e5cbf22b3f0ccd5
-rw-r--r--core/java/android/window/TransitionInfo.java26
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/activityembedding/ActivityEmbeddingAnimationRunnerTests.java4
-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.java29
-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
8 files changed, 68 insertions, 56 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/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..17419da2d1bc 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
@@ -135,8 +135,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 */),
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 7b6d408fbe2c..d050652f8d0e 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -5089,8 +5089,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();
@@ -5151,6 +5151,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 fd7d96a646ae..a84feca054e7 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++) {
@@ -3064,13 +3082,10 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener {
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() {