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:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user