Merge "Workaround for apps to stop before removing the task" into sc-dev

This commit is contained in:
Winson Chung
2021-06-07 03:27:19 +00:00
committed by Android (Google) Code Review
2 changed files with 23 additions and 11 deletions

View File

@@ -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();
}

View File

@@ -177,6 +177,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
@@ -2355,8 +2359,12 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
if (success) {
if (shouldRemoveTask) {
if (taskView.getTask() != null) {
UI_HELPER_EXECUTOR.execute(() -> ActivityManagerWrapper.getInstance()
.removeTask(taskView.getTask().key.id));
switchToScreenshotAndFinishAnimationToRecents(() -> {
UI_HELPER_EXECUTOR.getHandler().postDelayed(() ->
ActivityManagerWrapper.getInstance().removeTask(
taskView.getTask().key.id),
REMOVE_TASK_WAIT_FOR_APP_STOP_MS);
});
mActivity.getStatsLogManager().logger()
.withItemInfo(taskView.getItemInfo())
.log(LAUNCHER_TASK_DISMISS_SWIPE_UP);
@@ -2460,10 +2468,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;
});
@@ -2618,9 +2629,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();
@@ -3613,6 +3622,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.