diff options
author | Tony Wickham <twickham@google.com> | 2019-06-11 18:31:15 -0700 |
---|---|---|
committer | Tony Wickham <twickham@google.com> | 2019-06-12 15:24:58 -0700 |
commit | e8836dc0823a4b7115f2bc7b5f93c4d6b8cc9f7a (patch) | |
tree | c8f39d75f14eb95ffe1814cc84c5a623180b8d3f /quickstep/recents_ui_overrides | |
parent | 6129e4737cce1590f81393f384ec66efb6a220f8 (diff) | |
download | android_packages_apps_Trebuchet-e8836dc0823a4b7115f2bc7b5f93c4d6b8cc9f7a.tar.gz android_packages_apps_Trebuchet-e8836dc0823a4b7115f2bc7b5f93c4d6b8cc9f7a.tar.bz2 android_packages_apps_Trebuchet-e8836dc0823a4b7115f2bc7b5f93c4d6b8cc9f7a.zip |
Gracefully handle failed task launches during quick switch
When quick switching from home or overview, go to OverviewState if the
task launch failed. Otherwise we get stuck in BackgroundAppState.
Bug: 135038270
Change-Id: I42785c261cef0df95666bc106ec5ca6ef0553cc7
Diffstat (limited to 'quickstep/recents_ui_overrides')
4 files changed, 36 insertions, 2 deletions
diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/states/QuickSwitchState.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/states/QuickSwitchState.java index ed511f5f2..cdc271fdd 100644 --- a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/states/QuickSwitchState.java +++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/states/QuickSwitchState.java @@ -15,6 +15,9 @@ */ package com.android.launcher3.uioverrides.states; +import android.os.Handler; +import android.os.Looper; + import com.android.launcher3.Launcher; import com.android.launcher3.userevent.nano.LauncherLogProto; import com.android.quickstep.views.RecentsView; @@ -27,6 +30,8 @@ import com.android.quickstep.views.TaskView; */ public class QuickSwitchState extends BackgroundAppState { + private static final String TAG = "QuickSwitchState"; + public QuickSwitchState(int id) { super(id, LauncherLogProto.ContainerType.APP); } @@ -48,7 +53,12 @@ public class QuickSwitchState extends BackgroundAppState { public void onStateTransitionEnd(Launcher launcher) { TaskView tasktolaunch = launcher.<RecentsView>getOverviewPanel().getTaskViewAt(0); if (tasktolaunch != null) { - tasktolaunch.launchTask(false); + tasktolaunch.launchTask(false, success -> { + if (!success) { + launcher.getStateManager().goToState(OVERVIEW); + tasktolaunch.notifyTaskLaunchFailed(TAG); + } + }, new Handler(Looper.getMainLooper())); } else { launcher.getStateManager().goToState(NORMAL); } diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/FallbackActivityControllerHelper.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/FallbackActivityControllerHelper.java index 2c42fd63a..4ae6d87b8 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/FallbackActivityControllerHelper.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/FallbackActivityControllerHelper.java @@ -224,4 +224,10 @@ public final class FallbackActivityControllerHelper implements public boolean isInLiveTileMode() { return false; } + + @Override + public void onLaunchTaskFailed(RecentsActivity activity) { + // TODO: probably go back to overview instead. + activity.<RecentsView>getOverviewPanel().startHome(); + } } diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherActivityControllerHelper.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherActivityControllerHelper.java index 7809e454a..5449b47e0 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherActivityControllerHelper.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/LauncherActivityControllerHelper.java @@ -512,4 +512,9 @@ public final class LauncherActivityControllerHelper implements ActivityControlHe return launcher != null && launcher.getStateManager().getState() == OVERVIEW && launcher.isStarted(); } + + @Override + public void onLaunchTaskFailed(Launcher launcher) { + launcher.getStateManager().goToState(OVERVIEW); + } }
\ No newline at end of file diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/WindowTransformSwipeHandler.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/WindowTransformSwipeHandler.java index 7d17f85f6..06abb8018 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/WindowTransformSwipeHandler.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/WindowTransformSwipeHandler.java @@ -746,6 +746,9 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity> ? 0 : (progress - mShiftAtGestureStart) / (1 - mShiftAtGestureStart)); } + /** + * @param windowProgress 0 == app, 1 == overview + */ private void updateSysUiFlags(float windowProgress) { if (mRecentsView != null) { TaskView centermostTask = mRecentsView.getTaskViewAt(mRecentsView @@ -1249,7 +1252,17 @@ public class WindowTransformSwipeHandler<T extends BaseDraggingActivity> if (!mCanceled) { TaskView nextTask = mRecentsView.getTaskView(taskId); if (nextTask != null) { - nextTask.launchTask(false /* animate */, true /* freezeTaskList */); + nextTask.launchTask(false /* animate */, true /* freezeTaskList */, + success -> { + if (!success) { + // We couldn't launch the task, so take user to overview so they can + // decide what to do instead of staying in this broken state. + endLauncherTransitionController(); + mActivityControlHelper.onLaunchTaskFailed(mActivity); + nextTask.notifyTaskLaunchFailed(TAG); + updateSysUiFlags(1 /* windowProgress == overview */); + } + }, mMainThreadHandler); doLogGesture(NEW_TASK); } reset(); |