Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 989f3747 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

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

parents c9a2eb08 737d67fa
Loading
Loading
Loading
Loading
+22 −22
Original line number Diff line number Diff line
@@ -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);
                -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() {
+39 −11
Original line number Diff line number Diff line
@@ -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() {