diff --git a/quickstep/src/com/android/quickstep/BaseActivityInterface.java b/quickstep/src/com/android/quickstep/BaseActivityInterface.java index 52abb92882..6354282d47 100644 --- a/quickstep/src/com/android/quickstep/BaseActivityInterface.java +++ b/quickstep/src/com/android/quickstep/BaseActivityInterface.java @@ -60,7 +60,6 @@ import com.android.launcher3.views.ScrimView; import com.android.quickstep.util.ActivityInitListener; import com.android.quickstep.util.AnimatorControllerWithResistance; import com.android.quickstep.views.RecentsView; -import com.android.quickstep.views.TaskView; import com.android.systemui.shared.recents.model.ThumbnailData; import com.android.systemui.shared.system.RemoteAnimationTargetCompat; @@ -280,17 +279,8 @@ public abstract class BaseActivityInterface 0) { - scale = scale * dp.widthPx / fullWidth; - } - if (scale == 1) { - outPivot.set(fullWidth / 2, fullHeight / 2); + outPivot.set(taskView.centerX(), taskView.centerY()); } else { float factor = scale / (scale - 1); outPivot.set(taskView.left * factor, taskView.top * factor); diff --git a/quickstep/src/com/android/quickstep/views/TaskThumbnailView.java b/quickstep/src/com/android/quickstep/views/TaskThumbnailView.java index 32dc4d82f9..eb9b0b0074 100644 --- a/quickstep/src/com/android/quickstep/views/TaskThumbnailView.java +++ b/quickstep/src/com/android/quickstep/views/TaskThumbnailView.java @@ -238,13 +238,9 @@ public class TaskThumbnailView extends View { boundsToBitmapSpace.mapRect(boundsInBitmapSpace, viewRect); DeviceProfile dp = mActivity.getDeviceProfile(); - int leftInset = TaskView.clipLeft(dp) ? Math.round(boundsInBitmapSpace.left) : 0; - int topInset = TaskView.clipTop(dp) ? Math.round(boundsInBitmapSpace.top) : 0; - int rightInset = TaskView.clipRight(dp) ? Math.round( - bitmapRect.right - boundsInBitmapSpace.right) : 0; - int bottomInset = TaskView.clipBottom(dp) + int bottomInset = dp.isTablet ? Math.round(bitmapRect.bottom - boundsInBitmapSpace.bottom) : 0; - return Insets.of(leftInset, topInset, rightInset, bottomInset); + return Insets.of(0, 0, 0, bottomInset); } @@ -435,18 +431,9 @@ public class TaskThumbnailView extends View { int thumbnailRotation = thumbnailData.rotation; int deltaRotate = getRotationDelta(currentRotation, thumbnailRotation); RectF thumbnailClipHint = new RectF(); - if (TaskView.clipLeft(dp)) { - thumbnailClipHint.left = thumbnailData.insets.left; - } - if (TaskView.clipRight(dp)) { - thumbnailClipHint.right = thumbnailData.insets.right; - } - if (TaskView.clipTop(dp)) { - thumbnailClipHint.top = thumbnailData.insets.top; - } - if (TaskView.clipBottom(dp)) { - thumbnailClipHint.bottom = thumbnailData.insets.bottom; - } + float canvasScreenRatio = canvasWidth / (float) dp.widthPx; + float scaledTaskbarSize = dp.taskbarSize * canvasScreenRatio; + thumbnailClipHint.bottom = dp.isTablet ? scaledTaskbarSize : 0; float scale = thumbnailData.scale; final float thumbnailScale; @@ -486,18 +473,10 @@ public class TaskThumbnailView extends View { if (isAspectLargelyDifferent) { // Crop letterbox insets if insets isn't already clipped - if (!TaskView.clipLeft(dp)) { - thumbnailClipHint.left = thumbnailData.letterboxInsets.left; - } - if (!TaskView.clipRight(dp)) { - thumbnailClipHint.right = thumbnailData.letterboxInsets.right; - } - if (!TaskView.clipTop(dp)) { - thumbnailClipHint.top = thumbnailData.letterboxInsets.top; - } - if (!TaskView.clipBottom(dp)) { - thumbnailClipHint.bottom = thumbnailData.letterboxInsets.bottom; - } + thumbnailClipHint.left = thumbnailData.letterboxInsets.left; + thumbnailClipHint.right = thumbnailData.letterboxInsets.right; + thumbnailClipHint.top = thumbnailData.letterboxInsets.top; + thumbnailClipHint.bottom = thumbnailData.letterboxInsets.bottom; availableWidth = surfaceWidth - (thumbnailClipHint.left + thumbnailClipHint.right); availableHeight = surfaceHeight @@ -568,8 +547,7 @@ public class TaskThumbnailView extends View { setThumbnailRotation(deltaRotate, thumbnailBounds); } - float canvasScreenRatio = canvasWidth / (float) dp.widthPx; - mClippedInsets.set(0, 0, 0, dp.taskbarSize * canvasScreenRatio); + mClippedInsets.set(0, 0, 0, scaledTaskbarSize); mMatrix.postScale(thumbnailScale, thumbnailScale); mIsOrientationChanged = isOrientationDifferent; diff --git a/quickstep/src/com/android/quickstep/views/TaskView.java b/quickstep/src/com/android/quickstep/views/TaskView.java index 68e9f5ac0e..1bc538614b 100644 --- a/quickstep/src/com/android/quickstep/views/TaskView.java +++ b/quickstep/src/com/android/quickstep/views/TaskView.java @@ -136,34 +136,6 @@ public class TaskView extends FrameLayout implements Reusable { /** The maximum amount that a task view can be scrimmed, dimmed or tinted. */ public static final float MAX_PAGE_SCRIM_ALPHA = 0.4f; - /** - * Should the TaskView display clip off the left inset in RecentsView. - */ - public static boolean clipLeft(DeviceProfile deviceProfile) { - return false; - } - - /** - * Should the TaskView display clip off the top inset in RecentsView. - */ - public static boolean clipTop(DeviceProfile deviceProfile) { - return false; - } - - /** - * Should the TaskView display clip off the right inset in RecentsView. - */ - public static boolean clipRight(DeviceProfile deviceProfile) { - return false; - } - - /** - * Should the TaskView display clip off the bottom inset in RecentsView. - */ - public static boolean clipBottom(DeviceProfile deviceProfile) { - return deviceProfile.isTablet; - } - private static final float EDGE_SCALE_DOWN_FACTOR_CAROUSEL = 0.03f; private static final float EDGE_SCALE_DOWN_FACTOR_GRID = 0.00f; diff --git a/quickstep/tests/src/com/android/quickstep/TaskThumbnailViewTest.kt b/quickstep/tests/src/com/android/quickstep/TaskThumbnailViewTest.kt new file mode 100644 index 0000000000..cf3c8c9b8d --- /dev/null +++ b/quickstep/tests/src/com/android/quickstep/TaskThumbnailViewTest.kt @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.quickstep + +import android.graphics.Rect +import android.graphics.RectF +import androidx.test.ext.junit.runners.AndroidJUnit4 +import androidx.test.filters.SmallTest +import com.android.launcher3.DeviceProfileBaseTest +import com.android.quickstep.views.TaskThumbnailView.PreviewPositionHelper +import com.android.systemui.shared.recents.model.ThumbnailData +import com.google.common.truth.Truth.assertThat +import org.junit.Test +import org.junit.runner.RunWith +import org.mockito.Mockito.mock + +/** + * Test for TaskThumbnailView class. + */ +@SmallTest +@RunWith(AndroidJUnit4::class) +class TaskThumbnailViewTest : DeviceProfileBaseTest() { + + private var mThumbnailData: ThumbnailData = mock(ThumbnailData::class.java) + + private val mPreviewPositionHelper = PreviewPositionHelper() + + @Test + fun getInsetsToDrawInFullscreen_clipTaskbarSizeFromBottomForTablets() { + initializeVarsForTablet() + val dp = newDP() + val previewRect = Rect(0, 0, 100, 100) + val canvasWidth = dp.widthPx / 2 + val canvasHeight = dp.heightPx / 2 + val currentRotation = 0 + val isRtl = false + + mPreviewPositionHelper.updateThumbnailMatrix(previewRect, mThumbnailData, canvasWidth, + canvasHeight, dp, currentRotation, isRtl) + + val expectedClippedInsets = RectF(0f, 0f, 0f, dp.taskbarSize / 2f) + assertThat(mPreviewPositionHelper.getInsetsToDrawInFullscreen(dp)) + .isEqualTo(expectedClippedInsets) + } + + @Test + fun getInsetsToDrawInFullscreen_doNotClipTaskbarSizeFromBottomForPhones() { + initializeVarsForPhone() + val dp = newDP() + val previewRect = Rect(0, 0, 100, 100) + val canvasWidth = dp.widthPx / 2 + val canvasHeight = dp.heightPx / 2 + val currentRotation = 0 + val isRtl = false + + mPreviewPositionHelper.updateThumbnailMatrix(previewRect, mThumbnailData, canvasWidth, + canvasHeight, dp, currentRotation, isRtl) + + val expectedClippedInsets = RectF(0f, 0f, 0f, 0f) + assertThat(mPreviewPositionHelper.getInsetsToDrawInFullscreen(dp)) + .isEqualTo(expectedClippedInsets) + } +} \ No newline at end of file