Loading libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentTasksController.java +23 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java +12 −1 Original line number Diff line number Diff line Loading @@ -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, Loading Loading @@ -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"); } Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/recents/RecentTasksController.java +23 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading
libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitScreenController.java +12 −1 Original line number Diff line number Diff line Loading @@ -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, Loading Loading @@ -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"); } Loading