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 Original line Diff line number Diff line
@@ -109,9 +109,17 @@ public class DesktopTaskView extends TaskView {
    public DesktopTaskView(Context context, AttributeSet attrs, int defStyleAttr) {
    public DesktopTaskView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        super(context, attrs, defStyleAttr);


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

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


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


import com.android.app.animation.Interpolators;
import com.android.app.animation.Interpolators;
import com.android.launcher3.DeviceProfile;
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_ICON = 1;
    public static final int FLAG_UPDATE_THUMBNAIL = 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
     * Used in conjunction with {@link #onTaskListVisibilityChanged(boolean, int)}, providing more
     * granularity on which components of this task require an update
     * granularity on which components of this task require an update
     */
     */
    @Retention(SOURCE)
    @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 {}
    public @interface TaskDataChanges {}


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


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


        public float mCurrentDrawnCornerRadius;
        public float mCurrentDrawnCornerRadius;


        public FullscreenDrawParams(Context context) {
        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) {
        @VisibleForTesting
            mCornerRadius = cornerRadius;
        public float computeWindowCornerRadius(Context context) {
            mWindowCornerRadius = windowCornerRadius;
            return QuickStepContract.getWindowCornerRadius(context);
            mCurrentDrawnCornerRadius = mCornerRadius;
        }
        }


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


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


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