Merge "Use new PreviewPositionHelper for each GetThumbnailPositionUseCase call" into main
diff --git a/quickstep/src/com/android/quickstep/recents/di/RecentsDependencies.kt b/quickstep/src/com/android/quickstep/recents/di/RecentsDependencies.kt
index 553a620..00ef13b 100644
--- a/quickstep/src/com/android/quickstep/recents/di/RecentsDependencies.kt
+++ b/quickstep/src/com/android/quickstep/recents/di/RecentsDependencies.kt
@@ -31,7 +31,7 @@
import com.android.quickstep.recents.domain.usecase.IsThumbnailValidUseCase
import com.android.quickstep.recents.domain.usecase.OrganizeDesktopTasksUseCase
import com.android.quickstep.recents.viewmodel.RecentsViewData
-import com.android.systemui.shared.recents.utilities.PreviewPositionHelper
+import com.android.systemui.shared.recents.utilities.PreviewPositionHelper.PreviewPositionHelperFactory
import kotlinx.coroutines.CoroutineName
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.SupervisorJob
@@ -203,7 +203,7 @@
GetThumbnailPositionUseCase(
deviceProfileRepository = inject(scopeId),
rotationStateRepository = inject(scopeId),
- previewPositionHelper = PreviewPositionHelper(),
+ previewPositionHelperFactory = PreviewPositionHelperFactory(),
)
OrganizeDesktopTasksUseCase::class.java -> OrganizeDesktopTasksUseCase()
else -> {
diff --git a/quickstep/src/com/android/quickstep/recents/domain/usecase/GetThumbnailPositionUseCase.kt b/quickstep/src/com/android/quickstep/recents/domain/usecase/GetThumbnailPositionUseCase.kt
index 8501382..e83d9f0 100644
--- a/quickstep/src/com/android/quickstep/recents/domain/usecase/GetThumbnailPositionUseCase.kt
+++ b/quickstep/src/com/android/quickstep/recents/domain/usecase/GetThumbnailPositionUseCase.kt
@@ -27,7 +27,7 @@
class GetThumbnailPositionUseCase(
private val deviceProfileRepository: RecentsDeviceProfileRepository,
private val rotationStateRepository: RecentsRotationStateRepository,
- private val previewPositionHelper: PreviewPositionHelper,
+ private val previewPositionHelperFactory: PreviewPositionHelper.PreviewPositionHelperFactory,
) {
operator fun invoke(
thumbnailData: ThumbnailData?,
@@ -38,6 +38,7 @@
val thumbnail =
thumbnailData?.thumbnail ?: return ThumbnailPosition(Matrix.IDENTITY_MATRIX, false)
+ val previewPositionHelper = previewPositionHelperFactory.create()
previewPositionHelper.updateThumbnailMatrix(
Rect(0, 0, thumbnail.width, thumbnail.height),
thumbnailData,
diff --git a/quickstep/tests/multivalentTests/src/com/android/quickstep/recents/domain/usecase/GetThumbnailPositionUseCaseTest.kt b/quickstep/tests/multivalentTests/src/com/android/quickstep/recents/domain/usecase/GetThumbnailPositionUseCaseTest.kt
index a253280..7646e69 100644
--- a/quickstep/tests/multivalentTests/src/com/android/quickstep/recents/domain/usecase/GetThumbnailPositionUseCaseTest.kt
+++ b/quickstep/tests/multivalentTests/src/com/android/quickstep/recents/domain/usecase/GetThumbnailPositionUseCaseTest.kt
@@ -25,11 +25,14 @@
import com.android.quickstep.recents.data.FakeRecentsRotationStateRepository
import com.android.systemui.shared.recents.model.ThumbnailData
import com.android.systemui.shared.recents.utilities.PreviewPositionHelper
+import com.android.systemui.shared.recents.utilities.PreviewPositionHelper.PreviewPositionHelperFactory
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.test.runTest
+import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.kotlin.mock
+import org.mockito.kotlin.times
import org.mockito.kotlin.verify
import org.mockito.kotlin.whenever
@@ -38,15 +41,21 @@
class GetThumbnailPositionUseCaseTest {
private val deviceProfileRepository = FakeRecentsDeviceProfileRepository()
private val rotationStateRepository = FakeRecentsRotationStateRepository()
+ private val previewPositionHelperFactoryMock = mock<PreviewPositionHelperFactory>()
private val previewPositionHelper = mock<PreviewPositionHelper>()
private val systemUnderTest =
GetThumbnailPositionUseCase(
- deviceProfileRepository,
- rotationStateRepository,
- previewPositionHelper,
+ deviceProfileRepository = deviceProfileRepository,
+ rotationStateRepository = rotationStateRepository,
+ previewPositionHelperFactory = previewPositionHelperFactoryMock,
)
+ @Before
+ fun setUp() {
+ whenever(previewPositionHelperFactoryMock.create()).thenReturn(previewPositionHelper)
+ }
+
@Test
fun nullThumbnailData_returnsIdentityMatrix() = runTest {
val expectedResult = ThumbnailPosition(Matrix.IDENTITY_MATRIX, false)
@@ -96,6 +105,25 @@
)
}
+ @Test
+ fun multipleInvocations_usesPreviewPositionHelperFactoryEachTime() = runTest {
+ whenever(previewPositionHelper.matrix).thenReturn(MATRIX)
+
+ val sut =
+ GetThumbnailPositionUseCase(
+ deviceProfileRepository = deviceProfileRepository,
+ rotationStateRepository = rotationStateRepository,
+ previewPositionHelperFactory = previewPositionHelperFactoryMock,
+ )
+ verify(previewPositionHelperFactoryMock, times(0)).create()
+
+ sut.invoke(THUMBNAIL_DATA, CANVAS_WIDTH, CANVAS_HEIGHT, /* isRtl= */ true)
+ sut.invoke(THUMBNAIL_DATA, CANVAS_WIDTH, CANVAS_HEIGHT, /* isRtl= */ false)
+
+ // Each invocation of use case should use a fresh position helper acquired by the factory.
+ verify(previewPositionHelperFactoryMock, times(2)).create()
+ }
+
private companion object {
const val THUMBNAIL_WIDTH = 100
const val THUMBNAIL_HEIGHT = 200