Loading quickstep/src/com/android/quickstep/views/DesktopTaskView.java +11 −3 Original line number Diff line number Diff line Loading @@ -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 Loading quickstep/src/com/android/quickstep/views/TaskView.java +25 −9 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 {} /** Loading Loading @@ -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); Loading Loading @@ -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); } /** Loading quickstep/tests/src/com/android/quickstep/FullscreenDrawParamsTest.kt +75 −0 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading Loading @@ -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) } } Loading
quickstep/src/com/android/quickstep/views/DesktopTaskView.java +11 −3 Original line number Diff line number Diff line Loading @@ -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 Loading
quickstep/src/com/android/quickstep/views/TaskView.java +25 −9 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 {} /** Loading Loading @@ -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); Loading Loading @@ -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); } /** Loading
quickstep/tests/src/com/android/quickstep/FullscreenDrawParamsTest.kt +75 −0 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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 Loading Loading @@ -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) } }