Use onTaskThumbnailChanged as sourced of truth for thumnbail override
- Both RecentsView.screenshotTask and RecentsView.updateThumbnail uses thumbnail that comes from recentsAnimationController.screenshotTask. recentsAnimationController.screenshotTask always results in TaskVisualsChangeListener.onTaskThumbnailChanged, which is a better source of truth to rely on rather than having 3 entry points for thumbnail override
- As a thumbnail objects from onTaskThumbnailChanged has the same snapshotId but are different instances, updated RecentsViewModel.waitForThumbnailsToUpdate to reflect that
Bug: 342560598
Test: RecentsViewModelTest
Flag: com.android.launcher3.enable_refactor_task_thumbnail
Change-Id: I79b6e32224df4192e8df6930d87b222ed93bf8d8
diff --git a/quickstep/src/com/android/quickstep/recents/viewmodel/RecentsViewModel.kt b/quickstep/src/com/android/quickstep/recents/viewmodel/RecentsViewModel.kt
index 54e34a0..b1f46a3 100644
--- a/quickstep/src/com/android/quickstep/recents/viewmodel/RecentsViewModel.kt
+++ b/quickstep/src/com/android/quickstep/recents/viewmodel/RecentsViewModel.kt
@@ -66,7 +66,7 @@
combine(
updatedThumbnails.map {
recentsTasksRepository.getThumbnailById(it.key).filter { thumbnailData ->
- thumbnailData == it.value
+ thumbnailData?.snapshotId == it.value.snapshotId
}
}
) {}
diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java
index 3702f93..fa9a282 100644
--- a/quickstep/src/com/android/quickstep/views/RecentsView.java
+++ b/quickstep/src/com/android/quickstep/views/RecentsView.java
@@ -1048,7 +1048,7 @@
@Nullable
public Task onTaskThumbnailChanged(int taskId, ThumbnailData thumbnailData) {
if (enableRefactorTaskThumbnail()) {
- // TODO(b/342560598): Listen in TaskRepository and reload
+ mHelper.onTaskThumbnailChanged(taskId, thumbnailData);
return null;
}
if (mHandleTaskStackChanges) {
@@ -1097,9 +1097,7 @@
/** Updates the thumbnail(s) of the relevant TaskView. */
public void updateThumbnail(Map<Integer, ThumbnailData> thumbnailData) {
- if (enableRefactorTaskThumbnail()) {
- mRecentsViewModel.addOrUpdateThumbnailOverride(thumbnailData);
- } else {
+ if (!enableRefactorTaskThumbnail()) {
for (Map.Entry<Integer, ThumbnailData> entry : thumbnailData.entrySet()) {
Integer id = entry.getKey();
ThumbnailData thumbnail = entry.getValue();
diff --git a/quickstep/src/com/android/quickstep/views/RecentsViewHelper.kt b/quickstep/src/com/android/quickstep/views/RecentsViewHelper.kt
index a63ccec..e8c9718 100644
--- a/quickstep/src/com/android/quickstep/views/RecentsViewHelper.kt
+++ b/quickstep/src/com/android/quickstep/views/RecentsViewHelper.kt
@@ -60,9 +60,6 @@
// Update recentsViewModel and apply the thumbnailOverride ASAP, before waiting inside
// viewAttachedScope.
recentsViewModel.setRunningTaskShowScreenshot(true)
- if (updatedThumbnails != null) {
- recentsViewModel.addOrUpdateThumbnailOverride(updatedThumbnails)
- }
viewAttachedScope.launch {
recentsViewModel.waitForRunningTaskShowScreenshotToUpdate()
if (updatedThumbnails != null) {
@@ -71,4 +68,8 @@
ViewUtils.postFrameDrawn(taskView, onFinishRunnable)
}
}
+
+ fun onTaskThumbnailChanged(taskId: Int, thumbnailData: ThumbnailData) {
+ recentsViewModel.addOrUpdateThumbnailOverride(mapOf(taskId to thumbnailData))
+ }
}
diff --git a/quickstep/tests/multivalentTests/src/com/android/quickstep/recents/viewmodel/RecentsViewModelTest.kt b/quickstep/tests/multivalentTests/src/com/android/quickstep/recents/viewmodel/RecentsViewModelTest.kt
index b3caf2d..dc16475 100644
--- a/quickstep/tests/multivalentTests/src/com/android/quickstep/recents/viewmodel/RecentsViewModelTest.kt
+++ b/quickstep/tests/multivalentTests/src/com/android/quickstep/recents/viewmodel/RecentsViewModelTest.kt
@@ -72,9 +72,8 @@
@Test
fun thumbnailOverrideWaitAndReset() = runTest {
- val thumbnailData1 = createThumbnailData()
- val thumbnailData2 = createThumbnailData()
- val thumbnailDataOverride = createThumbnailData()
+ val thumbnailData1 = createThumbnailData().apply { snapshotId = 1 }
+ val thumbnailData2 = createThumbnailData().apply { snapshotId = 2 }
tasksRepository.seedTasks(tasks)
tasksRepository.seedThumbnailData(mapOf(1 to thumbnailData1, 2 to thumbnailData2))
@@ -87,15 +86,16 @@
assertThat(thumbnailDataFlow1.first()).isEqualTo(thumbnailData1)
assertThat(thumbnailDataFlow2.first()).isEqualTo(thumbnailData2)
- val thumbnailUpdate = mapOf(2 to thumbnailDataOverride)
systemUnderTest.setRunningTaskShowScreenshot(true)
- systemUnderTest.addOrUpdateThumbnailOverride(thumbnailUpdate)
+ val thumbnailOverride = mapOf(2 to createThumbnailData().apply { snapshotId = 3 })
+ systemUnderTest.addOrUpdateThumbnailOverride(thumbnailOverride)
systemUnderTest.waitForRunningTaskShowScreenshotToUpdate()
- systemUnderTest.waitForThumbnailsToUpdate(thumbnailUpdate)
+ val expectedUpdate = mapOf(2 to createThumbnailData().apply { snapshotId = 3 })
+ systemUnderTest.waitForThumbnailsToUpdate(expectedUpdate)
assertThat(thumbnailDataFlow1.first()).isEqualTo(thumbnailData1)
- assertThat(thumbnailDataFlow2.first()).isEqualTo(thumbnailDataOverride)
+ assertThat(thumbnailDataFlow2.first()?.snapshotId).isEqualTo(3)
systemUnderTest.onReset()