From cad1f13d2740d26d6e9b9f01bef1edbc64558355 Mon Sep 17 00:00:00 2001 From: Fengjiang Li Date: Thu, 29 Feb 2024 10:24:37 -0800 Subject: [PATCH] [Predictive Back] Fix predictive back swipe on task bar all apps [1/n] For taskbar all apps, the background scrim is child view of AbstractSlideInView, thus scaling AbstracSlideInView during PB swipe will scale down background scrim. There is no need to re-apply scale effect on background scrim separately. Bug: 327490078 Flag: aconfig com.android.launcher3.enable_predictive_back_gesture TEAMFOOD Test: manual Change-Id: I125670d14bc788664a1371008589e4106496ae2e --- .../allapps/TaskbarAllAppsSlideInView.java | 8 +++++++- .../allapps/ActivityAllAppsContainerView.java | 6 ++++-- .../android/launcher3/views/ScrimView.java | 19 +++++++++++++++---- 3 files changed, 26 insertions(+), 7 deletions(-) diff --git a/quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsSlideInView.java b/quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsSlideInView.java index 5424fcf013..70d25b9753 100644 --- a/quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsSlideInView.java +++ b/quickstep/src/com/android/launcher3/taskbar/allapps/TaskbarAllAppsSlideInView.java @@ -196,7 +196,13 @@ public class TaskbarAllAppsSlideInView extends AbstractSlideInView } @Override - public void drawOnScrimWithScale(Canvas canvas, float scale) { + public void drawOnScrimWithScaleAndBottomOffset( + Canvas canvas, float scale, @Px int bottomOffsetPx) { final View panel = mBottomSheetBackground; final boolean hasBottomSheet = panel.getVisibility() == VISIBLE; final float translationY = ((View) panel.getParent()).getTranslationY(); @@ -1384,6 +1385,7 @@ public class ActivityAllAppsContainerView final float topWithScale = topNoScale + verticalScaleOffset; final float leftWithScale = panel.getLeft() + horizontalScaleOffset; final float rightWithScale = panel.getRight() - horizontalScaleOffset; + final float bottomWithOffset = panel.getBottom() + bottomOffsetPx; // Draw full background panel for tablets. if (hasBottomSheet) { mHeaderPaint.setColor(mBottomSheetBackgroundColor); @@ -1393,7 +1395,7 @@ public class ActivityAllAppsContainerView leftWithScale, topWithScale, rightWithScale, - panel.getBottom()); + bottomWithOffset); mTmpPath.reset(); mTmpPath.addRoundRect(mTmpRectF, mBottomSheetCornerRadii, Direction.CW); canvas.drawPath(mTmpPath, mHeaderPaint); diff --git a/src/com/android/launcher3/views/ScrimView.java b/src/com/android/launcher3/views/ScrimView.java index ca80c516f0..f6c49847de 100644 --- a/src/com/android/launcher3/views/ScrimView.java +++ b/src/com/android/launcher3/views/ScrimView.java @@ -26,6 +26,7 @@ import android.util.AttributeSet; import android.view.View; import androidx.annotation.NonNull; +import androidx.annotation.Px; import androidx.core.graphics.ColorUtils; import com.android.launcher3.BaseActivity; @@ -187,9 +188,19 @@ public class ScrimView extends View implements Insettable { * A Utility interface allowing for other surfaces to draw on ScrimView */ public interface ScrimDrawingController { - /** - * Called inside ScrimView#OnDraw - */ - void drawOnScrimWithScale(Canvas canvas, float scale); + + /** Draw scrim view on canvas with scale. */ + default void drawOnScrimWithScale(Canvas canvas, float scale) { + drawOnScrimWithScaleAndBottomOffset(canvas, scale, 0); + } + + /** Draw scrim view on canvas with bottomOffset. */ + default void drawOnScrimWithBottomOffset(Canvas canvas, @Px int bottomOffsetPx) { + drawOnScrimWithScaleAndBottomOffset(canvas, 1f, bottomOffsetPx); + } + + /** Draw scrim view on canvas with scale and bottomOffset. */ + void drawOnScrimWithScaleAndBottomOffset( + Canvas canvas, float scale, @Px int bottomOffsetPx); } }