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

Commit 54acd8a2 authored by Tony Wickham's avatar Tony Wickham
Browse files

Don't draw task insets or corners in multi window mode

Test (all in multi window and non-multi window):
- Quick switch from home screen
- Quick switch from an app
- Swipe up from an app (slowly)
- Swipe down on a task (slowly)

Bug: 131689686
Change-Id: I69bf6dd1a34904cdf5ec7febea8f858012e2a0ac
parent 36abdcbc
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -31,11 +31,12 @@ import android.graphics.RectF;
import android.os.Build;
import android.os.RemoteException;

import androidx.annotation.Nullable;

import com.android.launcher3.BaseDraggingActivity;
import com.android.launcher3.DeviceProfile;
import com.android.launcher3.R;
import com.android.launcher3.Utilities;
import com.android.launcher3.util.Themes;
import com.android.launcher3.views.BaseDragLayer;
import com.android.quickstep.RecentsModel;
import com.android.quickstep.views.RecentsView;
@@ -50,8 +51,6 @@ import com.android.systemui.shared.system.WindowManagerWrapper;

import java.util.function.BiFunction;

import androidx.annotation.Nullable;

/**
 * Utility class to handle window clip animation
 */
@@ -327,12 +326,14 @@ public class ClipAnimationHelper {

        float scale = mTargetRect.width() / mSourceRect.width();
        float insetProgress = (1 - progress);
        float windowCornerRadius = mUseRoundedCornersOnWindows
                ? mWindowCornerRadius : 0;
        ttv.drawOnCanvas(canvas,
                -mSourceWindowClipInsets.left * insetProgress,
                -mSourceWindowClipInsets.top * insetProgress,
                ttv.getMeasuredWidth() + mSourceWindowClipInsets.right * insetProgress,
                ttv.getMeasuredHeight() + mSourceWindowClipInsets.bottom * insetProgress,
                Utilities.mapRange(progress, mWindowCornerRadius * scale, ttv.getCornerRadius()));
                Utilities.mapRange(progress, windowCornerRadius * scale, ttv.getCornerRadius()));
    }

    public RectF getTargetRect() {
+3 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import android.graphics.drawable.Drawable;
import android.util.FloatProperty;
import android.view.View;

import com.android.launcher3.BaseActivity;
import com.android.launcher3.Utilities;
import com.android.quickstep.views.RecentsView;
import com.android.quickstep.views.TaskThumbnailView;
@@ -75,6 +76,8 @@ public class TaskViewDrawable extends Drawable {
        mThumbnailView = tv.getThumbnail();
        mClipAnimationHelper = new ClipAnimationHelper(parent.getContext());
        mClipAnimationHelper.fromTaskThumbnailView(mThumbnailView, parent);
        mClipAnimationHelper.prepareAnimation(
                BaseActivity.fromContext(tv.getContext()).getDeviceProfile(), true /* isOpening */);
    }

    public void setProgress(float progress) {
+3 −3
Original line number Diff line number Diff line
@@ -210,9 +210,9 @@ public class TaskThumbnailView extends View {
                mCurrentDrawnCornerRadius);
    }

    public Rect getInsetsToDrawInFullscreen() {
        // Don't show insets in the wrong orientation.
        return mIsRotated ? EMPTY_RECT : mScaledInsets;
    public Rect getInsetsToDrawInFullscreen(boolean isMultiWindowMode) {
        // Don't show insets in the wrong orientation or in multi window mode.
        return mIsRotated || isMultiWindowMode ? EMPTY_RECT : mScaledInsets;
    }

    public void setCurrentDrawnInsetsAndRadius(Rect insets, float radius) {
+14 −13
Original line number Diff line number Diff line
@@ -17,7 +17,7 @@
package com.android.quickstep.views;

import static android.widget.Toast.LENGTH_SHORT;
import static com.android.launcher3.BaseActivity.fromContext;

import static com.android.launcher3.QuickstepAppTransitionManagerImpl.RECENTS_LAUNCH_DURATION;
import static com.android.launcher3.anim.Interpolators.FAST_OUT_SLOW_IN;
import static com.android.launcher3.anim.Interpolators.LINEAR;
@@ -167,8 +167,9 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable {
    private float mZoomScale;
    private float mFullscreenProgress;
    private final Rect mCurrentDrawnInsets = new Rect();
    private float mCornerRadius;
    private float mWindowCornerRadius;
    private final float mCornerRadius;
    private final float mWindowCornerRadius;
    private final BaseDraggingActivity mActivity;

    private ObjectAnimator mIconAndDimAnimator;
    private float mIconScaleAnimStartProgress = 0;
@@ -190,6 +191,7 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable {

    public TaskView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        mActivity = BaseDraggingActivity.fromContext(context);
        setOnClickListener((view) -> {
            if (getTask() == null) {
                return;
@@ -204,10 +206,10 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable {
                launchTask(true /* animate */);
            }

            fromContext(context).getUserEventDispatcher().logTaskLaunchOrDismiss(
            mActivity.getUserEventDispatcher().logTaskLaunchOrDismiss(
                    Touch.TAP, Direction.NONE, getRecentsView().indexOfChild(this),
                    TaskUtils.getLaunchComponentKeyForTask(getTask().key));
            fromContext(context).getStatsLogManager().logTaskLaunch(getRecentsView(),
            mActivity.getStatsLogManager().logTaskLaunch(getRecentsView(),
                    TaskUtils.getLaunchComponentKeyForTask(getTask().key));
        });
        mCornerRadius = TaskCornerRadius.get(context);
@@ -306,8 +308,7 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable {
        if (mTask != null) {
            final ActivityOptions opts;
            if (animate) {
                opts = ((BaseDraggingActivity) fromContext(getContext()))
                        .getActivityLaunchOptions(this);
                opts = mActivity.getActivityLaunchOptions(this);
                if (freezeTaskList) {
                    ActivityOptionsCompat.setFreezeRecentTasksList(opts);
                }
@@ -571,13 +572,12 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable {
                        getContext().getText(R.string.accessibility_close_task)));

        final Context context = getContext();
        final BaseDraggingActivity activity = fromContext(context);
        final List<TaskSystemShortcut> shortcuts =
                mSnapshotView.getTaskOverlay().getEnabledShortcuts(this);
        final int count = shortcuts.size();
        for (int i = 0; i < count; ++i) {
            final TaskSystemShortcut menuOption = shortcuts.get(i);
            OnClickListener onClickListener = menuOption.getOnClickListener(activity, this);
            OnClickListener onClickListener = menuOption.getOnClickListener(mActivity, this);
            if (onClickListener != null) {
                info.addAction(menuOption.createAccessibilityAction(context));
            }
@@ -617,8 +617,7 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable {
        for (int i = 0; i < count; ++i) {
            final TaskSystemShortcut menuOption = shortcuts.get(i);
            if (menuOption.hasHandlerForAction(action)) {
                OnClickListener onClickListener = menuOption.getOnClickListener(
                        fromContext(getContext()), this);
                OnClickListener onClickListener = menuOption.getOnClickListener(mActivity, this);
                if (onClickListener != null) {
                    onClickListener.onClick(this);
                }
@@ -658,13 +657,15 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable {
        setClipToPadding(!isFullscreen);

        TaskThumbnailView thumbnail = getThumbnail();
        Rect insets = thumbnail.getInsetsToDrawInFullscreen();
        boolean isMultiWindowMode = mActivity.getDeviceProfile().isMultiWindowMode;
        Rect insets = thumbnail.getInsetsToDrawInFullscreen(isMultiWindowMode);
        mCurrentDrawnInsets.set((int) (insets.left * mFullscreenProgress),
                (int) (insets.top * mFullscreenProgress),
                (int) (insets.right * mFullscreenProgress),
                (int) (insets.bottom * mFullscreenProgress));
        float fullscreenCornerRadius = isMultiWindowMode ? 0 : mWindowCornerRadius;
        float cornerRadius = Utilities.mapRange(mFullscreenProgress, mCornerRadius,
                mWindowCornerRadius) / getRecentsView().getScaleX();
                fullscreenCornerRadius) / getRecentsView().getScaleX();

        thumbnail.setCurrentDrawnInsetsAndRadius(mCurrentDrawnInsets, cornerRadius);
        mOutlineProvider.setCurrentDrawnInsetsAndRadius(mCurrentDrawnInsets, cornerRadius);