summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
author Chilun Huang <chilunhuang@google.com> 2022-09-26 04:49:22 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2022-09-26 04:49:22 +0000
commit1da31fbc6fd64eea569b8622f7b2d24ac93bd8a3 (patch)
treed83da3a48640f6df8e535ab1ca8b7a2da3c40868 /libs
parentb62f4c91b3df80591899445a830ff8f52b33689a (diff)
parente9f622dc90120314e5e8a50a2669a1334dfec17d (diff)
Merge "Reuse tasks in background in priority for split screen" into tm-qpr-dev am: e9f622dc90
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/19950544 Change-Id: I4cf0e62808b22ca0ee092c90c99f0f984163a480 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
Diffstat (limited to 'libs')
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentTasksController.java23
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java13
2 files changed, 35 insertions, 1 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentTasksController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentTasksController.java
index ff4b2edb7310..f8799945134f 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentTasksController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentTasksController.java
@@ -24,6 +24,7 @@ import static com.android.wm.shell.common.ExecutorUtils.executeRemoteCallWithTas
import android.app.ActivityManager;
import android.app.ActivityTaskManager;
import android.app.TaskInfo;
+import android.content.ComponentName;
import android.content.Context;
import android.os.RemoteException;
import android.util.Slog;
@@ -327,6 +328,28 @@ public class RecentTasksController implements TaskStackListenerCallback,
return recentTasks;
}
+ /**
+ * Find the background task that match the given component.
+ */
+ @Nullable
+ public ActivityManager.RecentTaskInfo findTaskInBackground(ComponentName componentName) {
+ if (componentName == null) {
+ return null;
+ }
+ List<ActivityManager.RecentTaskInfo> tasks = getRawRecentTasks(Integer.MAX_VALUE,
+ ActivityManager.RECENT_IGNORE_UNAVAILABLE, ActivityManager.getCurrentUser());
+ for (int i = 0; i < tasks.size(); i++) {
+ final ActivityManager.RecentTaskInfo task = tasks.get(i);
+ if (task.isVisible) {
+ continue;
+ }
+ if (componentName.equals(task.baseIntent.getComponent())) {
+ return task;
+ }
+ }
+ return null;
+ }
+
public void dump(@NonNull PrintWriter pw, String prefix) {
final String innerPrefix = prefix + " ";
pw.println(prefix + TAG);
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java
index 991f136c0055..07a6895e2720 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java
@@ -385,6 +385,9 @@ public class SplitScreenController implements DragAndDropPolicy.Starter,
}
@Override
public void onAnimationCancelled(boolean isKeyguardOccluded) {
+ final WindowContainerTransaction evictWct = new WindowContainerTransaction();
+ mStageCoordinator.prepareEvictInvisibleChildTasks(evictWct);
+ mSyncQueue.queue(evictWct);
}
};
options = mStageCoordinator.resolveStartStage(STAGE_TYPE_UNDEFINED, position, options,
@@ -472,8 +475,16 @@ public class SplitScreenController implements DragAndDropPolicy.Starter,
fillInIntent.addFlags(FLAG_ACTIVITY_NO_USER_ACTION);
// Flag with MULTIPLE_TASK if this is launching the same activity into both sides of the
- // split.
+ // split and there is no reusable background task.
if (shouldAddMultipleTaskFlag(intent.getIntent(), position)) {
+ final ActivityManager.RecentTaskInfo taskInfo = mRecentTasksOptional.isPresent()
+ ? mRecentTasksOptional.get().findTaskInBackground(
+ intent.getIntent().getComponent())
+ : null;
+ if (taskInfo != null) {
+ startTask(taskInfo.taskId, position, options);
+ return;
+ }
fillInIntent.addFlags(FLAG_ACTIVITY_MULTIPLE_TASK);
ProtoLog.v(ShellProtoLogGroup.WM_SHELL_SPLIT_SCREEN, "Adding MULTIPLE_TASK");
}