TaskView controls currently drawn insets and radius
Previously this was controlled by TaskThumbnailView. Having TaskView
handle it allows it to update its outline provider to match the
thumbnail when setting fullscreen progress.
Bug: 129883568
Change-Id: I067fcdd31676af4d4792d18eaaac031c2ac0b18a
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskThumbnailView.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskThumbnailView.java
index ed68d87..1117855 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskThumbnailView.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskThumbnailView.java
@@ -51,7 +51,6 @@
import com.android.quickstep.util.TaskCornerRadius;
import com.android.systemui.shared.recents.model.Task;
import com.android.systemui.shared.recents.model.ThumbnailData;
-import com.android.systemui.shared.system.QuickStepContract;
/**
* A task in the Recents view.
@@ -60,6 +59,7 @@
private final static ColorMatrix COLOR_MATRIX = new ColorMatrix();
private final static ColorMatrix SATURATION_COLOR_MATRIX = new ColorMatrix();
+ private final static Rect EMPTY_RECT = new Rect();
public static final Property<TaskThumbnailView, Float> DIM_ALPHA =
new FloatProperty<TaskThumbnailView>("dimAlpha") {
@@ -83,12 +83,13 @@
private final Paint mBackgroundPaint = new Paint();
private final Paint mClearPaint = new Paint();
private final Paint mDimmingPaintAfterClearing = new Paint();
- private final float mWindowCornerRadius;
private final Matrix mMatrix = new Matrix();
private float mClipBottom = -1;
private Rect mScaledInsets = new Rect();
+ private Rect mCurrentDrawnInsets = new Rect();
+ private float mCurrentDrawnCornerRadius;
private boolean mIsRotated;
private Task mTask;
@@ -117,7 +118,7 @@
mDimmingPaintAfterClearing.setColor(Color.BLACK);
mActivity = BaseActivity.fromContext(context);
mIsDarkTextTheme = Themes.getAttrBoolean(mActivity, R.attr.isWorkspaceDarkText);
- mWindowCornerRadius = QuickStepContract.getWindowCornerRadius(context.getResources());
+ setCurrentDrawnInsetsAndRadius(EMPTY_RECT, mCornerRadius);
}
public void bind(Task task) {
@@ -200,25 +201,24 @@
@Override
protected void onDraw(Canvas canvas) {
- TaskView taskView = (TaskView) getParent();
- float fullscreenProgress = taskView.getFullscreenProgress();
- if (mIsRotated) {
- // Don't show insets in the wrong orientation.
- fullscreenProgress = 0;
- }
- if (fullscreenProgress > 0) {
- // Draw the insets if we're being drawn fullscreen (we do this for quick switch).
- float cornerRadius = Utilities.mapRange(fullscreenProgress, mCornerRadius,
- mWindowCornerRadius);
- drawOnCanvas(canvas,
- -mScaledInsets.left * fullscreenProgress,
- -mScaledInsets.top * fullscreenProgress,
- getMeasuredWidth() + mScaledInsets.right * fullscreenProgress,
- getMeasuredHeight() + mScaledInsets.bottom * fullscreenProgress,
- cornerRadius / taskView.getRecentsView().getScaleX());
- } else {
- drawOnCanvas(canvas, 0, 0, getMeasuredWidth(), getMeasuredHeight(), mCornerRadius);
- }
+ // Draw the insets if we're being drawn fullscreen (we do this for quick switch).
+ drawOnCanvas(canvas,
+ -mCurrentDrawnInsets.left,
+ -mCurrentDrawnInsets.top,
+ getMeasuredWidth() + mCurrentDrawnInsets.right,
+ getMeasuredHeight() + mCurrentDrawnInsets.bottom,
+ mCurrentDrawnCornerRadius);
+ }
+
+ public Rect getInsetsToDrawInFullscreen() {
+ // Don't show insets in the wrong orientation.
+ return mIsRotated ? EMPTY_RECT : mScaledInsets;
+ }
+
+ public void setCurrentDrawnInsetsAndRadius(Rect insets, float radius) {
+ mCurrentDrawnInsets.set(insets);
+ mCurrentDrawnCornerRadius = radius;
+ invalidate();
}
public float getCornerRadius() {
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskView.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskView.java
index 848c214..def68f1 100644
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskView.java
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskView.java
@@ -32,6 +32,7 @@
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Outline;
+import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Handler;
@@ -47,6 +48,7 @@
import com.android.launcher3.BaseDraggingActivity;
import com.android.launcher3.R;
+import com.android.launcher3.Utilities;
import com.android.launcher3.anim.AnimatorPlaybackController;
import com.android.launcher3.anim.Interpolators;
import com.android.launcher3.logging.UserEventDispatcher;
@@ -54,7 +56,6 @@
import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Direction;
import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Touch;
import com.android.launcher3.util.PendingAnimation;
-import com.android.launcher3.util.Themes;
import com.android.launcher3.util.ViewPool.Reusable;
import com.android.quickstep.RecentsModel;
import com.android.quickstep.TaskIconCache;
@@ -62,11 +63,13 @@
import com.android.quickstep.TaskSystemShortcut;
import com.android.quickstep.TaskThumbnailCache;
import com.android.quickstep.TaskUtils;
+import com.android.quickstep.util.TaskCornerRadius;
import com.android.quickstep.views.RecentsView.PageCallbacks;
import com.android.quickstep.views.RecentsView.ScrollState;
import com.android.systemui.shared.recents.model.Task;
import com.android.systemui.shared.system.ActivityManagerWrapper;
import com.android.systemui.shared.system.ActivityOptionsCompat;
+import com.android.systemui.shared.system.QuickStepContract;
import java.util.List;
import java.util.function.Consumer;
@@ -150,6 +153,8 @@
}
};
+ private final TaskOutlineProvider mOutlineProvider;
+
private Task mTask;
private TaskThumbnailView mSnapshotView;
private TaskMenuView mMenuView;
@@ -158,6 +163,9 @@
private float mCurveScale;
private float mZoomScale;
private float mFullscreenProgress;
+ private final Rect mCurrentDrawnInsets = new Rect();
+ private float mCornerRadius;
+ private float mWindowCornerRadius;
private ObjectAnimator mIconAndDimAnimator;
private float mIconScaleAnimStartProgress = 0;
@@ -199,7 +207,10 @@
fromContext(context).getStatsLogManager().logTaskLaunch(getRecentsView(),
TaskUtils.getLaunchComponentKeyForTask(getTask().key));
});
- setOutlineProvider(new TaskOutlineProvider(context, getResources()));
+ mCornerRadius = TaskCornerRadius.get(context);
+ mWindowCornerRadius = QuickStepContract.getWindowCornerRadius(context.getResources());
+ mOutlineProvider = new TaskOutlineProvider(getResources(), mCornerRadius);
+ setOutlineProvider(mOutlineProvider);
}
@Override
@@ -521,17 +532,26 @@
private static final class TaskOutlineProvider extends ViewOutlineProvider {
private final int mMarginTop;
- private final float mRadius;
+ private final Rect mInsets = new Rect();
+ private float mRadius;
- TaskOutlineProvider(Context context, Resources res) {
+ TaskOutlineProvider(Resources res, float radius) {
mMarginTop = res.getDimensionPixelSize(R.dimen.task_thumbnail_top_margin);
- mRadius = Themes.getDialogCornerRadius(context);
+ mRadius = radius;
+ }
+
+ public void setCurrentDrawnInsetsAndRadius(Rect insets, float radius) {
+ mInsets.set(insets);
+ mRadius = radius;
}
@Override
public void getOutline(View view, Outline outline) {
- outline.setRoundRect(0, mMarginTop, view.getWidth(),
- view.getHeight(), mRadius);
+ outline.setRoundRect(-mInsets.left,
+ mMarginTop - mInsets.top,
+ view.getWidth() + mInsets.right,
+ view.getHeight() + mInsets.bottom,
+ mRadius);
}
}
@@ -629,11 +649,19 @@
mIconView.setVisibility(progress < 1 ? VISIBLE : INVISIBLE);
setClipChildren(!isFullscreen);
setClipToPadding(!isFullscreen);
- getThumbnail().invalidate();
- }
- public float getFullscreenProgress() {
- return mFullscreenProgress;
+ TaskThumbnailView thumbnail = getThumbnail();
+ Rect insets = thumbnail.getInsetsToDrawInFullscreen();
+ mCurrentDrawnInsets.set((int) (insets.left * mFullscreenProgress),
+ (int) (insets.top * mFullscreenProgress),
+ (int) (insets.right * mFullscreenProgress),
+ (int) (insets.bottom * mFullscreenProgress));
+ float cornerRadius = Utilities.mapRange(mFullscreenProgress, mCornerRadius,
+ mWindowCornerRadius) / getRecentsView().getScaleX();
+
+ thumbnail.setCurrentDrawnInsetsAndRadius(mCurrentDrawnInsets, cornerRadius);
+ mOutlineProvider.setCurrentDrawnInsetsAndRadius(mCurrentDrawnInsets, cornerRadius);
+ invalidateOutline();
}
public boolean isRunningTask() {