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]
This commit is contained in:
Fengjiang Li
2024-03-06 01:32:17 +00:00
committed by Android (Google) Code Review
3 changed files with 37 additions and 8 deletions
@@ -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();
}
}
@@ -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
View File
@@ -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);
}
}