diff options
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() { |