diff options
Diffstat (limited to 'libs')
7 files changed, 50 insertions, 42 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleStackView.java b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleStackView.java index 1b20f67e42ab..f8f8897e41d5 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleStackView.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleStackView.java @@ -1068,6 +1068,7 @@ public class BubbleStackView extends FrameLayout // We need to be Z ordered on top in order for alpha animations to work. mExpandedBubble.getExpandedView().setSurfaceZOrderedOnTop(true); mExpandedBubble.getExpandedView().setAnimating(true); + mExpandedViewContainer.setVisibility(VISIBLE); } } @@ -2922,14 +2923,15 @@ public class BubbleStackView extends FrameLayout final float targetX = isLtr ? mTempRect.left - margin : mTempRect.right + margin - mManageMenu.getWidth(); - final float targetY = mTempRect.bottom - mManageMenu.getHeight(); + final float menuHeight = getVisibleManageMenuHeight(); + final float targetY = mTempRect.bottom - menuHeight; final float xOffsetForAnimation = (isLtr ? 1 : -1) * mManageMenu.getWidth() / 4f; if (show) { mManageMenu.setScaleX(0.5f); mManageMenu.setScaleY(0.5f); mManageMenu.setTranslationX(targetX - xOffsetForAnimation); - mManageMenu.setTranslationY(targetY + mManageMenu.getHeight() / 4f); + mManageMenu.setTranslationY(targetY + menuHeight / 4f); mManageMenu.setAlpha(0f); PhysicsAnimator.getInstance(mManageMenu) @@ -2955,7 +2957,7 @@ public class BubbleStackView extends FrameLayout .spring(DynamicAnimation.SCALE_X, 0.5f) .spring(DynamicAnimation.SCALE_Y, 0.5f) .spring(DynamicAnimation.TRANSLATION_X, targetX - xOffsetForAnimation) - .spring(DynamicAnimation.TRANSLATION_Y, targetY + mManageMenu.getHeight() / 4f) + .spring(DynamicAnimation.TRANSLATION_Y, targetY + menuHeight / 4f) .withEndActions(() -> { mManageMenu.setVisibility(View.INVISIBLE); if (mExpandedBubble != null && mExpandedBubble.getExpandedView() != null) { @@ -3115,7 +3117,7 @@ public class BubbleStackView extends FrameLayout mAnimatingOutBubbleBuffer.getColorSpace()); mAnimatingOutSurfaceView.setAlpha(1f); - mExpandedViewContainer.setVisibility(View.GONE); + mExpandedViewContainer.setVisibility(View.INVISIBLE); mSurfaceSynchronizer.syncSurfaceAndRun(() -> { post(() -> { @@ -3145,9 +3147,6 @@ public class BubbleStackView extends FrameLayout int[] paddings = mPositioner.getExpandedViewContainerPadding( mStackAnimationController.isStackOnLeftSide(), isOverflowExpanded); mExpandedViewContainer.setPadding(paddings[0], paddings[1], paddings[2], paddings[3]); - if (mIsExpansionAnimating) { - mExpandedViewContainer.setVisibility(mIsExpanded ? VISIBLE : GONE); - } if (mExpandedBubble != null && mExpandedBubble.getExpandedView() != null) { PointF p = mPositioner.getExpandedBubbleXY(getBubbleIndex(mExpandedBubble), getState()); @@ -3272,6 +3271,24 @@ public class BubbleStackView extends FrameLayout } /** + * Menu height calculated for animation + * It takes into account view visibility to get the correct total height + */ + private float getVisibleManageMenuHeight() { + float menuHeight = 0; + + for (int i = 0; i < mManageMenu.getChildCount(); i++) { + View subview = mManageMenu.getChildAt(i); + + if (subview.getVisibility() == VISIBLE) { + menuHeight += subview.getHeight(); + } + } + + return menuHeight; + } + + /** * @return the normalized x-axis position of the bubble stack rounded to 4 decimal places. */ public float getNormalizedXPosition() { diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIWindowManager.java b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIWindowManager.java index 170c0ee91b40..659229228a57 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIWindowManager.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/CompatUIWindowManager.java @@ -20,6 +20,7 @@ import static android.app.TaskInfo.CAMERA_COMPAT_CONTROL_DISMISSED; import static android.app.TaskInfo.CAMERA_COMPAT_CONTROL_HIDDEN; import static android.app.TaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_APPLIED; import static android.app.TaskInfo.CAMERA_COMPAT_CONTROL_TREATMENT_SUGGESTED; +import static android.window.TaskConstants.TASK_CHILD_LAYER_COMPAT_UI; import android.annotation.NonNull; import android.annotation.Nullable; @@ -46,11 +47,6 @@ import java.util.function.Consumer; */ class CompatUIWindowManager extends CompatUIWindowManagerAbstract { - /** - * The Compat UI should be below the Letterbox Education. - */ - private static final int Z_ORDER = LetterboxEduWindowManager.Z_ORDER - 1; - private final CompatUICallback mCallback; private final CompatUIConfiguration mCompatUIConfiguration; @@ -92,7 +88,7 @@ class CompatUIWindowManager extends CompatUIWindowManagerAbstract { @Override protected int getZOrder() { - return Z_ORDER; + return TASK_CHILD_LAYER_COMPAT_UI + 1; } @Override diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/LetterboxEduWindowManager.java b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/LetterboxEduWindowManager.java index 0c21c8ccd686..959c50d5c640 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/LetterboxEduWindowManager.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/LetterboxEduWindowManager.java @@ -17,6 +17,7 @@ package com.android.wm.shell.compatui; import static android.provider.Settings.Secure.LAUNCHER_TASKBAR_EDUCATION_SHOWING; +import static android.window.TaskConstants.TASK_CHILD_LAYER_COMPAT_UI; import android.annotation.NonNull; import android.annotation.Nullable; @@ -46,12 +47,6 @@ import java.util.function.Consumer; */ class LetterboxEduWindowManager extends CompatUIWindowManagerAbstract { - /** - * The Letterbox Education should be the topmost child of the Task in case there can be more - * than one child. - */ - public static final int Z_ORDER = Integer.MAX_VALUE; - private final DialogAnimationController<LetterboxEduDialogLayout> mAnimationController; private final Transitions mTransitions; @@ -118,7 +113,7 @@ class LetterboxEduWindowManager extends CompatUIWindowManagerAbstract { @Override protected int getZOrder() { - return Z_ORDER; + return TASK_CHILD_LAYER_COMPAT_UI + 2; } @Override diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/ReachabilityEduWindowManager.java b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/ReachabilityEduWindowManager.java index b6e396d12512..a18ab9154e01 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/ReachabilityEduWindowManager.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/ReachabilityEduWindowManager.java @@ -18,6 +18,7 @@ package com.android.wm.shell.compatui; import static android.view.WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; import static android.view.WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE; +import static android.window.TaskConstants.TASK_CHILD_LAYER_COMPAT_UI; import android.annotation.NonNull; import android.annotation.Nullable; @@ -41,11 +42,6 @@ import com.android.wm.shell.common.SyncTransactionQueue; */ class ReachabilityEduWindowManager extends CompatUIWindowManagerAbstract { - /** - * The Compat UI should be below the Letterbox Education. - */ - private static final int Z_ORDER = LetterboxEduWindowManager.Z_ORDER - 1; - // The time to wait before hiding the education private static final long DISAPPEAR_DELAY_MS = 4000L; @@ -102,7 +98,7 @@ class ReachabilityEduWindowManager extends CompatUIWindowManagerAbstract { @Override protected int getZOrder() { - return Z_ORDER; + return TASK_CHILD_LAYER_COMPAT_UI + 1; } @Override diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/RestartDialogWindowManager.java b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/RestartDialogWindowManager.java index aab123a843ea..51e5141a28af 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/RestartDialogWindowManager.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/compatui/RestartDialogWindowManager.java @@ -17,6 +17,7 @@ package com.android.wm.shell.compatui; import static android.provider.Settings.Secure.LAUNCHER_TASKBAR_EDUCATION_SHOWING; +import static android.window.TaskConstants.TASK_CHILD_LAYER_COMPAT_UI; import android.annotation.NonNull; import android.annotation.Nullable; @@ -47,12 +48,6 @@ import java.util.function.Consumer; */ class RestartDialogWindowManager extends CompatUIWindowManagerAbstract { - /** - * The restart dialog should be the topmost child of the Task in case there can be more - * than one child. - */ - private static final int Z_ORDER = Integer.MAX_VALUE; - private final DialogAnimationController<RestartDialogLayout> mAnimationController; private final Transitions mTransitions; @@ -112,7 +107,7 @@ class RestartDialogWindowManager extends CompatUIWindowManagerAbstract { @Override protected int getZOrder() { - return Z_ORDER; + return TASK_CHILD_LAYER_COMPAT_UI + 2; } @Override @@ -170,10 +165,10 @@ class RestartDialogWindowManager extends CompatUIWindowManagerAbstract { final Rect taskBounds = getTaskBounds(); final Rect taskStableBounds = getTaskStableBounds(); - - marginParams.topMargin = taskStableBounds.top - taskBounds.top + mDialogVerticalMargin; - marginParams.bottomMargin = - taskBounds.bottom - taskStableBounds.bottom + mDialogVerticalMargin; + // only update margins based on taskbar insets + marginParams.topMargin = mDialogVerticalMargin; + marginParams.bottomMargin = taskBounds.bottom - taskStableBounds.bottom + + mDialogVerticalMargin; dialogContainer.setLayoutParams(marginParams); } diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java index b6216b340b38..566c130c7573 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/PipTaskOrganizer.java @@ -1690,8 +1690,17 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener, // Similar to auto-enter-pip transition, we use content overlay when there is no // source rect hint to enter PiP use bounds animation. if (sourceHintRect == null) { + // We use content overlay when there is no source rect hint to enter PiP use bounds + // animation. + // TODO(b/272819817): cleanup the null-check and extra logging. + final boolean hasTopActivityInfo = mTaskInfo.topActivityInfo != null; + if (!hasTopActivityInfo) { + ProtoLog.w(ShellProtoLogGroup.WM_SHELL_TRANSITIONS, + "%s: TaskInfo.topActivityInfo is null", TAG); + } if (SystemProperties.getBoolean( - "persist.wm.debug.enable_pip_app_icon_overlay", true)) { + "persist.wm.debug.enable_pip_app_icon_overlay", true) + && hasTopActivityInfo) { animator.setAppIconContentOverlay( mContext, currentBounds, mTaskInfo.topActivityInfo, mPipBoundsState.getLauncherState().getAppIconSizePx()); diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/TransitionAnimationHelper.java b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/TransitionAnimationHelper.java index bcc37baa5b00..0f4645c0fdab 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/transition/TransitionAnimationHelper.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/transition/TransitionAnimationHelper.java @@ -122,14 +122,14 @@ public class TransitionAnimationHelper { ? R.styleable.WindowAnimation_taskToFrontEnterAnimation : R.styleable.WindowAnimation_taskToFrontExitAnimation; } else if (type == TRANSIT_CLOSE) { - if (isTask) { + if ((changeFlags & FLAG_TRANSLUCENT) != 0 && !enter) { + translucent = true; + } + if (isTask && !translucent) { animAttr = enter ? R.styleable.WindowAnimation_taskCloseEnterAnimation : R.styleable.WindowAnimation_taskCloseExitAnimation; } else { - if ((changeFlags & FLAG_TRANSLUCENT) != 0 && !enter) { - translucent = true; - } animAttr = enter ? R.styleable.WindowAnimation_activityCloseEnterAnimation : R.styleable.WindowAnimation_activityCloseExitAnimation; |