Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f114ec5b authored by Fengjiang Li's avatar Fengjiang Li Committed by Android (Google) Code Review
Browse files

Merge changes Iab1de455,I0c6585e6,I125670d1 into main

* changes:
  [Predictive Back] Recover taskbar all apps scale to 1f with animation if user swipe back within search [3/n]
  [Predictive Back] Dismiss taskbar all apps's scroll bar during swipe gesture [2/n]
  [Predictive Back] Fix predictive back swipe on task bar all apps [1/n]
parents 944ed169 cc1c582d
Loading
Loading
Loading
Loading
+18 −2
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ import androidx.annotation.Nullable;
import com.android.launcher3.DeviceProfile;
import com.android.launcher3.Insettable;
import com.android.launcher3.R;
import com.android.launcher3.allapps.AllAppsRecyclerView;
import com.android.launcher3.anim.AnimatorListeners;
import com.android.launcher3.anim.PendingAnimation;
import com.android.launcher3.config.FeatureFlags;
@@ -196,7 +197,13 @@ public class TaskbarAllAppsSlideInView extends AbstractSlideInView<TaskbarOverla

    @Override
    protected void dispatchDraw(Canvas canvas) {
        mAppsView.drawOnScrimWithScale(canvas, mSlideInViewScale.value);
        // We should call drawOnScrimWithBottomOffset() rather than drawOnScrimWithScale(). Because
        // for taskbar all apps, the scrim view is a child view of AbstractSlideInView. Thus scaling
        // down in AbstractSlideInView#onScaleProgressChanged() with SCALE_PROPERTY has already
        // done the job - there is no need to re-apply scale effect here. But it also means we need
        // to pass extra bottom offset to background scrim to fill the bottom gap during predictive
        // back swipe.
        mAppsView.drawOnScrimWithBottomOffset(canvas, getBottomOffsetPx());
        super.dispatchDraw(canvas);
    }

@@ -205,6 +212,11 @@ public class TaskbarAllAppsSlideInView extends AbstractSlideInView<TaskbarOverla
        super.onScaleProgressChanged();
        mAppsView.setClipChildren(!mIsBackProgressing);
        mAppsView.getAppsRecyclerViewContainer().setClipChildren(!mIsBackProgressing);
        AllAppsRecyclerView rv = mAppsView.getActiveRecyclerView();
        if (rv != null && rv.getScrollbar() != null) {
            rv.getScrollbar().setVisibility(
                    mIsBackProgressing ? INVISIBLE : VISIBLE);
        }
    }

    @Override
@@ -255,7 +267,11 @@ public class TaskbarAllAppsSlideInView extends AbstractSlideInView<TaskbarOverla

    @Override
    public void onBackInvoked() {
        if (!mAllAppsCallbacks.handleSearchBackInvoked()) {
        if (mAllAppsCallbacks.handleSearchBackInvoked()) {
            // We need to scale back taskbar all apps if we navigate back within search inside all
            // apps
            animateSlideInViewToNoScale();
        } else {
            super.onBackInvoked();
        }
    }
+4 −2
Original line number Diff line number Diff line
@@ -1372,7 +1372,8 @@ public class ActivityAllAppsContainerView<T extends Context & ActivityContext>
    }

    @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<T extends Context & ActivityContext>
        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<T extends Context & ActivityContext>
                    leftWithScale,
                    topWithScale,
                    rightWithScale,
                    panel.getBottom());
                    bottomWithOffset);
            mTmpPath.reset();
            mTmpPath.addRoundRect(mTmpRectF, mBottomSheetCornerRadii, Direction.CW);
            canvas.drawPath(mTmpPath, mHeaderPaint);
+15 −4
Original line number Diff line number Diff line
@@ -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);
    }
}