Merge "Workaround for apps to stop before removing the task" into sc-v2-dev am: 98644240ca

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

Change-Id: I12d07e3dbf5eeec81e89d4abdbf0c9c5f1e7e84d
This commit is contained in:
Winson Chung
2021-06-04 20:55:25 +00:00
committed by Automerger Merge Worker
2 changed files with 22 additions and 11 deletions
@@ -350,8 +350,7 @@ public final class RecentsActivity extends StatefulActivity<RecentsState> {
public void startHome() {
if (LIVE_TILE.get()) {
RecentsView recentsView = getOverviewPanel();
recentsView.switchToScreenshot(() -> recentsView.finishRecentsAnimation(true,
this::startHomeInternal));
recentsView.switchToScreenshotAndFinishAnimationToRecents(this::startHomeInternal);
} else {
startHomeInternal();
}
@@ -176,6 +176,10 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
TaskThumbnailCache.HighResLoadingState.HighResLoadingStateChangedCallback,
TaskVisualsChangeListener, SplitScreenBounds.OnChangeListener {
// TODO(b/184899234): We use this timeout to wait a fixed period after switching to the
// screenshot when dismissing the current live task to ensure the app can try and get stopped.
private static final int REMOVE_TASK_WAIT_FOR_APP_STOP_MS = 100;
public static final FloatProperty<RecentsView> CONTENT_ALPHA =
new FloatProperty<RecentsView>("contentAlpha") {
@Override
@@ -2423,8 +2427,11 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
if (success) {
if (shouldRemoveTask) {
if (dismissedTaskView.getTask() != null) {
UI_HELPER_EXECUTOR.execute(() -> ActivityManagerWrapper.getInstance()
.removeTask(dismissedTaskId));
switchToScreenshotAndFinishAnimationToRecents(() -> {
UI_HELPER_EXECUTOR.getHandler().postDelayed(() ->
ActivityManagerWrapper.getInstance().removeTask(
dismissedTaskId), REMOVE_TASK_WAIT_FOR_APP_STOP_MS);
});
mActivity.getStatsLogManager().logger()
.withItemInfo(dismissedTaskView.getItemInfo())
.log(LAUNCHER_TASK_DISMISS_SWIPE_UP);
@@ -2529,10 +2536,13 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
mPendingAnimation.addEndListener(isSuccess -> {
if (isSuccess) {
// Remove all the task views now
UI_HELPER_EXECUTOR.execute(
ActivityManagerWrapper.getInstance()::removeAllRecentTasks);
removeTasksViewsAndClearAllButton();
startHome();
switchToScreenshotAndFinishAnimationToRecents(() -> {
UI_HELPER_EXECUTOR.getHandler().postDelayed(
ActivityManagerWrapper.getInstance()::removeAllRecentTasks,
REMOVE_TASK_WAIT_FOR_APP_STOP_MS);
removeTasksViewsAndClearAllButton();
startHome();
});
}
mPendingAnimation = null;
});
@@ -2687,9 +2697,7 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
protected void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (LIVE_TILE.get() && mEnableDrawingLiveTile && newConfig.orientation != mOrientation) {
switchToScreenshot(
() -> finishRecentsAnimation(true /* toRecents */,
this::updateRecentsRotation));
switchToScreenshotAndFinishAnimationToRecents(this::updateRecentsRotation);
mEnableDrawingLiveTile = false;
} else {
updateRecentsRotation();
@@ -3687,6 +3695,10 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
}
}
public void switchToScreenshotAndFinishAnimationToRecents(Runnable onFinishRunnable) {
switchToScreenshot(() -> finishRecentsAnimation(true /* toRecents */, onFinishRunnable));
}
/**
* Switch the current running task view to static snapshot mode,
* capturing the snapshot at the same time.