diff options
| author | 2022-10-26 03:05:39 +0000 | |
|---|---|---|
| committer | 2022-10-26 03:05:39 +0000 | |
| commit | 2d0d492064ed7bf346f8affaf24d966cfebee3b7 (patch) | |
| tree | b16fa12d3c6dcc263852922f26ec67fc18ae71d2 | |
| parent | 96e8a788ef0fe2f09b480a5de18b269a43db6d7d (diff) | |
| parent | fba7092c99bda36768b55f0d795071fc63a62556 (diff) | |
Merge "Show bg color during ActivityEmbedding change anim for legacy transition" into tm-qpr-dev
3 files changed, 32 insertions, 9 deletions
diff --git a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentAnimationSpec.java b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentAnimationSpec.java index ef5ea563de12..a7d47ef81687 100644 --- a/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentAnimationSpec.java +++ b/libs/WindowManager/Jetpack/src/androidx/window/extensions/embedding/TaskFragmentAnimationSpec.java @@ -161,7 +161,7 @@ class TaskFragmentAnimationSpec { // The position should be 0-based as we will post translate in // TaskFragmentAnimationAdapter#onAnimationUpdate final Animation endTranslate = new TranslateAnimation(startBounds.left - endBounds.left, 0, - 0, 0); + startBounds.top - endBounds.top, 0); endTranslate.setDuration(CHANGE_ANIMATION_DURATION); endSet.addAnimation(endTranslate); // The end leash is resizing, we should update the window crop based on the clip rect. diff --git a/services/core/java/com/android/server/wm/AppTransition.java b/services/core/java/com/android/server/wm/AppTransition.java index 5c1a877cc865..27370bfe45dc 100644 --- a/services/core/java/com/android/server/wm/AppTransition.java +++ b/services/core/java/com/android/server/wm/AppTransition.java @@ -1460,6 +1460,12 @@ public class AppTransition implements Dump { || transit == TRANSIT_OLD_ACTIVITY_RELAUNCH; } + static boolean isTaskFragmentTransitOld(@TransitionOldType int transit) { + return transit == TRANSIT_OLD_TASK_FRAGMENT_OPEN + || transit == TRANSIT_OLD_TASK_FRAGMENT_CLOSE + || transit == TRANSIT_OLD_TASK_FRAGMENT_CHANGE; + } + static boolean isChangeTransitOld(@TransitionOldType int transit) { return transit == TRANSIT_OLD_TASK_CHANGE_WINDOWING_MODE || transit == TRANSIT_OLD_TASK_FRAGMENT_CHANGE; diff --git a/services/core/java/com/android/server/wm/WindowContainer.java b/services/core/java/com/android/server/wm/WindowContainer.java index 07ae167f5e66..bece47613b92 100644 --- a/services/core/java/com/android/server/wm/WindowContainer.java +++ b/services/core/java/com/android/server/wm/WindowContainer.java @@ -41,6 +41,7 @@ import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_SYNC_ENGINE; import static com.android.server.policy.WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER; import static com.android.server.wm.AppTransition.MAX_APP_TRANSITION_DURATION; import static com.android.server.wm.AppTransition.isActivityTransitOld; +import static com.android.server.wm.AppTransition.isTaskFragmentTransitOld; import static com.android.server.wm.AppTransition.isTaskTransitOld; import static com.android.server.wm.DisplayContent.IME_TARGET_LAYERING; import static com.android.server.wm.IdentifierProto.HASH_CODE; @@ -2985,10 +2986,17 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer< // {@link Activity#overridePendingTransition(int, int, int)}. @ColorInt int backdropColor = 0; if (controller.isFromActivityEmbedding()) { - final int animAttr = AppTransition.mapOpenCloseTransitTypes(transit, enter); - final Animation a = animAttr != 0 - ? appTransition.loadAnimationAttr(lp, animAttr, transit) : null; - showBackdrop = a != null && a.getShowBackdrop(); + if (isChanging) { + // When there are more than one changing containers, it may leave part of the + // screen empty. Show background color to cover that. + showBackdrop = getDisplayContent().mChangingContainers.size() > 1; + } else { + // Check whether or not to show backdrop for open/close transition. + final int animAttr = AppTransition.mapOpenCloseTransitTypes(transit, enter); + final Animation a = animAttr != 0 + ? appTransition.loadAnimationAttr(lp, animAttr, transit) : null; + showBackdrop = a != null && a.getShowBackdrop(); + } backdropColor = appTransition.getNextAppTransitionBackgroundColor(); } final Rect localBounds = new Rect(mTmpRect); @@ -3091,9 +3099,16 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer< } } + // Check if the animation requests to show background color for Activity and embedded + // TaskFragment. final ActivityRecord activityRecord = asActivityRecord(); - if (activityRecord != null && isActivityTransitOld(transit) - && adapter.getShowBackground()) { + final TaskFragment taskFragment = asTaskFragment(); + if (adapter.getShowBackground() + // Check if it is Activity transition. + && ((activityRecord != null && isActivityTransitOld(transit)) + // Check if it is embedded TaskFragment transition. + || (taskFragment != null && taskFragment.isEmbedded() + && isTaskFragmentTransitOld(transit)))) { final @ColorInt int backgroundColorForTransition; if (adapter.getBackgroundColor() != 0) { // If available use the background color provided through getBackgroundColor @@ -3103,9 +3118,11 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer< // Otherwise default to the window's background color if provided through // the theme as the background color for the animation - the top most window // with a valid background color and showBackground set takes precedence. - final Task arTask = activityRecord.getTask(); + final Task parentTask = activityRecord != null + ? activityRecord.getTask() + : taskFragment.getTask(); backgroundColorForTransition = ColorUtils.setAlphaComponent( - arTask.getTaskDescription().getBackgroundColor(), 255); + parentTask.getTaskDescription().getBackgroundColor(), 255); } animationRunnerBuilder.setTaskBackgroundColor(backgroundColorForTransition); } |