From 99fdf7a75e37b64f2a1bc2f87ca2cf048e1d254d Mon Sep 17 00:00:00 2001 From: Uwais Ashraf Date: Mon, 5 Feb 2024 13:18:58 +0000 Subject: [PATCH] App chip refactor - Adds background outline replacing 2 circles + rect approach. This enables easier shadow drawing code. - Simplify structure of AppChipView. - Adds an anchor View to simplify laying out of menu around app chip Bug: 313644427 Bug: 317007147 Fix: 322760765 Flag: ACONFIG com.android.launcher3.enable_grid_only_overview TEAMFOOD Flag: ACONFIG com.android.launcher3.enable_overview_icon_menu TEAMFOOD Test: OverviewImageTest Change-Id: I56c2644779863c083ae475a740a84321b1d0c396 --- quickstep/res/layout/icon_app_chip_view.xml | 52 ++- quickstep/res/values/dimens.xml | 60 ++- .../LandscapePagedViewHandler.java | 24 +- .../orientation/PortraitPagedViewHandler.java | 27 +- .../RecentsPagedOrientationHandler.java | 7 + .../orientation/SeascapePagedViewHandler.java | 29 +- .../quickstep/views/GroupedTaskView.java | 7 +- .../quickstep/views/IconAppChipView.java | 341 ++++++++---------- .../com/android/quickstep/views/IconView.java | 8 +- .../android/quickstep/views/TaskMenuView.java | 66 ++-- res/drawable/icon_menu_background.xml | 21 -- res/drawable/icon_menu_background_corners.xml | 22 -- .../icon_menu_elevation_background.xml | 22 -- res/values/dimens.xml | 5 - src/com/android/launcher3/DeviceProfile.java | 5 - .../DeviceProfileDumpTest/phonePortrait.txt | 1 - .../phonePortrait3Button.txt | 1 - .../phoneVerticalBar.txt | 1 - .../phoneVerticalBar3Button.txt | 1 - .../DeviceProfileDumpTest/tabletLandscape.txt | 1 - .../tabletLandscape3Button.txt | 1 - .../DeviceProfileDumpTest/tabletPortrait.txt | 1 - .../tabletPortrait3Button.txt | 1 - .../twoPanelLandscape.txt | 1 - .../twoPanelLandscape3Button.txt | 1 - .../twoPanelPortrait.txt | 1 - .../twoPanelPortrait3Button.txt | 1 - 27 files changed, 276 insertions(+), 432 deletions(-) delete mode 100644 res/drawable/icon_menu_background.xml delete mode 100644 res/drawable/icon_menu_background_corners.xml delete mode 100644 res/drawable/icon_menu_elevation_background.xml diff --git a/quickstep/res/layout/icon_app_chip_view.xml b/quickstep/res/layout/icon_app_chip_view.xml index b7acb70721..fb9bf998ec 100644 --- a/quickstep/res/layout/icon_app_chip_view.xml +++ b/quickstep/res/layout/icon_app_chip_view.xml @@ -17,45 +17,41 @@ + android:elevation="@dimen/task_thumbnail_icon_menu_elevation" + android:background="?androidprv:attr/materialColorSurfaceBright"> - - - + + + + 16dp 16dp - - 156dp - - 216dp - - 120dp - - 86dp - - 118dp + + 86dp + + 118dp 14sp - - 164dp - - 36dp - - 28dp - - 36dp - - 52dp - - 24dp - - 16dp - - 12dp - - 12dp + + 156dp + + 216dp + + 36dp + + 52dp + + 4dp + + 8dp + + 8dp - 6dp + 2dp 6dp 8dp - - 8dp - - 24dp - - 32dp + + 24dp + + 24dp + + 32dp 44dp 4dp diff --git a/quickstep/src/com/android/quickstep/orientation/LandscapePagedViewHandler.java b/quickstep/src/com/android/quickstep/orientation/LandscapePagedViewHandler.java index a7ca51585f..24b48dbc42 100644 --- a/quickstep/src/com/android/quickstep/orientation/LandscapePagedViewHandler.java +++ b/quickstep/src/com/android/quickstep/orientation/LandscapePagedViewHandler.java @@ -274,21 +274,12 @@ public class LandscapePagedViewHandler implements RecentsPagedOrientationHandler @Override public float getTaskMenuX(float x, View thumbnailView, DeviceProfile deviceProfile, float taskInsetMargin, View taskViewIcon) { - if (enableOverviewIconMenu()) { - return x + (taskInsetMargin / 2f); - } return thumbnailView.getMeasuredWidth() + x - taskInsetMargin; } @Override public float getTaskMenuY(float y, View thumbnailView, int stagePosition, View taskMenuView, float taskInsetMargin, View taskViewIcon) { - if (enableOverviewIconMenu()) { - return y - (thumbnailView.getLayoutDirection() == LAYOUT_DIRECTION_RTL - ? taskMenuView.getMeasuredHeight() * 2 - (taskInsetMargin / 2f) - : taskMenuView.getMeasuredHeight()); - - } BaseDragLayer.LayoutParams lp = (BaseDragLayer.LayoutParams) taskMenuView.getLayoutParams(); int taskMenuWidth = lp.width; if (stagePosition == STAGE_POSITION_UNDEFINED) { @@ -304,7 +295,7 @@ public class LandscapePagedViewHandler implements RecentsPagedOrientationHandler @StagePosition int stagePosition) { if (enableOverviewIconMenu()) { return thumbnailView.getResources().getDimensionPixelSize( - R.dimen.task_thumbnail_icon_menu_max_width); + R.dimen.task_thumbnail_icon_menu_expanded_width); } if (stagePosition == SplitConfigurationOptions.STAGE_POSITION_UNDEFINED) { return thumbnailView.getMeasuredWidth(); @@ -582,11 +573,6 @@ public class LandscapePagedViewHandler implements RecentsPagedOrientationHandler @Override public void setTaskIconParams(FrameLayout.LayoutParams iconParams, int taskIconMargin, int taskIconHeight, int thumbnailTopMargin, boolean isRtl) { - if (enableOverviewIconMenu()) { - iconParams.gravity = Gravity.START | Gravity.CENTER_VERTICAL; - iconParams.topMargin = 0; - return; - } iconParams.gravity = (isRtl ? START : END) | CENTER_VERTICAL; iconParams.rightMargin = -taskIconHeight - taskIconMargin / 2; iconParams.leftMargin = 0; @@ -594,6 +580,14 @@ public class LandscapePagedViewHandler implements RecentsPagedOrientationHandler iconParams.bottomMargin = 0; } + @Override + public void setIconAppChipChildrenParams(FrameLayout.LayoutParams iconParams, + int chipChildMarginStart) { + iconParams.gravity = Gravity.START | Gravity.CENTER_VERTICAL; + iconParams.setMarginStart(chipChildMarginStart); + iconParams.topMargin = 0; + } + @Override public void setIconAppChipMenuParams(IconAppChipView iconAppChipView, FrameLayout.LayoutParams iconMenuParams, int iconMenuMargin, int thumbnailTopMargin) { diff --git a/quickstep/src/com/android/quickstep/orientation/PortraitPagedViewHandler.java b/quickstep/src/com/android/quickstep/orientation/PortraitPagedViewHandler.java index 5d9a668da5..2f996e183d 100644 --- a/quickstep/src/com/android/quickstep/orientation/PortraitPagedViewHandler.java +++ b/quickstep/src/com/android/quickstep/orientation/PortraitPagedViewHandler.java @@ -21,7 +21,6 @@ import static android.view.Gravity.CENTER_HORIZONTAL; import static android.view.Gravity.END; import static android.view.Gravity.START; import static android.view.Gravity.TOP; -import static android.view.View.LAYOUT_DIRECTION_RTL; import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT; @@ -182,12 +181,7 @@ public class PortraitPagedViewHandler extends DefaultPagedViewHandler implements @Override public float getTaskMenuX(float x, View thumbnailView, DeviceProfile deviceProfile, float taskInsetMargin, View taskViewIcon) { - if (enableOverviewIconMenu()) { - if (thumbnailView.getLayoutDirection() == LAYOUT_DIRECTION_RTL) { - return x + taskInsetMargin - taskViewIcon.getHeight() - (taskInsetMargin / 2f); - } - return x + taskInsetMargin; - } else if (deviceProfile.isLandscape) { + if (deviceProfile.isLandscape) { return x + taskInsetMargin + (thumbnailView.getMeasuredWidth() - thumbnailView.getMeasuredHeight()) / 2f; } else { @@ -198,9 +192,6 @@ public class PortraitPagedViewHandler extends DefaultPagedViewHandler implements @Override public float getTaskMenuY(float y, View thumbnailView, int stagePosition, View taskMenuView, float taskInsetMargin, View taskViewIcon) { - if (enableOverviewIconMenu()) { - return y; - } return y + taskInsetMargin; } @@ -209,7 +200,7 @@ public class PortraitPagedViewHandler extends DefaultPagedViewHandler implements @StagePosition int stagePosition) { if (enableOverviewIconMenu()) { return thumbnailView.getResources().getDimensionPixelSize( - R.dimen.task_thumbnail_icon_menu_max_width); + R.dimen.task_thumbnail_icon_menu_expanded_width); } int padding = thumbnailView.getResources() .getDimensionPixelSize(R.dimen.task_menu_edge_padding); @@ -623,18 +614,20 @@ public class PortraitPagedViewHandler extends DefaultPagedViewHandler implements @Override public void setTaskIconParams(FrameLayout.LayoutParams iconParams, int taskIconMargin, int taskIconHeight, int thumbnailTopMargin, boolean isRtl) { - if (enableOverviewIconMenu()) { - iconParams.setMarginStart(taskIconMargin); - iconParams.gravity = Gravity.START | Gravity.CENTER_VERTICAL; - iconParams.topMargin = 0; - return; - } iconParams.gravity = TOP | CENTER_HORIZONTAL; // Reset margins, since they may have been set on rotation iconParams.leftMargin = iconParams.rightMargin = 0; iconParams.topMargin = iconParams.bottomMargin = 0; } + @Override + public void setIconAppChipChildrenParams(FrameLayout.LayoutParams iconParams, + int chipChildMarginStart) { + iconParams.setMarginStart(chipChildMarginStart); + iconParams.gravity = Gravity.START | Gravity.CENTER_VERTICAL; + iconParams.topMargin = 0; + } + @Override public void setIconAppChipMenuParams(IconAppChipView iconAppChipView, FrameLayout.LayoutParams iconMenuParams, int iconMenuMargin, int thumbnailTopMargin) { diff --git a/quickstep/src/com/android/quickstep/orientation/RecentsPagedOrientationHandler.java b/quickstep/src/com/android/quickstep/orientation/RecentsPagedOrientationHandler.java index 9084297084..01c1225c40 100644 --- a/quickstep/src/com/android/quickstep/orientation/RecentsPagedOrientationHandler.java +++ b/quickstep/src/com/android/quickstep/orientation/RecentsPagedOrientationHandler.java @@ -146,9 +146,16 @@ public interface RecentsPagedOrientationHandler extends PagedOrientationHandler int parentWidth, int parentHeight); // Overview TaskMenuView methods + /** Sets layout params on a task's app icon. Only use this when app chip is disabled. */ void setTaskIconParams(FrameLayout.LayoutParams iconParams, int taskIconMargin, int taskIconHeight, int thumbnailTopMargin, boolean isRtl); + /** + * Sets layout params on the children of an app chip. Only use this when app chip is enabled. + */ + void setIconAppChipChildrenParams( + FrameLayout.LayoutParams iconParams, int chipChildMarginStart); + void setIconAppChipMenuParams(IconAppChipView iconAppChipView, FrameLayout.LayoutParams iconMenuParams, int iconMenuMargin, int thumbnailTopMargin); diff --git a/quickstep/src/com/android/quickstep/orientation/SeascapePagedViewHandler.java b/quickstep/src/com/android/quickstep/orientation/SeascapePagedViewHandler.java index f3001fceb9..9090d145f9 100644 --- a/quickstep/src/com/android/quickstep/orientation/SeascapePagedViewHandler.java +++ b/quickstep/src/com/android/quickstep/orientation/SeascapePagedViewHandler.java @@ -94,9 +94,6 @@ public class SeascapePagedViewHandler extends LandscapePagedViewHandler { @Override public float getTaskMenuX(float x, View thumbnailView, DeviceProfile deviceProfile, float taskInsetMargin, View taskViewIcon) { - if (enableOverviewIconMenu()) { - return x + (taskViewIcon.getHeight() * 2); - } return x + taskInsetMargin; } @@ -104,9 +101,7 @@ public class SeascapePagedViewHandler extends LandscapePagedViewHandler { public float getTaskMenuY(float y, View thumbnailView, int stagePosition, View taskMenuView, float taskInsetMargin, View taskViewIcon) { if (enableOverviewIconMenu()) { - return y + taskViewIcon.getWidth() + ( - thumbnailView.getLayoutDirection() == LAYOUT_DIRECTION_RTL ? taskInsetMargin - / 2f : -taskViewIcon.getHeight()); + return y; } BaseDragLayer.LayoutParams lp = (BaseDragLayer.LayoutParams) taskMenuView.getLayoutParams(); int taskMenuWidth = lp.width; @@ -222,18 +217,16 @@ public class SeascapePagedViewHandler extends LandscapePagedViewHandler { @Override public void setTaskIconParams(FrameLayout.LayoutParams iconParams, int taskIconMargin, int taskIconHeight, int thumbnailTopMargin, boolean isRtl) { - iconParams.rightMargin = 0; - iconParams.bottomMargin = 0; - if (enableOverviewIconMenu()) { - iconParams.setMarginStart(taskIconMargin); - iconParams.gravity = Gravity.START | Gravity.CENTER_VERTICAL; - iconParams.leftMargin = 0; - iconParams.topMargin = 0; - } else { - iconParams.gravity = (isRtl ? END : START) | CENTER_VERTICAL; - iconParams.leftMargin = -taskIconHeight - taskIconMargin / 2; - iconParams.topMargin = thumbnailTopMargin / 2; - } + iconParams.gravity = (isRtl ? END : START) | CENTER_VERTICAL; + iconParams.setMargins(-taskIconHeight - taskIconMargin / 2, thumbnailTopMargin / 2, 0, 0); + } + + @Override + public void setIconAppChipChildrenParams(FrameLayout.LayoutParams iconParams, + int chipChildMarginStart) { + iconParams.setMargins(0, 0, 0, 0); + iconParams.setMarginStart(chipChildMarginStart); + iconParams.gravity = Gravity.START | Gravity.CENTER_VERTICAL; } @Override diff --git a/quickstep/src/com/android/quickstep/views/GroupedTaskView.java b/quickstep/src/com/android/quickstep/views/GroupedTaskView.java index 66c67e7b26..ad4b29214f 100644 --- a/quickstep/src/com/android/quickstep/views/GroupedTaskView.java +++ b/quickstep/src/com/android/quickstep/views/GroupedTaskView.java @@ -398,8 +398,11 @@ public class GroupedTaskView extends TaskView { layoutParams.width, layoutParams.height ); - int iconMargins = getResources().getDimensionPixelSize( - R.dimen.task_thumbnail_icon_menu_start_margin) * 2; + int iconViewMarginStart = getResources().getDimensionPixelSize( + R.dimen.task_thumbnail_icon_menu_expanded_top_start_margin); + int iconViewBackgroundMarginStart = getResources().getDimensionPixelSize( + R.dimen.task_thumbnail_icon_menu_background_margin_top_start); + int iconMargins = (iconViewMarginStart + iconViewBackgroundMarginStart) * 2; ((IconAppChipView) mIconView).setMaxWidth(groupedTaskViewSizes.first.x - iconMargins); ((IconAppChipView) mIconView2).setMaxWidth(groupedTaskViewSizes.second.x - iconMargins); } diff --git a/quickstep/src/com/android/quickstep/views/IconAppChipView.java b/quickstep/src/com/android/quickstep/views/IconAppChipView.java index 3347665e84..958c28a164 100644 --- a/quickstep/src/com/android/quickstep/views/IconAppChipView.java +++ b/quickstep/src/com/android/quickstep/views/IconAppChipView.java @@ -17,30 +17,32 @@ package com.android.quickstep.views; import static com.android.app.animation.Interpolators.EMPHASIZED; import static com.android.app.animation.Interpolators.LINEAR; +import static com.android.launcher3.LauncherAnimUtils.SCALE_PROPERTY; import android.animation.Animator; -import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorSet; import android.animation.ObjectAnimator; +import android.animation.RectEvaluator; +import android.animation.ValueAnimator; import android.content.Context; import android.content.res.Resources; +import android.graphics.Outline; +import android.graphics.Rect; import android.graphics.drawable.AnimatedVectorDrawable; import android.graphics.drawable.Drawable; import android.util.AttributeSet; -import android.view.Gravity; import android.view.View; import android.view.ViewAnimationUtils; +import android.view.ViewOutlineProvider; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.Nullable; -import com.android.launcher3.DeviceProfile; import com.android.launcher3.R; import com.android.launcher3.Utilities; import com.android.launcher3.util.MultiValueAlpha; -import com.android.launcher3.views.ActivityContext; import com.android.quickstep.orientation.RecentsPagedOrientationHandler; import com.android.quickstep.util.RecentsOrientedState; @@ -59,34 +61,28 @@ public class IconAppChipView extends FrameLayout implements TaskViewIcon { private final MultiValueAlpha mMultiValueAlpha; + private View mMenuAnchorView; private IconView mIconView; // Two textview so we can ellipsize the collapsed view and crossfade on expand to the full name. private TextView mIconTextCollapsedView; private TextView mIconTextExpandedView; private ImageView mIconArrowView; - private ImageView mIconViewBackground; - // Use separate views for the rounded corners so we can scale the background view without - // warping the corners. - private ImageView mIconViewBackgroundCornersStart; - private ImageView mIconViewBackgroundCornersEnd; - - private final int mMinimumMenuSize; - private final int mMaxMenuWidth; - private final int mIconMenuMarginTop; - private final int mIconMenuMarginStart; + private final Rect mBackgroundRelativeLtrLocation = new Rect(); + final RectEvaluator mBackgroundAnimationRectEvaluator = + new RectEvaluator(mBackgroundRelativeLtrLocation); + private final int mCollapsedMenuDefaultWidth; + private final int mExpandedMenuDefaultWidth; + private final int mCollapsedMenuDefaultHeight; + private final int mExpandedMenuDefaultHeight; + private final int mIconMenuMarginTopStart; + private final int mMenuToChipGap; + private final int mBackgroundMarginTopStart; + private final int mAppNameHorizontalMargin; private final int mIconViewMarginStart; - private final int mIconViewDrawableSize; - private final int mIconViewDrawableMaxSize; - private final int mIconTextMinWidth; - private final int mIconTextMaxWidth; - private final int mTextMaxTranslationX; - private final int mInnerMargin; - private final float mArrowMaxTranslationX; - private final int mMinIconBackgroundWidth; - private final int mMaxIconBackgroundHeight; - private final int mMinIconBackgroundHeight; - private final int mMaxIconBackgroundCornerRadius; - private final float mMinIconBackgroundCornerRadius; + private final int mAppIconSize; + private final int mArrowSize; + private final int mIconViewDrawableExpandedSize; + private final int mArrowMarginEnd; private AnimatorSet mAnimator; private int mMaxWidth = Integer.MAX_VALUE; @@ -111,51 +107,35 @@ public class IconAppChipView extends FrameLayout implements TaskViewIcon { mMultiValueAlpha.setUpdateVisibility(/* updateVisibility= */ true); // Menu dimensions - mMaxMenuWidth = res.getDimensionPixelSize(R.dimen.task_thumbnail_icon_menu_max_width); - mIconMenuMarginTop = res.getDimensionPixelSize(R.dimen.task_thumbnail_icon_menu_top_margin); - mIconMenuMarginStart = res.getDimensionPixelSize( - R.dimen.task_thumbnail_icon_menu_start_margin); + mCollapsedMenuDefaultWidth = + res.getDimensionPixelSize(R.dimen.task_thumbnail_icon_menu_collapsed_width); + mExpandedMenuDefaultWidth = + res.getDimensionPixelSize(R.dimen.task_thumbnail_icon_menu_expanded_width); + mCollapsedMenuDefaultHeight = + res.getDimensionPixelSize(R.dimen.task_thumbnail_icon_menu_collapsed_height); + mExpandedMenuDefaultHeight = + res.getDimensionPixelSize(R.dimen.task_thumbnail_icon_menu_expanded_height); + mIconMenuMarginTopStart = res.getDimensionPixelSize( + R.dimen.task_thumbnail_icon_menu_expanded_top_start_margin); + mMenuToChipGap = res.getDimensionPixelSize( + R.dimen.task_thumbnail_icon_menu_expanded_gap); // Background dimensions - mMinIconBackgroundWidth = res.getDimensionPixelSize( - R.dimen.task_thumbnail_icon_menu_background_min_width); - mMaxIconBackgroundHeight = res.getDimensionPixelSize( - R.dimen.task_thumbnail_icon_menu_max_height); - mMinIconBackgroundHeight = res.getDimensionPixelSize( - R.dimen.task_thumbnail_icon_menu_min_height); - mMaxIconBackgroundCornerRadius = res.getDimensionPixelSize( - R.dimen.task_thumbnail_icon_menu_corner_radius); + mBackgroundMarginTopStart = res.getDimensionPixelSize( + R.dimen.task_thumbnail_icon_menu_background_margin_top_start); - // TextView dimensions - mInnerMargin = (int) res.getDimension(R.dimen.task_thumbnail_icon_menu_arrow_margin); - mIconTextMinWidth = res.getDimensionPixelSize(R.dimen.task_thumbnail_icon_menu_text_width); - mIconTextMaxWidth = res.getDimensionPixelSize( - R.dimen.task_thumbnail_icon_menu_text_max_width); - - // IconView dimensions + // Contents dimensions + mAppNameHorizontalMargin = res.getDimensionPixelSize( + R.dimen.task_thumbnail_icon_menu_app_name_margin_horizontal_collapsed); + mArrowMarginEnd = res.getDimensionPixelSize(R.dimen.task_thumbnail_icon_menu_arrow_margin); mIconViewMarginStart = res.getDimensionPixelSize( R.dimen.task_thumbnail_icon_view_start_margin); - mIconViewDrawableSize = res.getDimensionPixelSize( - R.dimen.task_thumbnail_icon_menu_drawable_size); - mIconViewDrawableMaxSize = res.getDimensionPixelSize( - R.dimen.task_thumbnail_icon_menu_drawable_max_size); - mTextMaxTranslationX = - (mIconViewDrawableMaxSize - mIconViewDrawableSize - mIconViewMarginStart) - + (mInnerMargin / 2); - - // ArrowView dimensions - int iconArrowViewWidth = res.getDimensionPixelSize( + mAppIconSize = res.getDimensionPixelSize( + R.dimen.task_thumbnail_icon_menu_app_icon_collapsed_size); + mArrowSize = res.getDimensionPixelSize( R.dimen.task_thumbnail_icon_menu_arrow_size); - mMinIconBackgroundCornerRadius = mMinIconBackgroundHeight / 2f; - float maxCornerSize = Math.min(mMaxIconBackgroundHeight / 2f, - mMaxIconBackgroundCornerRadius); - mArrowMaxTranslationX = (mMaxMenuWidth - maxCornerSize) - (Math.min(mMaxWidth, - mMinIconBackgroundWidth + (2 * mMinIconBackgroundCornerRadius) - - mMinIconBackgroundCornerRadius)) - mInnerMargin; - - // Menu dimensions - mMinimumMenuSize = - mIconViewMarginStart + mIconViewDrawableSize + mInnerMargin + iconArrowViewWidth; + mIconViewDrawableExpandedSize = res.getDimensionPixelSize( + R.dimen.task_thumbnail_icon_menu_app_icon_expanded_size); } @Override @@ -165,9 +145,7 @@ public class IconAppChipView extends FrameLayout implements TaskViewIcon { mIconTextCollapsedView = findViewById(R.id.icon_text_collapsed); mIconTextExpandedView = findViewById(R.id.icon_text_expanded); mIconArrowView = findViewById(R.id.icon_arrow); - mIconViewBackground = findViewById(R.id.icon_view_background); - mIconViewBackgroundCornersStart = findViewById(R.id.icon_view_background_corners_start); - mIconViewBackgroundCornersEnd = findViewById(R.id.icon_view_background_corners_end); + mMenuAnchorView = findViewById(R.id.icon_view_menu_anchor); } protected IconView getIconView() { @@ -204,88 +182,85 @@ public class IconAppChipView extends FrameLayout implements TaskViewIcon { } /** - * Sets the maximum width of this Icon Menu. + * Sets the maximum width of this Icon Menu. This is usually used when space is limited for + * split screen. */ public void setMaxWidth(int maxWidth) { - // Only the app icon and caret are visible at its minimum width. - mMaxWidth = Math.max(maxWidth, mMinimumMenuSize); + // Width showing only the app icon and arrow. Max width should not be set to less than this. + int minimumMaxWidth = mIconViewMarginStart + mAppIconSize + mArrowSize + mArrowMarginEnd; + mMaxWidth = Math.max(maxWidth, minimumMaxWidth); } @Override public void setIconOrientation(RecentsOrientedState orientationState, boolean isGridTask) { RecentsPagedOrientationHandler orientationHandler = orientationState.getOrientationHandler(); - boolean isRtl = isLayoutRtl(); - DeviceProfile deviceProfile = - ActivityContext.lookupContext(getContext()).getDeviceProfile(); + // Layout params for anchor view + LayoutParams anchorLayoutParams = (LayoutParams) mMenuAnchorView.getLayoutParams(); + anchorLayoutParams.topMargin = mExpandedMenuDefaultHeight + mMenuToChipGap; + mMenuAnchorView.setLayoutParams(anchorLayoutParams); - // Layout Params for the Menu View - int thumbnailTopMargin = - deviceProfile.overviewTaskThumbnailTopMarginPx + mIconMenuMarginTop; + // Layout Params for the Menu View (this) LayoutParams iconMenuParams = (LayoutParams) getLayoutParams(); - orientationHandler.setIconAppChipMenuParams(this, iconMenuParams, mIconMenuMarginStart, - thumbnailTopMargin); - iconMenuParams.width = Math.min(mMaxWidth, - mMinIconBackgroundWidth + (int) (2 * mMinIconBackgroundCornerRadius)); - iconMenuParams.height = mMinIconBackgroundHeight; + iconMenuParams.width = mExpandedMenuDefaultWidth; + iconMenuParams.height = mExpandedMenuDefaultHeight; + orientationHandler.setIconAppChipMenuParams(this, iconMenuParams, mIconMenuMarginTopStart, + mIconMenuMarginTopStart); setLayoutParams(iconMenuParams); + // Layout params for the background + Rect collapsedBackgroundBounds = getCollapsedBackgroundLtrBounds(); + mBackgroundRelativeLtrLocation.set(collapsedBackgroundBounds); + setOutlineProvider(new ViewOutlineProvider() { + final Rect mRtlAppliedOutlineBounds = new Rect(); + @Override + public void getOutline(View view, Outline outline) { + mRtlAppliedOutlineBounds.set(mBackgroundRelativeLtrLocation); + if (isLayoutRtl()) { + int width = getWidth(); + mRtlAppliedOutlineBounds.left = width - mBackgroundRelativeLtrLocation.right; + mRtlAppliedOutlineBounds.right = width - mBackgroundRelativeLtrLocation.left; + } + outline.setRoundRect( + mRtlAppliedOutlineBounds, mRtlAppliedOutlineBounds.height() / 2f); + } + }); + // Layout Params for the Icon View LayoutParams iconParams = (LayoutParams) mIconView.getLayoutParams(); - orientationHandler.setTaskIconParams(iconParams, mIconViewMarginStart, - mIconViewDrawableSize, thumbnailTopMargin, isRtl); - iconParams.width = iconParams.height = mIconViewDrawableSize; + int iconMarginStartRelativeToParent = mIconViewMarginStart + mBackgroundMarginTopStart; + orientationHandler.setIconAppChipChildrenParams( + iconParams, iconMarginStartRelativeToParent); + mIconView.setLayoutParams(iconParams); - mIconView.setDrawableSize(mIconViewDrawableSize, mIconViewDrawableSize); + mIconView.setDrawableSize(mAppIconSize, mAppIconSize); // Layout Params for the collapsed Icon Text View + int textMarginStart = + iconMarginStartRelativeToParent + mAppIconSize + mAppNameHorizontalMargin; LayoutParams iconTextCollapsedParams = (LayoutParams) mIconTextCollapsedView.getLayoutParams(); - orientationHandler.setTaskIconParams(iconTextCollapsedParams, 0, mIconViewDrawableSize, - thumbnailTopMargin, isRtl); - iconTextCollapsedParams.setMarginStart( - mIconViewDrawableSize + mIconViewMarginStart + mInnerMargin); - iconTextCollapsedParams.topMargin = (mMinIconBackgroundHeight - mIconViewDrawableSize) / 2; - iconTextCollapsedParams.gravity = Gravity.TOP | Gravity.START; - iconTextCollapsedParams.width = Math.min( - Math.max(mMaxWidth - mMinimumMenuSize - (2 * mInnerMargin), 0), mIconTextMinWidth); + orientationHandler.setIconAppChipChildrenParams(iconTextCollapsedParams, textMarginStart); + int collapsedTextWidth = collapsedBackgroundBounds.width() - mIconViewMarginStart + - mAppIconSize - mArrowSize - mAppNameHorizontalMargin - mArrowMarginEnd; + iconTextCollapsedParams.width = collapsedTextWidth; mIconTextCollapsedView.setLayoutParams(iconTextCollapsedParams); mIconTextCollapsedView.setAlpha(1f); // Layout Params for the expanded Icon Text View LayoutParams iconTextExpandedParams = (LayoutParams) mIconTextExpandedView.getLayoutParams(); - orientationHandler.setTaskIconParams(iconTextExpandedParams, 0, mIconViewDrawableSize, - thumbnailTopMargin, isRtl); - iconTextExpandedParams.setMarginStart( - mIconViewDrawableSize + mIconViewMarginStart + mInnerMargin); - iconTextExpandedParams.topMargin = (mMinIconBackgroundHeight - mIconViewDrawableSize) / 2; - iconTextExpandedParams.gravity = Gravity.TOP | Gravity.START; + orientationHandler.setIconAppChipChildrenParams(iconTextExpandedParams, textMarginStart); mIconTextExpandedView.setLayoutParams(iconTextExpandedParams); mIconTextExpandedView.setAlpha(0f); - mIconTextExpandedView.setRevealClip(true, 0, mIconViewDrawableSize / 2f, mIconTextMinWidth); + mIconTextExpandedView.setRevealClip(true, 0, mAppIconSize / 2f, collapsedTextWidth); // Layout Params for the Icon Arrow View LayoutParams iconArrowParams = (LayoutParams) mIconArrowView.getLayoutParams(); - iconArrowParams.gravity = Gravity.CENTER_VERTICAL | Gravity.END; - iconArrowParams.setMarginEnd(mInnerMargin); + int arrowMarginStart = collapsedBackgroundBounds.right - mArrowMarginEnd - mArrowSize; + orientationHandler.setIconAppChipChildrenParams(iconArrowParams, arrowMarginStart); mIconArrowView.setLayoutParams(iconArrowParams); - // Layout Params for the Icon View Background and its corners - int cornerlessBackgroundWidth = (int) Math.min( - mMaxWidth - (2 * mMinIconBackgroundCornerRadius), mMinIconBackgroundWidth); - LayoutParams backgroundCornerEndParams = - (LayoutParams) mIconViewBackgroundCornersEnd.getLayoutParams(); - backgroundCornerEndParams.setMarginStart(cornerlessBackgroundWidth); - mIconViewBackgroundCornersEnd.setLayoutParams(backgroundCornerEndParams); - LayoutParams backgroundParams = (LayoutParams) mIconViewBackground.getLayoutParams(); - backgroundParams.width = cornerlessBackgroundWidth; - backgroundParams.height = mMinIconBackgroundHeight; - backgroundParams.setMarginStart((int) mMinIconBackgroundCornerRadius); - mIconViewBackground.setLayoutParams(backgroundParams); - mIconViewBackground.setPivotX(isRtl ? cornerlessBackgroundWidth : 0); - mIconViewBackground.setPivotY(mMinIconBackgroundCornerRadius); - // This method is called twice sometimes (like when rotating split tasks). It is called // once before onMeasure and onLayout, and again after onMeasure but before onLayout with // a new width. This happens because we update widths on rotation and on measure of @@ -324,108 +299,96 @@ public class IconAppChipView extends FrameLayout implements TaskViewIcon { protected void revealAnim(boolean isRevealing) { cancelInProgressAnimations(); + final Rect collapsedBackgroundBounds = getCollapsedBackgroundLtrBounds(); + final Rect expandedBackgroundBounds = getExpandedBackgroundLtrBounds(); + final Rect initialBackground = new Rect(mBackgroundRelativeLtrLocation); + mAnimator = new AnimatorSet(); if (isRevealing) { boolean isRtl = isLayoutRtl(); bringToFront(); ((AnimatedVectorDrawable) mIconArrowView.getDrawable()).start(); - mAnimator = new AnimatorSet(); - float backgroundScaleY = mMaxIconBackgroundHeight / (float) mMinIconBackgroundHeight; - float maxCornerSize = Math.min(mMaxIconBackgroundHeight / 2f, - mMaxIconBackgroundCornerRadius); - float backgroundScaleX = (mMaxMenuWidth - (2 * maxCornerSize)) / Math.min( - mMaxWidth - (2 * mMinIconBackgroundCornerRadius), mMinIconBackgroundWidth); - float arrowTranslationX = mArrowMaxTranslationX + (mMinIconBackgroundWidth - Math.min( - mMaxWidth - (2 * mMinIconBackgroundCornerRadius), mMinIconBackgroundWidth)); // Clip expanded text with reveal animation so it doesn't go beyond the edge of the menu Animator expandedTextRevealAnim = ViewAnimationUtils.createCircularReveal( - mIconTextExpandedView, 0, mIconTextExpandedView.getHeight() / 2, 0, - mIconTextMaxWidth + maxCornerSize); - expandedTextRevealAnim.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - // createCircularReveal removes clip on finish, restore it here to clip text. - mIconTextExpandedView.setRevealClip(true, 0, - mIconTextExpandedView.getHeight() / 2f, - mIconTextMaxWidth + maxCornerSize); - } - }); + mIconTextExpandedView, 0, mIconTextExpandedView.getHeight() / 2, + mIconTextCollapsedView.getWidth(), mIconTextExpandedView.getWidth()); + // Animate background clipping + ValueAnimator backgroundAnimator = ValueAnimator.ofObject( + mBackgroundAnimationRectEvaluator, + initialBackground, + expandedBackgroundBounds); + backgroundAnimator.addUpdateListener(valueAnimator -> invalidateOutline()); + + float iconViewScaling = mIconViewDrawableExpandedSize / (float) mAppIconSize; + float arrowTranslationX = + expandedBackgroundBounds.right - collapsedBackgroundBounds.right; + float iconCenterToTextCollapsed = mAppIconSize / 2f + mAppNameHorizontalMargin; + float iconCenterToTextExpanded = + mIconViewDrawableExpandedSize / 2f + mAppNameHorizontalMargin; + float textTranslationX = iconCenterToTextExpanded - iconCenterToTextCollapsed; + + float textTranslationXWithRtl = isRtl ? -textTranslationX : textTranslationX; + float arrowTranslationWithRtl = isRtl ? -arrowTranslationX : arrowTranslationX; + mAnimator.playTogether( expandedTextRevealAnim, - ObjectAnimator.ofFloat(mIconViewBackgroundCornersStart, SCALE_Y, - backgroundScaleY), - ObjectAnimator.ofFloat(mIconViewBackgroundCornersStart, SCALE_X, - backgroundScaleY), - ObjectAnimator.ofFloat(mIconViewBackgroundCornersEnd, SCALE_Y, - backgroundScaleY), - ObjectAnimator.ofFloat(mIconViewBackgroundCornersEnd, SCALE_X, - backgroundScaleY), - ObjectAnimator.ofFloat(mIconViewBackgroundCornersEnd, TRANSLATION_X, - isRtl ? -arrowTranslationX : arrowTranslationX), - ObjectAnimator.ofFloat(mIconViewBackground, SCALE_X, backgroundScaleX), - ObjectAnimator.ofFloat(mIconViewBackground, SCALE_Y, backgroundScaleY), - ObjectAnimator.ofFloat(mIconView, SCALE_X, - mIconViewDrawableMaxSize / (float) mIconViewDrawableSize), - ObjectAnimator.ofFloat(mIconView, SCALE_Y, - mIconViewDrawableMaxSize / (float) mIconViewDrawableSize), + backgroundAnimator, + ObjectAnimator.ofFloat(mIconView, SCALE_X, iconViewScaling), + ObjectAnimator.ofFloat(mIconView, SCALE_Y, iconViewScaling), ObjectAnimator.ofFloat(mIconTextCollapsedView, TRANSLATION_X, - isLayoutRtl() ? -mTextMaxTranslationX : mTextMaxTranslationX), + textTranslationXWithRtl), ObjectAnimator.ofFloat(mIconTextExpandedView, TRANSLATION_X, - isLayoutRtl() ? -mTextMaxTranslationX : mTextMaxTranslationX), + textTranslationXWithRtl), ObjectAnimator.ofFloat(mIconTextCollapsedView, ALPHA, 0), ObjectAnimator.ofFloat(mIconTextExpandedView, ALPHA, 1), - ObjectAnimator.ofFloat(mIconArrowView, TRANSLATION_X, - isRtl ? -arrowTranslationX : arrowTranslationX)); + ObjectAnimator.ofFloat(mIconArrowView, TRANSLATION_X, arrowTranslationWithRtl)); mAnimator.setDuration(MENU_BACKGROUND_REVEAL_DURATION); - mAnimator.setInterpolator(EMPHASIZED); - mAnimator.start(); } else { ((AnimatedVectorDrawable) mIconArrowView.getDrawable()).reverse(); - float maxCornerSize = Math.min(mMaxIconBackgroundHeight / 2f, - mMaxIconBackgroundCornerRadius); // Clip expanded text with reveal animation so it doesn't go beyond the edge of the menu Animator expandedTextClipAnim = ViewAnimationUtils.createCircularReveal( mIconTextExpandedView, 0, mIconTextExpandedView.getHeight() / 2, - mIconTextMaxWidth + maxCornerSize, 0); - expandedTextClipAnim.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - // createCircularReveal removes clip on finish, restore it here to clip text. - mIconTextExpandedView.setRevealClip(true, 0, - mIconTextExpandedView.getHeight() / 2f, 0); - } - }); - mAnimator = new AnimatorSet(); + mIconTextExpandedView.getWidth(), mIconTextCollapsedView.getWidth()); + + // Animate background clipping + ValueAnimator backgroundAnimator = ValueAnimator.ofObject( + mBackgroundAnimationRectEvaluator, + initialBackground, + collapsedBackgroundBounds); + backgroundAnimator.addUpdateListener(valueAnimator -> invalidateOutline()); + mAnimator.playTogether( expandedTextClipAnim, - ObjectAnimator.ofFloat(mIconViewBackgroundCornersStart, SCALE_X, 1), - ObjectAnimator.ofFloat(mIconViewBackgroundCornersStart, SCALE_Y, 1), - ObjectAnimator.ofFloat(mIconViewBackgroundCornersEnd, SCALE_X, 1), - ObjectAnimator.ofFloat(mIconViewBackgroundCornersEnd, SCALE_Y, 1), - ObjectAnimator.ofFloat(mIconViewBackgroundCornersEnd, TRANSLATION_X, 0), - ObjectAnimator.ofFloat(mIconViewBackground, SCALE_X, 1), - ObjectAnimator.ofFloat(mIconViewBackground, SCALE_Y, 1), - ObjectAnimator.ofFloat(mIconView, SCALE_X, 1), - ObjectAnimator.ofFloat(mIconView, SCALE_Y, 1), + backgroundAnimator, + ObjectAnimator.ofFloat(mIconView, SCALE_PROPERTY, 1), ObjectAnimator.ofFloat(mIconTextCollapsedView, TRANSLATION_X, 0), ObjectAnimator.ofFloat(mIconTextExpandedView, TRANSLATION_X, 0), ObjectAnimator.ofFloat(mIconTextCollapsedView, ALPHA, 1), ObjectAnimator.ofFloat(mIconTextExpandedView, ALPHA, 0), ObjectAnimator.ofFloat(mIconArrowView, TRANSLATION_X, 0)); mAnimator.setDuration(MENU_BACKGROUND_HIDE_DURATION); - mAnimator.setInterpolator(EMPHASIZED); - mAnimator.start(); } + + mAnimator.setInterpolator(EMPHASIZED); + mAnimator.start(); + } + + private Rect getCollapsedBackgroundLtrBounds() { + Rect bounds = new Rect( + 0, + 0, + Math.min(mMaxWidth, mCollapsedMenuDefaultWidth), + mCollapsedMenuDefaultHeight); + bounds.offset(mBackgroundMarginTopStart, mBackgroundMarginTopStart); + return bounds; + } + + private Rect getExpandedBackgroundLtrBounds() { + return new Rect(0, 0, mExpandedMenuDefaultWidth, mExpandedMenuDefaultHeight); } protected void reset() { - mIconViewBackgroundCornersStart.setScaleX(1); - mIconViewBackgroundCornersStart.setScaleY(1); - mIconViewBackgroundCornersEnd.setScaleX(1); - mIconViewBackgroundCornersEnd.setScaleY(1); - mIconViewBackgroundCornersEnd.setTranslationX(0); - mIconViewBackground.setScaleX(1); - mIconViewBackground.setScaleY(1); + mBackgroundRelativeLtrLocation.set(getCollapsedBackgroundLtrBounds()); mIconView.setScaleX(1); mIconView.setScaleY(1); mIconTextCollapsedView.setTranslationX(0); diff --git a/quickstep/src/com/android/quickstep/views/IconView.java b/quickstep/src/com/android/quickstep/views/IconView.java index 4d33fda55c..1312ec3325 100644 --- a/quickstep/src/com/android/quickstep/views/IconView.java +++ b/quickstep/src/com/android/quickstep/views/IconView.java @@ -15,8 +15,6 @@ */ package com.android.quickstep.views; -import static com.android.launcher3.Flags.enableOverviewIconMenu; - import android.content.Context; import android.graphics.Canvas; import android.graphics.Rect; @@ -196,10 +194,8 @@ public class IconView extends View implements TaskViewIcon { setLayoutParams(iconParams); setRotation(orientationHandler.getDegreesRotated()); - int iconDrawableSize = enableOverviewIconMenu() - ? deviceProfile.overviewTaskIconAppChipMenuDrawableSizePx - : isGridTask ? deviceProfile.overviewTaskIconDrawableSizeGridPx - : deviceProfile.overviewTaskIconDrawableSizePx; + int iconDrawableSize = isGridTask ? deviceProfile.overviewTaskIconDrawableSizeGridPx + : deviceProfile.overviewTaskIconDrawableSizePx; setDrawableSize(iconDrawableSize, iconDrawableSize); } diff --git a/quickstep/src/com/android/quickstep/views/TaskMenuView.java b/quickstep/src/com/android/quickstep/views/TaskMenuView.java index cf508350d3..64043839a5 100644 --- a/quickstep/src/com/android/quickstep/views/TaskMenuView.java +++ b/quickstep/src/com/android/quickstep/views/TaskMenuView.java @@ -225,8 +225,10 @@ public class TaskMenuView extends AbstractFloatingView { // Get Position DeviceProfile deviceProfile = mActivity.getDeviceProfile(); mActivity.getDragLayer().getDescendantRectRelativeToSelf( - enableOverviewIconMenu() ? taskContainer.getIconView().asView() - : taskContainer.getThumbnailView(), sTempRect); + enableOverviewIconMenu() + ? getIconView().findViewById(R.id.icon_view_menu_anchor) + : taskContainer.getThumbnailView(), + sTempRect); Rect insets = mActivity.getDragLayer().getInsets(); BaseDragLayer.LayoutParams params = (BaseDragLayer.LayoutParams) getLayoutParams(); params.width = orientationHandler.getTaskMenuWidth(taskContainer.getThumbnailView(), @@ -246,15 +248,9 @@ public class TaskMenuView extends AbstractFloatingView { orientationHandler.setTaskOptionsMenuLayoutOrientation( deviceProfile, mOptionLayout, dividerSpacing, divider); - float thumbnailAlignedX = sTempRect.left - insets.left + (enableOverviewIconMenu() - ? -getResources().getDimensionPixelSize( - R.dimen.task_thumbnail_icon_menu_touch_max_margin) - - getResources().getDimension(R.dimen.task_thumbnail_icon_menu_start_margin) - : 0); - float thumbnailAlignedY = sTempRect.top - insets.top + (enableOverviewIconMenu() - ? getResources().getDimensionPixelSize(R.dimen.task_thumbnail_icon_menu_max_height) - - getResources().getDimensionPixelSize( - R.dimen.task_thumbnail_icon_menu_top_margin) : 0); + float thumbnailAlignedX = sTempRect.left - insets.left; + float thumbnailAlignedY = sTempRect.top - insets.top; + // Changing pivot to make computations easier // NOTE: Changing the pivots means the rotated view gets rotated about the new pivots set, // which would render the X and Y position set here incorrect @@ -262,31 +258,35 @@ public class TaskMenuView extends AbstractFloatingView { setPivotY(0); setRotation(orientationHandler.getDegreesRotated()); - // Margin that insets the menuView inside the taskView - float taskInsetMarginX = enableOverviewIconMenu() ? getResources().getDimension( - R.dimen.task_thumbnail_icon_menu_start_margin) : getResources().getDimension( - R.dimen.task_card_margin); - float taskInsetMarginY = enableOverviewIconMenu() ? getResources().getDimension( - R.dimen.task_thumbnail_icon_menu_start_margin) : getResources().getDimension( - R.dimen.task_card_margin); - setTranslationX(orientationHandler.getTaskMenuX(thumbnailAlignedX, - mTaskContainer.getThumbnailView(), deviceProfile, taskInsetMarginX, - mTaskContainer.getIconView().asView())); - setTranslationY(orientationHandler.getTaskMenuY( - thumbnailAlignedY, mTaskContainer.getThumbnailView(), - mTaskContainer.getStagePosition(), this, taskInsetMarginY, - mTaskContainer.getIconView().asView())); + if (enableOverviewIconMenu()) { + setTranslationX(thumbnailAlignedX); + setTranslationY(thumbnailAlignedY); + } else { + // Margin that insets the menuView inside the taskView + float taskInsetMargin = getResources().getDimension(R.dimen.task_card_margin); + setTranslationX(orientationHandler.getTaskMenuX(thumbnailAlignedX, + mTaskContainer.getThumbnailView(), deviceProfile, taskInsetMargin, + getIconView())); + setTranslationY(orientationHandler.getTaskMenuY( + thumbnailAlignedY, mTaskContainer.getThumbnailView(), + mTaskContainer.getStagePosition(), this, taskInsetMargin, + getIconView())); + } } private void animateOpen() { mMenuTranslationYBeforeOpen = getTranslationY(); mMenuTranslationXBeforeOpen = getTranslationX(); - mIconViewTranslationYBeforeOpen = mTaskContainer.getIconView().asView().getTranslationY(); - mIconViewTranslationXBeforeOpen = mTaskContainer.getIconView().asView().getTranslationX(); + mIconViewTranslationYBeforeOpen = getIconView().getTranslationY(); + mIconViewTranslationXBeforeOpen = getIconView().getTranslationX(); animateOpenOrClosed(false); mIsOpen = true; } + private View getIconView() { + return mTaskContainer.getIconView().asView(); + } + private void animateClose() { animateOpenOrClosed(true); } @@ -318,17 +318,13 @@ public class TaskMenuView extends AbstractFloatingView { float midpoint = (taskBottom + taskbarTop) / 2f; additionalTranslationY = -Math.max(menuBottom - midpoint, 0); } - // Translate the menu to account for the expansion of the app chip menu as well. - float expandOffsetTranslationY = getResources().getDimensionPixelSize( - R.dimen.task_thumbnail_icon_menu_expanded_gap); ObjectAnimator translationYAnim = ObjectAnimator.ofFloat(this, TRANSLATION_Y, closing ? mMenuTranslationYBeforeOpen - : mMenuTranslationYBeforeOpen + additionalTranslationY - + expandOffsetTranslationY); + : mMenuTranslationYBeforeOpen + additionalTranslationY); translationYAnim.setInterpolator(EMPHASIZED); ObjectAnimator menuTranslationYAnim = ObjectAnimator.ofFloat( - mTaskContainer.getIconView().asView(), TRANSLATION_Y, + getIconView(), TRANSLATION_Y, closing ? mIconViewTranslationYBeforeOpen : mIconViewTranslationYBeforeOpen + additionalTranslationY); menuTranslationYAnim.setInterpolator(EMPHASIZED); @@ -349,7 +345,7 @@ public class TaskMenuView extends AbstractFloatingView { translationXAnim.setInterpolator(EMPHASIZED); ObjectAnimator menuTranslationXAnim = ObjectAnimator.ofFloat( - mTaskContainer.getIconView().asView(), TRANSLATION_X, + getIconView(), TRANSLATION_X, closing ? mIconViewTranslationXBeforeOpen : mIconViewTranslationXBeforeOpen - additionalTranslationX); menuTranslationXAnim.setInterpolator(EMPHASIZED); @@ -393,7 +389,7 @@ public class TaskMenuView extends AbstractFloatingView { if (enableOverviewIconMenu()) { ((IconAppChipView) mTaskContainer.getIconView()).reset(); setTranslationY(mMenuTranslationYBeforeOpen); - mTaskContainer.getIconView().asView().setTranslationY(mIconViewTranslationYBeforeOpen); + getIconView().setTranslationY(mIconViewTranslationYBeforeOpen); } } diff --git a/res/drawable/icon_menu_background.xml b/res/drawable/icon_menu_background.xml deleted file mode 100644 index 8a95c3ecb4..0000000000 --- a/res/drawable/icon_menu_background.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - \ No newline at end of file diff --git a/res/drawable/icon_menu_background_corners.xml b/res/drawable/icon_menu_background_corners.xml deleted file mode 100644 index 16e3fe26f3..0000000000 --- a/res/drawable/icon_menu_background_corners.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/res/drawable/icon_menu_elevation_background.xml b/res/drawable/icon_menu_elevation_background.xml deleted file mode 100644 index 16e3fe26f3..0000000000 --- a/res/drawable/icon_menu_elevation_background.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/res/values/dimens.xml b/res/values/dimens.xml index 3aa4a77431..00082ae365 100644 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -414,11 +414,6 @@ 0dp 0dp 0dp - 0dp - 0dp - 0dp - 0dp - 0dp 0dp 0dp 0dp diff --git a/src/com/android/launcher3/DeviceProfile.java b/src/com/android/launcher3/DeviceProfile.java index e9545c859b..85938834c0 100644 --- a/src/com/android/launcher3/DeviceProfile.java +++ b/src/com/android/launcher3/DeviceProfile.java @@ -260,7 +260,6 @@ public class DeviceProfile { public int overviewTaskIconSizePx; public int overviewTaskIconDrawableSizePx; public int overviewTaskIconDrawableSizeGridPx; - public int overviewTaskIconAppChipMenuDrawableSizePx; public int overviewTaskThumbnailTopMarginPx; public final int overviewActionsHeight; public final int overviewActionsTopMarginPx; @@ -686,8 +685,6 @@ public class DeviceProfile { res.getDimensionPixelSize(R.dimen.task_thumbnail_icon_drawable_size); overviewTaskIconDrawableSizeGridPx = res.getDimensionPixelSize(R.dimen.task_thumbnail_icon_drawable_size_grid); - overviewTaskIconAppChipMenuDrawableSizePx = res.getDimensionPixelSize( - R.dimen.task_thumbnail_icon_menu_drawable_size); overviewTaskThumbnailTopMarginPx = enableOverviewIconMenu() ? 0 : overviewTaskIconSizePx + overviewTaskMarginPx; // Don't add margin with floating search bar to minimize risk of overlapping. @@ -2163,8 +2160,6 @@ public class DeviceProfile { overviewTaskIconDrawableSizePx)); writer.println(prefix + pxToDpStr("overviewTaskIconDrawableSizeGridPx", overviewTaskIconDrawableSizeGridPx)); - writer.println(prefix + pxToDpStr("overviewTaskIconAppChipMenuDrawableSizePx", - overviewTaskIconAppChipMenuDrawableSizePx)); writer.println(prefix + pxToDpStr("overviewTaskThumbnailTopMarginPx", overviewTaskThumbnailTopMarginPx)); writer.println(prefix + pxToDpStr("overviewActionsTopMarginPx", diff --git a/tests/assets/dumpTests/DeviceProfileDumpTest/phonePortrait.txt b/tests/assets/dumpTests/DeviceProfileDumpTest/phonePortrait.txt index 18752e9f0d..af8f67f06d 100644 --- a/tests/assets/dumpTests/DeviceProfileDumpTest/phonePortrait.txt +++ b/tests/assets/dumpTests/DeviceProfileDumpTest/phonePortrait.txt @@ -110,7 +110,6 @@ DeviceProfile: overviewTaskIconSizePx: 0.0px (0.0dp) overviewTaskIconDrawableSizePx: 0.0px (0.0dp) overviewTaskIconDrawableSizeGridPx: 0.0px (0.0dp) - overviewTaskIconAppChipMenuDrawableSizePx: 0.0px (0.0dp) overviewTaskThumbnailTopMarginPx: 0.0px (0.0dp) overviewActionsTopMarginPx: 0.0px (0.0dp) overviewActionsHeight: 0.0px (0.0dp) diff --git a/tests/assets/dumpTests/DeviceProfileDumpTest/phonePortrait3Button.txt b/tests/assets/dumpTests/DeviceProfileDumpTest/phonePortrait3Button.txt index c0de8d8594..5b83dd7286 100644 --- a/tests/assets/dumpTests/DeviceProfileDumpTest/phonePortrait3Button.txt +++ b/tests/assets/dumpTests/DeviceProfileDumpTest/phonePortrait3Button.txt @@ -110,7 +110,6 @@ DeviceProfile: overviewTaskIconSizePx: 0.0px (0.0dp) overviewTaskIconDrawableSizePx: 0.0px (0.0dp) overviewTaskIconDrawableSizeGridPx: 0.0px (0.0dp) - overviewTaskIconAppChipMenuDrawableSizePx: 0.0px (0.0dp) overviewTaskThumbnailTopMarginPx: 0.0px (0.0dp) overviewActionsTopMarginPx: 0.0px (0.0dp) overviewActionsHeight: 0.0px (0.0dp) diff --git a/tests/assets/dumpTests/DeviceProfileDumpTest/phoneVerticalBar.txt b/tests/assets/dumpTests/DeviceProfileDumpTest/phoneVerticalBar.txt index 920ba6f49b..256f5cdd7e 100644 --- a/tests/assets/dumpTests/DeviceProfileDumpTest/phoneVerticalBar.txt +++ b/tests/assets/dumpTests/DeviceProfileDumpTest/phoneVerticalBar.txt @@ -110,7 +110,6 @@ DeviceProfile: overviewTaskIconSizePx: 0.0px (0.0dp) overviewTaskIconDrawableSizePx: 0.0px (0.0dp) overviewTaskIconDrawableSizeGridPx: 0.0px (0.0dp) - overviewTaskIconAppChipMenuDrawableSizePx: 0.0px (0.0dp) overviewTaskThumbnailTopMarginPx: 0.0px (0.0dp) overviewActionsTopMarginPx: 0.0px (0.0dp) overviewActionsHeight: 0.0px (0.0dp) diff --git a/tests/assets/dumpTests/DeviceProfileDumpTest/phoneVerticalBar3Button.txt b/tests/assets/dumpTests/DeviceProfileDumpTest/phoneVerticalBar3Button.txt index 65460eca1a..f41b0a509c 100644 --- a/tests/assets/dumpTests/DeviceProfileDumpTest/phoneVerticalBar3Button.txt +++ b/tests/assets/dumpTests/DeviceProfileDumpTest/phoneVerticalBar3Button.txt @@ -110,7 +110,6 @@ DeviceProfile: overviewTaskIconSizePx: 0.0px (0.0dp) overviewTaskIconDrawableSizePx: 0.0px (0.0dp) overviewTaskIconDrawableSizeGridPx: 0.0px (0.0dp) - overviewTaskIconAppChipMenuDrawableSizePx: 0.0px (0.0dp) overviewTaskThumbnailTopMarginPx: 0.0px (0.0dp) overviewActionsTopMarginPx: 0.0px (0.0dp) overviewActionsHeight: 0.0px (0.0dp) diff --git a/tests/assets/dumpTests/DeviceProfileDumpTest/tabletLandscape.txt b/tests/assets/dumpTests/DeviceProfileDumpTest/tabletLandscape.txt index 92caf2315c..87a970089e 100644 --- a/tests/assets/dumpTests/DeviceProfileDumpTest/tabletLandscape.txt +++ b/tests/assets/dumpTests/DeviceProfileDumpTest/tabletLandscape.txt @@ -110,7 +110,6 @@ DeviceProfile: overviewTaskIconSizePx: 0.0px (0.0dp) overviewTaskIconDrawableSizePx: 0.0px (0.0dp) overviewTaskIconDrawableSizeGridPx: 0.0px (0.0dp) - overviewTaskIconAppChipMenuDrawableSizePx: 0.0px (0.0dp) overviewTaskThumbnailTopMarginPx: 0.0px (0.0dp) overviewActionsTopMarginPx: 0.0px (0.0dp) overviewActionsHeight: 0.0px (0.0dp) diff --git a/tests/assets/dumpTests/DeviceProfileDumpTest/tabletLandscape3Button.txt b/tests/assets/dumpTests/DeviceProfileDumpTest/tabletLandscape3Button.txt index 3815fa9c46..169256d192 100644 --- a/tests/assets/dumpTests/DeviceProfileDumpTest/tabletLandscape3Button.txt +++ b/tests/assets/dumpTests/DeviceProfileDumpTest/tabletLandscape3Button.txt @@ -110,7 +110,6 @@ DeviceProfile: overviewTaskIconSizePx: 0.0px (0.0dp) overviewTaskIconDrawableSizePx: 0.0px (0.0dp) overviewTaskIconDrawableSizeGridPx: 0.0px (0.0dp) - overviewTaskIconAppChipMenuDrawableSizePx: 0.0px (0.0dp) overviewTaskThumbnailTopMarginPx: 0.0px (0.0dp) overviewActionsTopMarginPx: 0.0px (0.0dp) overviewActionsHeight: 0.0px (0.0dp) diff --git a/tests/assets/dumpTests/DeviceProfileDumpTest/tabletPortrait.txt b/tests/assets/dumpTests/DeviceProfileDumpTest/tabletPortrait.txt index 7e0f3167c7..6ed687963a 100644 --- a/tests/assets/dumpTests/DeviceProfileDumpTest/tabletPortrait.txt +++ b/tests/assets/dumpTests/DeviceProfileDumpTest/tabletPortrait.txt @@ -110,7 +110,6 @@ DeviceProfile: overviewTaskIconSizePx: 0.0px (0.0dp) overviewTaskIconDrawableSizePx: 0.0px (0.0dp) overviewTaskIconDrawableSizeGridPx: 0.0px (0.0dp) - overviewTaskIconAppChipMenuDrawableSizePx: 0.0px (0.0dp) overviewTaskThumbnailTopMarginPx: 0.0px (0.0dp) overviewActionsTopMarginPx: 0.0px (0.0dp) overviewActionsHeight: 0.0px (0.0dp) diff --git a/tests/assets/dumpTests/DeviceProfileDumpTest/tabletPortrait3Button.txt b/tests/assets/dumpTests/DeviceProfileDumpTest/tabletPortrait3Button.txt index 58c3890eb2..a51669b062 100644 --- a/tests/assets/dumpTests/DeviceProfileDumpTest/tabletPortrait3Button.txt +++ b/tests/assets/dumpTests/DeviceProfileDumpTest/tabletPortrait3Button.txt @@ -110,7 +110,6 @@ DeviceProfile: overviewTaskIconSizePx: 0.0px (0.0dp) overviewTaskIconDrawableSizePx: 0.0px (0.0dp) overviewTaskIconDrawableSizeGridPx: 0.0px (0.0dp) - overviewTaskIconAppChipMenuDrawableSizePx: 0.0px (0.0dp) overviewTaskThumbnailTopMarginPx: 0.0px (0.0dp) overviewActionsTopMarginPx: 0.0px (0.0dp) overviewActionsHeight: 0.0px (0.0dp) diff --git a/tests/assets/dumpTests/DeviceProfileDumpTest/twoPanelLandscape.txt b/tests/assets/dumpTests/DeviceProfileDumpTest/twoPanelLandscape.txt index 1e363a245d..61d5ee605b 100644 --- a/tests/assets/dumpTests/DeviceProfileDumpTest/twoPanelLandscape.txt +++ b/tests/assets/dumpTests/DeviceProfileDumpTest/twoPanelLandscape.txt @@ -110,7 +110,6 @@ DeviceProfile: overviewTaskIconSizePx: 0.0px (0.0dp) overviewTaskIconDrawableSizePx: 0.0px (0.0dp) overviewTaskIconDrawableSizeGridPx: 0.0px (0.0dp) - overviewTaskIconAppChipMenuDrawableSizePx: 0.0px (0.0dp) overviewTaskThumbnailTopMarginPx: 0.0px (0.0dp) overviewActionsTopMarginPx: 0.0px (0.0dp) overviewActionsHeight: 0.0px (0.0dp) diff --git a/tests/assets/dumpTests/DeviceProfileDumpTest/twoPanelLandscape3Button.txt b/tests/assets/dumpTests/DeviceProfileDumpTest/twoPanelLandscape3Button.txt index 617b54b948..ac73e2fd2d 100644 --- a/tests/assets/dumpTests/DeviceProfileDumpTest/twoPanelLandscape3Button.txt +++ b/tests/assets/dumpTests/DeviceProfileDumpTest/twoPanelLandscape3Button.txt @@ -110,7 +110,6 @@ DeviceProfile: overviewTaskIconSizePx: 0.0px (0.0dp) overviewTaskIconDrawableSizePx: 0.0px (0.0dp) overviewTaskIconDrawableSizeGridPx: 0.0px (0.0dp) - overviewTaskIconAppChipMenuDrawableSizePx: 0.0px (0.0dp) overviewTaskThumbnailTopMarginPx: 0.0px (0.0dp) overviewActionsTopMarginPx: 0.0px (0.0dp) overviewActionsHeight: 0.0px (0.0dp) diff --git a/tests/assets/dumpTests/DeviceProfileDumpTest/twoPanelPortrait.txt b/tests/assets/dumpTests/DeviceProfileDumpTest/twoPanelPortrait.txt index 483b5e7922..93ab6f29b4 100644 --- a/tests/assets/dumpTests/DeviceProfileDumpTest/twoPanelPortrait.txt +++ b/tests/assets/dumpTests/DeviceProfileDumpTest/twoPanelPortrait.txt @@ -110,7 +110,6 @@ DeviceProfile: overviewTaskIconSizePx: 0.0px (0.0dp) overviewTaskIconDrawableSizePx: 0.0px (0.0dp) overviewTaskIconDrawableSizeGridPx: 0.0px (0.0dp) - overviewTaskIconAppChipMenuDrawableSizePx: 0.0px (0.0dp) overviewTaskThumbnailTopMarginPx: 0.0px (0.0dp) overviewActionsTopMarginPx: 0.0px (0.0dp) overviewActionsHeight: 0.0px (0.0dp) diff --git a/tests/assets/dumpTests/DeviceProfileDumpTest/twoPanelPortrait3Button.txt b/tests/assets/dumpTests/DeviceProfileDumpTest/twoPanelPortrait3Button.txt index 8d0640c9e7..ec9a10e6cc 100644 --- a/tests/assets/dumpTests/DeviceProfileDumpTest/twoPanelPortrait3Button.txt +++ b/tests/assets/dumpTests/DeviceProfileDumpTest/twoPanelPortrait3Button.txt @@ -110,7 +110,6 @@ DeviceProfile: overviewTaskIconSizePx: 0.0px (0.0dp) overviewTaskIconDrawableSizePx: 0.0px (0.0dp) overviewTaskIconDrawableSizeGridPx: 0.0px (0.0dp) - overviewTaskIconAppChipMenuDrawableSizePx: 0.0px (0.0dp) overviewTaskThumbnailTopMarginPx: 0.0px (0.0dp) overviewActionsTopMarginPx: 0.0px (0.0dp) overviewActionsHeight: 0.0px (0.0dp)