diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index 87687793f1605..c5fd83d995adb 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -2688,7 +2688,8 @@ android:theme="@style/Theme.Holo.Dialog.Alert" android:finishOnCloseSystemDialogs="true" android:excludeFromRecents="true" - android:multiprocess="true"> + android:multiprocess="true" + android:documentLaunchMode="never"> diff --git a/services/core/java/com/android/server/am/ActivityRecord.java b/services/core/java/com/android/server/am/ActivityRecord.java index b429b93796028..fe4937174e9f8 100755 --- a/services/core/java/com/android/server/am/ActivityRecord.java +++ b/services/core/java/com/android/server/am/ActivityRecord.java @@ -906,6 +906,9 @@ final class ActivityRecord { } startTime = 0; finishLaunchTickingLocked(); + if (task != null) { + task.hasBeenVisible = true; + } } } diff --git a/services/core/java/com/android/server/am/TaskRecord.java b/services/core/java/com/android/server/am/TaskRecord.java index 79e2d9d095df3..81a0b363cac1d 100644 --- a/services/core/java/com/android/server/am/TaskRecord.java +++ b/services/core/java/com/android/server/am/TaskRecord.java @@ -73,6 +73,7 @@ final class TaskRecord extends ThumbnailHolder { boolean rootWasReset; // True if the intent at the root of the task had // the FLAG_ACTIVITY_RESET_TASK_IF_NEEDED flag. boolean askedCompatMode;// Have asked the user about compat mode for this task. + boolean hasBeenVisible; // Set if any activities in the task have been visible to the user. String stringName; // caching of toString() result. int userId; // user for which this task was created @@ -328,8 +329,12 @@ final class TaskRecord extends ThumbnailHolder { } boolean autoRemoveFromRecents() { - return intent != null && - (intent.getFlags() & Intent.FLAG_ACTIVITY_AUTO_REMOVE_FROM_RECENTS) != 0; + // We will automatically remove the task either if it has explicitly asked for + // this, or it is empty and has never contained an activity that got shown to + // the user. + return (intent != null && + (intent.getFlags() & Intent.FLAG_ACTIVITY_AUTO_REMOVE_FROM_RECENTS) != 0) || + (mActivities.isEmpty() && !hasBeenVisible); } /** @@ -800,7 +805,8 @@ final class TaskRecord extends ThumbnailHolder { } pw.print(prefix); pw.print("lastThumbnail="); pw.print(lastThumbnail); pw.print(" lastDescription="); pw.println(lastDescription); - pw.print(prefix); pw.print("lastActiveTime="); pw.print(lastActiveTime); + pw.print(prefix); pw.print("hasBeenVisible="); pw.print(hasBeenVisible); + pw.print(" lastActiveTime="); pw.print(lastActiveTime); pw.print(" (inactive for "); pw.print((getInactiveDuration()/1000)); pw.println("s)"); } diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 0c094e8d6f395..c7dd8494bde97 100755 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -4988,6 +4988,7 @@ public class PackageManagerService extends IPackageManager.Stub { mResolveActivity.packageName = mAndroidApplication.packageName; mResolveActivity.processName = "system:ui"; mResolveActivity.launchMode = ActivityInfo.LAUNCH_MULTIPLE; + mResolveActivity.documentLaunchMode = ActivityInfo.DOCUMENT_LAUNCH_NEVER; mResolveActivity.flags = ActivityInfo.FLAG_EXCLUDE_FROM_RECENTS; mResolveActivity.theme = R.style.Theme_Holo_Dialog_Alert; mResolveActivity.exported = true;