From 53d9264de4f99a069dd7306f881d28ddd5956b35 Mon Sep 17 00:00:00 2001 From: Dianne Hackborn Date: Tue, 13 Apr 2010 12:49:14 -0700 Subject: [PATCH] Fix issue #2555171: Switching to app immediately after unmounting... ...SD card causes reboot. Add option to not include temporarily unavailable recent tasks, for the recent tasks UI to not display them. Change-Id: I1495ca217b4292fd56f537459b44c0624262c292 --- core/java/android/app/ActivityManager.java | 7 +++++++ .../server/am/ActivityManagerService.java | 21 +++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java index b3223e5fb6045..c9096cfe6e99c 100644 --- a/core/java/android/app/ActivityManager.java +++ b/core/java/android/app/ActivityManager.java @@ -144,6 +144,13 @@ public class ActivityManager { */ public static final int RECENT_WITH_EXCLUDED = 0x0001; + /** + * @hide + * TODO: Make this public. Provides a list that does not contain any + * recent tasks that currently are not available to the user. + */ + public static final int RECENT_IGNORE_UNAVAILABLE = 0x0002; + /** * Return a list of the tasks that the user has recently launched, with * the most recent being first and older ones after in order. diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java index bc26fa0c6ff8b..b6f323dd0a6b9 100644 --- a/services/java/com/android/server/am/ActivityManagerService.java +++ b/services/java/com/android/server/am/ActivityManagerService.java @@ -6867,6 +6867,8 @@ public final class ActivityManagerService extends ActivityManagerNative implemen enforceCallingPermission(android.Manifest.permission.GET_TASKS, "getRecentTasks()"); + IPackageManager pm = ActivityThread.getPackageManager(); + final int N = mRecentTasks.size(); ArrayList res = new ArrayList( @@ -6883,6 +6885,25 @@ public final class ActivityManagerService extends ActivityManagerNative implemen rti.baseIntent = new Intent( tr.intent != null ? tr.intent : tr.affinityIntent); rti.origActivity = tr.origActivity; + + if ((flags&ActivityManager.RECENT_IGNORE_UNAVAILABLE) != 0) { + // Check whether this activity is currently available. + try { + if (rti.origActivity != null) { + if (pm.getActivityInfo(rti.origActivity, 0) == null) { + continue; + } + } else if (rti.baseIntent != null) { + if (pm.queryIntentActivities(rti.baseIntent, + null, 0) == null) { + continue; + } + } + } catch (RemoteException e) { + // Will never happen. + } + } + res.add(rti); maxNum--; }