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

Commit 2677e045 authored by Tony Wickham's avatar Tony Wickham Committed by Android (Google) Code Review
Browse files

Merge "Update TaskView corner radius dynamically" into udc-qpr-dev

parents 4c735b9b 5d20ad65
Loading
Loading
Loading
Loading
+11 −3
Original line number Diff line number Diff line
@@ -109,9 +109,17 @@ public class DesktopTaskView extends TaskView {
    public DesktopTaskView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);

        mSnapshotDrawParams = new FullscreenDrawParams(
                QuickStepContract.getWindowCornerRadius(context),
                QuickStepContract.getWindowCornerRadius(context));
        mSnapshotDrawParams = new FullscreenDrawParams(context) {
            @Override
            public float computeTaskCornerRadius(Context context) {
                return QuickStepContract.getWindowCornerRadius(context);
            }

            @Override
            public float computeWindowCornerRadius(Context context) {
                return QuickStepContract.getWindowCornerRadius(context);
            }
        };
    }

    @Override
+25 −9
Original line number Diff line number Diff line
@@ -71,6 +71,7 @@ import android.widget.Toast;
import androidx.annotation.IntDef;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;

import com.android.app.animation.Interpolators;
import com.android.launcher3.DeviceProfile;
@@ -133,15 +134,17 @@ public class TaskView extends FrameLayout implements Reusable {

    public static final int FLAG_UPDATE_ICON = 1;
    public static final int FLAG_UPDATE_THUMBNAIL = FLAG_UPDATE_ICON << 1;
    public static final int FLAG_UPDATE_CORNER_RADIUS = FLAG_UPDATE_THUMBNAIL << 1;

    public static final int FLAG_UPDATE_ALL = FLAG_UPDATE_ICON | FLAG_UPDATE_THUMBNAIL;
    public static final int FLAG_UPDATE_ALL = FLAG_UPDATE_ICON | FLAG_UPDATE_THUMBNAIL
            | FLAG_UPDATE_CORNER_RADIUS;

    /**
     * Used in conjunction with {@link #onTaskListVisibilityChanged(boolean, int)}, providing more
     * granularity on which components of this task require an update
     */
    @Retention(SOURCE)
    @IntDef({FLAG_UPDATE_ALL, FLAG_UPDATE_ICON, FLAG_UPDATE_THUMBNAIL})
    @IntDef({FLAG_UPDATE_ALL, FLAG_UPDATE_ICON, FLAG_UPDATE_THUMBNAIL, FLAG_UPDATE_CORNER_RADIUS})
    public @interface TaskDataChanges {}

    /**
@@ -1079,6 +1082,9 @@ public class TaskView extends FrameLayout implements Reusable {
                            mDigitalWellBeingToast.initialize(task);
                        });
            }
            if (needsUpdate(changes, FLAG_UPDATE_CORNER_RADIUS)) {
                mCurrentFullscreenParams.updateCornerRadius(getContext());
            }
        } else {
            if (needsUpdate(changes, FLAG_UPDATE_THUMBNAIL)) {
                mSnapshotView.setThumbnail(null, null);
@@ -1859,19 +1865,29 @@ public class TaskView extends FrameLayout implements Reusable {
     */
    public static class FullscreenDrawParams {

        private final float mCornerRadius;
        private final float mWindowCornerRadius;
        private float mCornerRadius;
        private float mWindowCornerRadius;

        public float mCurrentDrawnCornerRadius;

        public FullscreenDrawParams(Context context) {
            this(TaskCornerRadius.get(context), QuickStepContract.getWindowCornerRadius(context));
            updateCornerRadius(context);
        }

        /** Recomputes the start and end corner radius for the given Context. */
        public void updateCornerRadius(Context context) {
            mCornerRadius = computeTaskCornerRadius(context);
            mWindowCornerRadius = computeWindowCornerRadius(context);
        }

        @VisibleForTesting
        public float computeTaskCornerRadius(Context context) {
            return TaskCornerRadius.get(context);
        }

        FullscreenDrawParams(float cornerRadius, float windowCornerRadius) {
            mCornerRadius = cornerRadius;
            mWindowCornerRadius = windowCornerRadius;
            mCurrentDrawnCornerRadius = mCornerRadius;
        @VisibleForTesting
        public float computeWindowCornerRadius(Context context) {
            return QuickStepContract.getWindowCornerRadius(context);
        }

        /**
+75 −0
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@
 */
package com.android.quickstep

import android.content.Context
import android.graphics.Rect
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
@@ -29,7 +30,9 @@ import kotlin.math.roundToInt
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mockito.doReturn
import org.mockito.Mockito.mock
import org.mockito.Mockito.spy

/** Test for FullscreenDrawParams class. */
@SmallTest
@@ -186,4 +189,76 @@ class FullscreenDrawParamsTest : FakeInvariantDeviceProfileTest() {
        val expectedRadius = QuickStepContract.getWindowCornerRadius(context)
        assertThat(params.mCurrentDrawnCornerRadius).isEqualTo(expectedRadius)
    }

    @Test
    fun setStartProgress_correctCornerRadiusForMultiDisplay() {
        val display1Context = context
        val display2Context = mock(Context::class.java)
        val spyParams = spy(params)

        val display1TaskRadius = TaskCornerRadius.get(display1Context)
        val display1WindowRadius = QuickStepContract.getWindowCornerRadius(display1Context)
        val display2TaskRadius = display1TaskRadius * 2 + 1 // Arbitrarily different.
        val display2WindowRadius = display1WindowRadius * 2 + 1 // Arbitrarily different.
        doReturn(display2TaskRadius).`when`(spyParams).computeTaskCornerRadius(display2Context)
        doReturn(display2WindowRadius).`when`(spyParams).computeWindowCornerRadius(display2Context)

        spyParams.updateCornerRadius(display1Context)
        spyParams.setProgress(
            /* fullscreenProgress= */ 0f,
            /* parentScale= */ 1.0f,
            /* taskViewScale= */ 1.0f,
            /* unused previewWidth= */ -1,
            /* unusedDp= */ null,
            /* unused previewPositionHelper= */ null
        )
        assertThat(spyParams.mCurrentDrawnCornerRadius).isEqualTo(display1TaskRadius)

        spyParams.updateCornerRadius(display2Context)
        spyParams.setProgress(
            /* fullscreenProgress= */ 0f,
            /* parentScale= */ 1.0f,
            /* taskViewScale= */ 1.0f,
            /* unused previewWidth= */ -1,
            /* unusedDp= */ null,
            /* unused previewPositionHelper= */ null
        )
        assertThat(spyParams.mCurrentDrawnCornerRadius).isEqualTo(display2TaskRadius)
    }

    @Test
    fun setFullProgress_correctCornerRadiusForMultiDisplay() {
        val display1Context = context
        val display2Context = mock(Context::class.java)
        val spyParams = spy(params)

        val display1TaskRadius = TaskCornerRadius.get(display1Context)
        val display1WindowRadius = QuickStepContract.getWindowCornerRadius(display1Context)
        val display2TaskRadius = display1TaskRadius * 2 + 1 // Arbitrarily different.
        val display2WindowRadius = display1WindowRadius * 2 + 1 // Arbitrarily different.
        doReturn(display2TaskRadius).`when`(spyParams).computeTaskCornerRadius(display2Context)
        doReturn(display2WindowRadius).`when`(spyParams).computeWindowCornerRadius(display2Context)

        spyParams.updateCornerRadius(display1Context)
        spyParams.setProgress(
            /* fullscreenProgress= */ 1.0f,
            /* parentScale= */ 1.0f,
            /* taskViewScale= */ 1.0f,
            /* unused previewWidth= */ -1,
            /* unusedDp= */ null,
            /* unused previewPositionHelper= */ null
        )
        assertThat(spyParams.mCurrentDrawnCornerRadius).isEqualTo(display1WindowRadius)

        spyParams.updateCornerRadius(display2Context)
        spyParams.setProgress(
            /* fullscreenProgress= */ 1.0f,
            /* parentScale= */ 1.0f,
            /* taskViewScale= */ 1.0f,
            /* unused previewWidth= */ -1,
            /* unusedDp= */ null,
            /* unused previewPositionHelper= */ null
        )
        assertThat(spyParams.mCurrentDrawnCornerRadius).isEqualTo(display2WindowRadius)
    }
}