Workaround for apps to stop before removing the task
- With live tile enabled, the race between destroying the task and
killing the process is more evident since the app may not get
stopped at all. For now, when dismissing, defer removing the
task until we've finished the recents animation to allow the
app to be stopped accordingly
Bug: 184899234
Test: Dismiss the task from overview, check that the app gets
lifecycle events
Change-Id: Ib3ea479643d65859fe4cd580b4c347b87130a69d
This commit is contained in:
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user