Merge "Take screenshot on ui helper thread in live tile" into sc-dev am: 7c53f5d907

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Launcher3/+/14357548

Change-Id: I993e1e8aaf54cfb19c8e07c583a6adbb7ee64f60
This commit is contained in:
Winson Chung
2021-05-01 20:56:22 +00:00
committed by Automerger Merge Worker
2 changed files with 14 additions and 25 deletions

View File

@@ -1423,23 +1423,17 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
}
protected void switchToScreenshot() {
final int runningTaskId = mGestureState.getRunningTaskId();
if (LIVE_TILE.get()) {
if (mRecentsAnimationController != null) {
mRecentsAnimationController.getController().setWillFinishToHome(true);
// Update the screenshot of the task
if (mTaskSnapshot == null) {
mTaskSnapshot = mRecentsAnimationController.screenshotTask(runningTaskId);
}
mRecentsView.updateThumbnail(runningTaskId, mTaskSnapshot, false /* refreshNow */);
}
mStateCallback.setStateOnUiThread(STATE_SCREENSHOT_CAPTURED);
} else if (!hasTargets()) {
if (!hasTargets()) {
// If there are no targets, then we don't need to capture anything
mStateCallback.setStateOnUiThread(STATE_SCREENSHOT_CAPTURED);
} else {
final int runningTaskId = mGestureState.getRunningTaskId();
final boolean refreshView = !LIVE_TILE.get() /* refreshView */;
boolean finishTransitionPosted = false;
if (mRecentsAnimationController != null) {
if (LIVE_TILE.get()) {
mRecentsAnimationController.getController().setWillFinishToHome(true);
}
// Update the screenshot of the task
if (mTaskSnapshot == null) {
UI_HELPER_EXECUTOR.execute(() -> {
@@ -1448,14 +1442,14 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
mRecentsAnimationController.screenshotTask(runningTaskId);
MAIN_EXECUTOR.execute(() -> {
mTaskSnapshot = taskSnapshot;
if (!updateThumbnail(runningTaskId)) {
if (!updateThumbnail(runningTaskId, refreshView)) {
setScreenshotCapturedState();
}
});
});
return;
}
finishTransitionPosted = updateThumbnail(runningTaskId);
finishTransitionPosted = updateThumbnail(runningTaskId, refreshView);
}
if (!finishTransitionPosted) {
setScreenshotCapturedState();
@@ -1464,17 +1458,17 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
}
// Returns whether finish transition was posted.
private boolean updateThumbnail(int runningTaskId) {
private boolean updateThumbnail(int runningTaskId, boolean refreshView) {
boolean finishTransitionPosted = false;
final TaskView taskView;
if (mGestureState.getEndTarget() == HOME) {
// Capture the screenshot before finishing the transition to home to ensure it's
// taken in the correct orientation, but no need to update the thumbnail.
if (mGestureState.getEndTarget() == HOME || mGestureState.getEndTarget() == NEW_TASK) {
// Capture the screenshot before finishing the transition to home or quickswitching to
// ensure it's taken in the correct orientation, but no need to update the thumbnail.
taskView = null;
} else {
taskView = mRecentsView.updateThumbnail(runningTaskId, mTaskSnapshot);
taskView = mRecentsView.updateThumbnail(runningTaskId, mTaskSnapshot, refreshView);
}
if (taskView != null && !mCanceled) {
if (taskView != null && refreshView && !mCanceled) {
// Defer finishing the animation until the next launcher frame with the
// new thumbnail
finishTransitionPosted = ViewUtils.postFrameDrawn(taskView,

View File

@@ -699,11 +699,6 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
return taskView;
}
/** See {@link #updateThumbnail(int, ThumbnailData, boolean)} */
public TaskView updateThumbnail(int taskId, ThumbnailData thumbnailData) {
return updateThumbnail(taskId, thumbnailData, true /* refreshNow */);
}
@Override
protected void onWindowVisibilityChanged(int visibility) {
super.onWindowVisibilityChanged(visibility);