diff --git a/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java b/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java index c3d24f995e..dd37bab4fc 100644 --- a/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java +++ b/src/com/android/launcher3/allapps/ActivityAllAppsContainerView.java @@ -1101,15 +1101,26 @@ public class ActivityAllAppsContainerView @Override public void drawOnScrimWithScale(Canvas canvas, float scale) { - boolean isTablet = mActivityContext.getDeviceProfile().isTablet; + final boolean isTablet = mActivityContext.getDeviceProfile().isTablet; + final View panel = mBottomSheetBackground; + final float translationY = ((View) panel.getParent()).getTranslationY(); + final float horizontalScaleOffset = (1 - scale) * panel.getWidth() / 2; + final float verticalScaleOffset = (1 - scale) * (panel.getHeight() - getHeight() / 2); + + final float topNoScale = panel.getTop() + translationY; + final float topWithScale = topNoScale + verticalScaleOffset; + final float leftWithScale = panel.getLeft() + horizontalScaleOffset; + final float rightWithScale = panel.getRight() - horizontalScaleOffset; // Draw full background panel for tablets. if (isTablet) { mHeaderPaint.setColor(mBottomSheetBackgroundColor); - View panel = (View) mBottomSheetBackground; - float translationY = ((View) panel.getParent()).getTranslationY(); - mTmpRectF.set(panel.getLeft(), panel.getTop() + translationY, - panel.getRight(), panel.getBottom()); + + mTmpRectF.set( + leftWithScale, + topWithScale, + rightWithScale, + panel.getBottom()); mTmpPath.reset(); mTmpPath.addRoundRect(mTmpRectF, mBottomSheetCornerRadii, Direction.CW); canvas.drawPath(mTmpPath, mHeaderPaint); @@ -1125,25 +1136,33 @@ public class ActivityAllAppsContainerView if (mHeaderPaint.getColor() == mScrimColor || mHeaderPaint.getColor() == 0) { return; } - final float offset = (getVisibleContainerView().getHeight() * (1 - scale) / 2); - final float bottom = - scale * (getHeaderBottom() + getVisibleContainerView().getPaddingTop()) + offset; - FloatingHeaderView headerView = getFloatingHeaderView(); + + // Draw header on background panel + final float headerBottomNoScale = + getHeaderBottom() + getVisibleContainerView().getPaddingTop(); + final float headerHeightNoScale = headerBottomNoScale - topNoScale; + final float headerBottomWithScaleOnTablet = topWithScale + headerHeightNoScale * scale; + final float headerBottomOffset = (getVisibleContainerView().getHeight() * (1 - scale) / 2); + final float headerBottomWithScaleOnPhone = headerBottomNoScale * scale + headerBottomOffset; + final FloatingHeaderView headerView = getFloatingHeaderView(); if (isTablet) { // Start adding header protection if search bar or tabs will attach to the top. - if (!isSearchBarOnBottom() || mUsingTabs) { - View panel = (View) mBottomSheetBackground; - float translationY = ((View) panel.getParent()).getTranslationY(); - mTmpRectF.set(panel.getLeft(), panel.getTop() + translationY, panel.getRight(), - bottom); + if (!FeatureFlags.ENABLE_FLOATING_SEARCH_BAR.get() || mUsingTabs) { + mTmpRectF.set( + leftWithScale, + topWithScale, + rightWithScale, + headerBottomWithScaleOnTablet); mTmpPath.reset(); mTmpPath.addRoundRect(mTmpRectF, mBottomSheetCornerRadii, Direction.CW); canvas.drawPath(mTmpPath, mHeaderPaint); } } else { - canvas.drawRect(0, 0, canvas.getWidth(), bottom, mHeaderPaint); + canvas.drawRect(0, 0, canvas.getWidth(), headerBottomWithScaleOnPhone, mHeaderPaint); } - int tabsHeight = headerView.getPeripheralProtectionHeight(); + + // If tab exist (such as work profile), extend header with tab height + final int tabsHeight = headerView.getPeripheralProtectionHeight(); if (mTabsProtectionAlpha > 0 && tabsHeight != 0) { if (DEBUG_HEADER_PROTECTION) { mHeaderPaint.setColor(Color.BLUE); @@ -1151,13 +1170,24 @@ public class ActivityAllAppsContainerView } else { mHeaderPaint.setAlpha((int) (getAlpha() * mTabsProtectionAlpha)); } - int left = 0; - int right = canvas.getWidth(); + float left = 0f; + float right = canvas.getWidth(); if (isTablet) { - left = mBottomSheetBackground.getLeft(); - right = mBottomSheetBackground.getRight(); + left = mBottomSheetBackground.getLeft() + horizontalScaleOffset; + right = mBottomSheetBackground.getRight() - horizontalScaleOffset; } - canvas.drawRect(left, bottom, right, bottom + tabsHeight, mHeaderPaint); + + final float tabTopWithScale = isTablet + ? headerBottomWithScaleOnTablet + : headerBottomWithScaleOnPhone; + final float tabBottomWithScale = tabTopWithScale + tabsHeight * scale; + + canvas.drawRect( + left, + tabTopWithScale, + right, + tabBottomWithScale, + mHeaderPaint); } }