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 ed68d87d7e..1117855fac 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.TaskOverlayFactory.TaskOverlay; 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 @@ public class TaskThumbnailView extends View { 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 DIM_ALPHA = new FloatProperty("dimAlpha") { @@ -83,12 +83,13 @@ public class TaskThumbnailView extends View { 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 @@ public class TaskThumbnailView extends View { 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 @@ public class TaskThumbnailView extends View { @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 298c56268a..7f32b840e2 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.app.ActivityOptions; 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 android.widget.Toast; 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; 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.TaskOverlayFactory; 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 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable { } }; + private final TaskOutlineProvider mOutlineProvider; + private Task mTask; private TaskThumbnailView mSnapshotView; private TaskMenuView mMenuView; @@ -158,6 +163,9 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable { 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 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable { 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 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable { 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 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable { 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() {