diff options
| author | 2025-02-11 20:35:50 +0800 | |
|---|---|---|
| committer | 2025-02-21 12:04:47 +0800 | |
| commit | 773d8aaf2f99adf14a1e1d87279e8bc646cad623 (patch) | |
| tree | a70dd43b545924384eae7ab9ff62bd0c12533024 | |
| parent | 7a248913517a2789ac7444cae939b58af71b3625 (diff) | |
Extract background color from AnimationOptions
Test: presubmit
Bug: 327332488
Flag: EXEMPT refactors only
Change-Id: I43661f619ef4d6abf659fb769e5cbf22b3f0ccd5
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() { |