Only refresh TaskThumbnailViewDeprecated if runningTaskShowScreenshot has changed

- This is a follow-up of ag/28922223, which caused a RECENTS_SCROLLING jank regression
- The regression is probably caused by TaskThumbnailViewDeprecated unnecessarily redrawing, the fix is to only redraw when needed
- Also combined setShouldShowScreenshot and refreshThumbnails into a single method, so we can easily check inside TaskView if a refresh is necessary
- Centralize screenshotTasks logic into RecentsViewUtils, and centralize thumbnailView refreshing inside TaksView.setShouldShowScreenshot

Fix: 362294538
Test: Invoke Omnient or Screenshot hardware button on live tile, verify running task switches to screenshot after overlay closes
Test: Select/Screenshot swithces to screenshot normally
Flag: EXEMPT BUG_FIX
Change-Id: I7c6e73e52ebf18e7c59bb9afea029246b92681d2
This commit is contained in:
Alex Chau
2024-08-28 15:04:51 +01:00
parent 380f11e9d5
commit 31d465937b
4 changed files with 29 additions and 34 deletions
@@ -3058,14 +3058,15 @@ public abstract class RecentsView<
}
private void setRunningTaskViewShowScreenshot(boolean showScreenshot) {
setRunningTaskViewShowScreenshot(showScreenshot, /*updatedThumbnails=*/null);
}
private void setRunningTaskViewShowScreenshot(boolean showScreenshot,
@Nullable Map<Integer, ThumbnailData> updatedThumbnails) {
mRunningTaskShowScreenshot = showScreenshot;
TaskView runningTaskView = getRunningTaskView();
if (runningTaskView != null) {
runningTaskView.setShouldShowScreenshot(mRunningTaskShowScreenshot);
if (!enableRefactorTaskThumbnail()) {
runningTaskView.getTaskContainers().forEach(
taskContainer -> taskContainer.getThumbnailViewDeprecated().refresh());
}
runningTaskView.setShouldShowScreenshot(mRunningTaskShowScreenshot, updatedThumbnails);
}
if (enableRefactorTaskThumbnail()) {
mRecentsViewModel.setRunningTaskShowScreenshot(showScreenshot);
@@ -6154,20 +6155,12 @@ public abstract class RecentsView<
return;
}
Map<Integer, ThumbnailData> updatedThumbnails = mRecentsViewUtils.screenshotTasks(taskView,
mRecentsAnimationController);
if (enableRefactorTaskThumbnail()) {
mHelper.switchToScreenshot(taskView, mRecentsAnimationController, onFinishRunnable);
mHelper.switchToScreenshot(taskView, updatedThumbnails, onFinishRunnable);
} else {
setRunningTaskViewShowScreenshot(true);
for (TaskContainer container : taskView.getTaskContainers()) {
ThumbnailData thumbnailData =
mRecentsAnimationController.screenshotTask(container.getTask().key.id);
TaskThumbnailViewDeprecated thumbnailView = container.getThumbnailViewDeprecated();
if (thumbnailData != null) {
thumbnailView.setThumbnail(container.getTask(), thumbnailData);
} else {
thumbnailView.refresh();
}
}
setRunningTaskViewShowScreenshot(true, updatedThumbnails);
ViewUtils.postFrameDrawn(taskView, onFinishRunnable);
}
}
@@ -6186,8 +6179,7 @@ public abstract class RecentsView<
if (enableRefactorTaskThumbnail()) {
mHelper.switchToScreenshot(taskView, thumbnailDatas, onFinishRunnable);
} else {
taskView.setShouldShowScreenshot(true);
taskView.refreshThumbnails(thumbnailDatas);
taskView.setShouldShowScreenshot(true, thumbnailDatas);
ViewUtils.postFrameDrawn(taskView, onFinishRunnable);
}
} else {