diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index 0445fe816af63..e9a1acff87b06 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -670,6 +670,8 @@
lock to app
search
+
+ Could not start %s.
diff --git a/packages/SystemUI/src/com/android/systemui/recents/AlternateRecentsComponent.java b/packages/SystemUI/src/com/android/systemui/recents/AlternateRecentsComponent.java
index 787de4ed01099..702f59a5b4208 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 8f92027206d34..933d3caebae7f 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsActivity.java
@@ -613,6 +613,12 @@ public class RecentsActivity extends Activity implements RecentsView.RecentsView
mVisible = false;
}
+ @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 bbd0a0d6f2155..55413c6020779 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 1bfb41f9ac955..bb4010e7b688b 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();
+ }
}
}
}