mirror of
https://github.com/LawnchairLauncher/lawnchair.git
synced 2026-02-28 15:56:49 +00:00
Merge "Update TaskView corner radius dynamically" into udc-qpr-dev
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
FullscreenDrawParams(float cornerRadius, float windowCornerRadius) {
|
||||
mCornerRadius = cornerRadius;
|
||||
mWindowCornerRadius = windowCornerRadius;
|
||||
mCurrentDrawnCornerRadius = mCornerRadius;
|
||||
/** 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);
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
public float computeWindowCornerRadius(Context context) {
|
||||
return QuickStepContract.getWindowCornerRadius(context);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user