Merge "TaskView controls currently drawn insets and radius" into ub-launcher3-qt-dev

This commit is contained in:
TreeHugger Robot
2019-05-01 03:41:23 +00:00
committed by Android (Google) Code Review
2 changed files with 61 additions and 33 deletions
@@ -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() {