diff options
5 files changed, 29 insertions, 9 deletions
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index 0445fe816af6..e9a1acff87b0 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -670,6 +670,8 @@ <string name="recents_lock_to_app_button_label">lock to app</string> <!-- Recents: Temporary string for the button in the recents search bar. [CHAR LIMIT=NONE] --> <string name="recents_search_bar_label">search</string> + <!-- Recents: Launch error string. [CHAR LIMIT=NONE] --> + <string name="recents_launch_error_message">Could not start <xliff:g id="app" example="Calendar">%s</xliff:g>.</string> <!-- Expanded Status Bar Header: Battery Charged [CHAR LIMIT=40] --> diff --git a/packages/SystemUI/src/com/android/systemui/recents/AlternateRecentsComponent.java b/packages/SystemUI/src/com/android/systemui/recents/AlternateRecentsComponent.java index 787de4ed0109..702f59a5b420 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/AlternateRecentsComponent.java +++ b/packages/SystemUI/src/com/android/systemui/recents/AlternateRecentsComponent.java @@ -222,9 +222,8 @@ public class AlternateRecentsComponent implements ActivityOptions.OnAnimationSta // Bring an active task to the foreground mSystemServicesProxy.moveTaskToFront(toTask.key.id, launchOpts); } else { - try { - mSystemServicesProxy.startActivityFromRecents(toTask.key.id, launchOpts); - } catch (ActivityNotFoundException anfe) {} + mSystemServicesProxy.startActivityFromRecents(mContext, toTask.key.id, + toTask.activityLabel, launchOpts); } } diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java index 8f92027206d3..933d3caebae7 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java +++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java @@ -614,6 +614,12 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView } @Override + public void onTaskLaunchFailed() { + // Return to Home + dismissRecentsToHomeRaw(true); + } + + @Override public void onAllTaskViewsDismissed() { mFinishLaunchHomeRunnable.run(); } diff --git a/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java b/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java index bbd0a0d6f215..55413c602077 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java +++ b/packages/SystemUI/src/com/android/systemui/recents/misc/SystemServicesProxy.java @@ -57,6 +57,7 @@ import android.view.DisplayInfo; import android.view.SurfaceControl; import android.view.WindowManager; import android.view.accessibility.AccessibilityManager; +import com.android.systemui.R; import com.android.systemui.recents.Constants; import java.io.IOException; @@ -509,12 +510,18 @@ public class SystemServicesProxy { return takeScreenshot(); } - public void startActivityFromRecents(int taskId, ActivityOptions options) { + /** Starts an activity from recents. */ + public boolean startActivityFromRecents(Context context, int taskId, String taskName, + ActivityOptions options) { if (mIam != null) { try { mIam.startActivityFromRecents(taskId, options == null ? null : options.toBundle()); - } catch (RemoteException e) { + return true; + } catch (Exception e) { + Console.logError(context, + context.getString(R.string.recents_launch_error_message, taskName)); } } + return false; } } diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java index 1bfb41f9ac95..bb4010e7b688 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java +++ b/packages/SystemUI/src/com/android/systemui/recents/views/RecentsView.java @@ -56,6 +56,7 @@ public class RecentsView extends FrameLayout implements TaskStackView.TaskStackV /** The RecentsView callbacks */ public interface RecentsViewCallbacks { public void onTaskViewClicked(); + public void onTaskLaunchFailed(); public void onAllTaskViewsDismissed(); public void onExitToHomeAnimationTriggered(); } @@ -470,13 +471,18 @@ public class RecentsView extends FrameLayout implements TaskStackView.TaskStackV // Bring an active task to the foreground ssp.moveTaskToFront(task.key.id, launchOpts); } else { - try { - ssp.startActivityFromRecents(task.key.id, launchOpts); + if (ssp.startActivityFromRecents(getContext(), task.key.id, + task.activityLabel, launchOpts)) { if (launchOpts == null && lockToTask) { ssp.lockCurrentTask(); } - } catch (ActivityNotFoundException anfe) { - Console.logError(getContext(), "Could not start Activity"); + } else { + // Dismiss the task and return the user to home if we fail to + // launch the task + onTaskViewDismissed(task); + if (mCb != null) { + mCb.onTaskLaunchFailed(); + } } } } |