Merge "TaskView controls currently drawn insets and radius" into ub-launcher3-qt-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
989f3747e2
+22
-22
@@ -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<TaskThumbnailView, Float> DIM_ALPHA =
|
||||
new FloatProperty<TaskThumbnailView>("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() {
|
||||
|
||||
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user