Some tweaks to improve document task creation.
- Mark the chooser activity as never launching in to a new task, even if the caller asks for it. These are dialogs so don't make sense as stand-alone tasks. (Maybe later the policy should be to not launch into a new task in any case that the activity is a dialog or even transparent at all.) - Keep track in the task record of whether any activities in it have been shown to the user, and use this to automatically remove the task when all activities finish. This leans up cases where apps are launching stub activities that get turned in to tasks but are never seen by the user because they immediately launch another activity in another task and then finish. Change-Id: I00b641c80aa96bd5071479f36ee2e4d8e3a81aeb
This commit is contained in:
@@ -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">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.CHOOSER" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
|
||||
@@ -906,6 +906,9 @@ final class ActivityRecord {
|
||||
}
|
||||
startTime = 0;
|
||||
finishLaunchTickingLocked();
|
||||
if (task != null) {
|
||||
task.hasBeenVisible = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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)");
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user