Merge "Allows splitscreen with work & personal version of the same app" into udc-dev am: 11e4f30b36

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/23183679

Change-Id: I47dec6296725eb446e302a764cf62ce4b903e2f6
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Jeremy Sim
2023-05-13 00:32:18 +00:00
committed by Automerger Merge Worker
6 changed files with 115 additions and 74 deletions

View File

@@ -78,8 +78,15 @@ public class SplitScreenUtils {
return taskInfo != null ? getPackageName(taskInfo.baseIntent) : null; return taskInfo != null ? getPackageName(taskInfo.baseIntent) : null;
} }
/** Returns true if they are the same package. */ /** Retrieve user id from a taskId */
public static boolean samePackage(String packageName1, String packageName2) { public static int getUserId(int taskId, ShellTaskOrganizer taskOrganizer) {
return packageName1 != null && packageName1.equals(packageName2); final ActivityManager.RunningTaskInfo taskInfo = taskOrganizer.getRunningTaskInfo(taskId);
return taskInfo != null ? taskInfo.userId : -1;
}
/** Returns true if package names and user ids match. */
public static boolean samePackage(String packageName1, String packageName2,
int userId1, int userId2) {
return (packageName1 != null && packageName1.equals(packageName2)) && (userId1 == userId2);
} }
} }

View File

@@ -266,6 +266,7 @@ public class DragAndDropPolicy {
final boolean isShortcut = description.hasMimeType(MIMETYPE_APPLICATION_SHORTCUT); final boolean isShortcut = description.hasMimeType(MIMETYPE_APPLICATION_SHORTCUT);
final Bundle opts = intent.hasExtra(EXTRA_ACTIVITY_OPTIONS) final Bundle opts = intent.hasExtra(EXTRA_ACTIVITY_OPTIONS)
? intent.getBundleExtra(EXTRA_ACTIVITY_OPTIONS) : new Bundle(); ? intent.getBundleExtra(EXTRA_ACTIVITY_OPTIONS) : new Bundle();
final UserHandle user = intent.getParcelableExtra(EXTRA_USER);
if (isTask) { if (isTask) {
final int taskId = intent.getIntExtra(EXTRA_TASK_ID, INVALID_TASK_ID); final int taskId = intent.getIntExtra(EXTRA_TASK_ID, INVALID_TASK_ID);
@@ -273,14 +274,14 @@ public class DragAndDropPolicy {
} else if (isShortcut) { } else if (isShortcut) {
final String packageName = intent.getStringExtra(EXTRA_PACKAGE_NAME); final String packageName = intent.getStringExtra(EXTRA_PACKAGE_NAME);
final String id = intent.getStringExtra(EXTRA_SHORTCUT_ID); final String id = intent.getStringExtra(EXTRA_SHORTCUT_ID);
final UserHandle user = intent.getParcelableExtra(EXTRA_USER);
mStarter.startShortcut(packageName, id, position, opts, user); mStarter.startShortcut(packageName, id, position, opts, user);
} else { } else {
final PendingIntent launchIntent = intent.getParcelableExtra(EXTRA_PENDING_INTENT); final PendingIntent launchIntent = intent.getParcelableExtra(EXTRA_PENDING_INTENT);
// Put BAL flags to avoid activity start aborted. // Put BAL flags to avoid activity start aborted.
opts.putBoolean(KEY_PENDING_INTENT_BACKGROUND_ACTIVITY_ALLOWED, true); opts.putBoolean(KEY_PENDING_INTENT_BACKGROUND_ACTIVITY_ALLOWED, true);
opts.putBoolean(KEY_PENDING_INTENT_BACKGROUND_ACTIVITY_ALLOWED_BY_PERMISSION, true); opts.putBoolean(KEY_PENDING_INTENT_BACKGROUND_ACTIVITY_ALLOWED_BY_PERMISSION, true);
mStarter.startIntent(launchIntent, null /* fillIntent */, position, opts); mStarter.startIntent(launchIntent, user.getIdentifier(), null /* fillIntent */,
position, opts);
} }
} }
@@ -334,8 +335,8 @@ public class DragAndDropPolicy {
void startTask(int taskId, @SplitPosition int position, @Nullable Bundle options); void startTask(int taskId, @SplitPosition int position, @Nullable Bundle options);
void startShortcut(String packageName, String shortcutId, @SplitPosition int position, void startShortcut(String packageName, String shortcutId, @SplitPosition int position,
@Nullable Bundle options, UserHandle user); @Nullable Bundle options, UserHandle user);
void startIntent(PendingIntent intent, Intent fillInIntent, @SplitPosition int position, void startIntent(PendingIntent intent, int userId, Intent fillInIntent,
@Nullable Bundle options); @SplitPosition int position, @Nullable Bundle options);
void enterSplitScreen(int taskId, boolean leftOrTop); void enterSplitScreen(int taskId, boolean leftOrTop);
/** /**
@@ -379,8 +380,8 @@ public class DragAndDropPolicy {
} }
@Override @Override
public void startIntent(PendingIntent intent, @Nullable Intent fillInIntent, int position, public void startIntent(PendingIntent intent, int userId, @Nullable Intent fillInIntent,
@Nullable Bundle options) { int position, @Nullable Bundle options) {
try { try {
intent.send(mContext, 0, fillInIntent, null, null, null, options); intent.send(mContext, 0, fillInIntent, null, null, null, options);
} catch (PendingIntent.CanceledException e) { } catch (PendingIntent.CanceledException e) {

View File

@@ -73,8 +73,8 @@ interface ISplitScreen {
/** /**
* Starts an activity in a stage. * Starts an activity in a stage.
*/ */
oneway void startIntent(in PendingIntent intent, in Intent fillInIntent, int position, oneway void startIntent(in PendingIntent intent, int userId, in Intent fillInIntent,
in Bundle options, in InstanceId instanceId) = 9; int position, in Bundle options, in InstanceId instanceId) = 9;
/** /**
* Starts tasks simultaneously in one transition. * Starts tasks simultaneously in one transition.
@@ -86,8 +86,8 @@ interface ISplitScreen {
/** /**
* Starts a pair of intent and task in one transition. * Starts a pair of intent and task in one transition.
*/ */
oneway void startIntentAndTask(in PendingIntent pendingIntent, in Bundle options1, int taskId, oneway void startIntentAndTask(in PendingIntent pendingIntent, int userId1, in Bundle options1,
in Bundle options2, int sidePosition, float splitRatio, int taskId, in Bundle options2, int sidePosition, float splitRatio,
in RemoteTransition remoteTransition, in InstanceId instanceId) = 16; in RemoteTransition remoteTransition, in InstanceId instanceId) = 16;
/** /**
@@ -107,7 +107,7 @@ interface ISplitScreen {
/** /**
* Starts a pair of intent and task using legacy transition system. * Starts a pair of intent and task using legacy transition system.
*/ */
oneway void startIntentAndTaskWithLegacyTransition(in PendingIntent pendingIntent, oneway void startIntentAndTaskWithLegacyTransition(in PendingIntent pendingIntent, int userId1,
in Bundle options1, int taskId, in Bundle options2, int splitPosition, float splitRatio, in Bundle options1, int taskId, in Bundle options2, int splitPosition, float splitRatio,
in RemoteAnimationAdapter adapter, in InstanceId instanceId) = 12; in RemoteAnimationAdapter adapter, in InstanceId instanceId) = 12;
@@ -121,18 +121,18 @@ interface ISplitScreen {
/** /**
* Start a pair of intents using legacy transition system. * Start a pair of intents using legacy transition system.
*/ */
oneway void startIntentsWithLegacyTransition(in PendingIntent pendingIntent1, oneway void startIntentsWithLegacyTransition(in PendingIntent pendingIntent1, int userId1,
in ShortcutInfo shortcutInfo1, in Bundle options1, in PendingIntent pendingIntent2, in ShortcutInfo shortcutInfo1, in Bundle options1, in PendingIntent pendingIntent2,
in ShortcutInfo shortcutInfo2, in Bundle options2, int splitPosition, float splitRatio, int userId2, in ShortcutInfo shortcutInfo2, in Bundle options2, int splitPosition,
in RemoteAnimationAdapter adapter, in InstanceId instanceId) = 18; float splitRatio, in RemoteAnimationAdapter adapter, in InstanceId instanceId) = 18;
/** /**
* Start a pair of intents in one transition. * Start a pair of intents in one transition.
*/ */
oneway void startIntents(in PendingIntent pendingIntent1, in ShortcutInfo shortcutInfo1, oneway void startIntents(in PendingIntent pendingIntent1, int userId1,
in Bundle options1, in PendingIntent pendingIntent2, in ShortcutInfo shortcutInfo2, in ShortcutInfo shortcutInfo1, in Bundle options1, in PendingIntent pendingIntent2,
in Bundle options2, int splitPosition, float splitRatio, int userId2, in ShortcutInfo shortcutInfo2, in Bundle options2, int splitPosition,
in RemoteTransition remoteTransition, in InstanceId instanceId) = 19; float splitRatio, in RemoteTransition remoteTransition, in InstanceId instanceId) = 19;
/** /**
* Blocking call that notifies and gets additional split-screen targets when entering * Blocking call that notifies and gets additional split-screen targets when entering

View File

@@ -502,7 +502,8 @@ public class SplitScreenController implements DragAndDropPolicy.Starter,
if (options == null) options = new Bundle(); if (options == null) options = new Bundle();
final ActivityOptions activityOptions = ActivityOptions.fromBundle(options); final ActivityOptions activityOptions = ActivityOptions.fromBundle(options);
if (samePackage(packageName, getPackageName(reverseSplitPosition(position)))) { if (samePackage(packageName, getPackageName(reverseSplitPosition(position)),
user.getIdentifier(), getUserId(reverseSplitPosition(position)))) {
if (supportMultiInstancesSplit(packageName)) { if (supportMultiInstancesSplit(packageName)) {
activityOptions.setApplyMultipleTaskFlagForShortcut(true); activityOptions.setApplyMultipleTaskFlagForShortcut(true);
ProtoLog.v(ShellProtoLogGroup.WM_SHELL_SPLIT_SCREEN, "Adding MULTIPLE_TASK"); ProtoLog.v(ShellProtoLogGroup.WM_SHELL_SPLIT_SCREEN, "Adding MULTIPLE_TASK");
@@ -531,7 +532,9 @@ public class SplitScreenController implements DragAndDropPolicy.Starter,
final String packageName1 = shortcutInfo.getPackage(); final String packageName1 = shortcutInfo.getPackage();
final String packageName2 = SplitScreenUtils.getPackageName(taskId, mTaskOrganizer); final String packageName2 = SplitScreenUtils.getPackageName(taskId, mTaskOrganizer);
if (samePackage(packageName1, packageName2)) { final int userId1 = shortcutInfo.getUserId();
final int userId2 = SplitScreenUtils.getUserId(taskId, mTaskOrganizer);
if (samePackage(packageName1, packageName2, userId1, userId2)) {
if (supportMultiInstancesSplit(shortcutInfo.getPackage())) { if (supportMultiInstancesSplit(shortcutInfo.getPackage())) {
activityOptions.setApplyMultipleTaskFlagForShortcut(true); activityOptions.setApplyMultipleTaskFlagForShortcut(true);
ProtoLog.v(ShellProtoLogGroup.WM_SHELL_SPLIT_SCREEN, "Adding MULTIPLE_TASK"); ProtoLog.v(ShellProtoLogGroup.WM_SHELL_SPLIT_SCREEN, "Adding MULTIPLE_TASK");
@@ -558,7 +561,9 @@ public class SplitScreenController implements DragAndDropPolicy.Starter,
// NOTE: This doesn't correctly pull out packageName2 if taskId is referring to a task in // NOTE: This doesn't correctly pull out packageName2 if taskId is referring to a task in
// recents that hasn't launched and is not being organized // recents that hasn't launched and is not being organized
final String packageName2 = SplitScreenUtils.getPackageName(taskId, mTaskOrganizer); final String packageName2 = SplitScreenUtils.getPackageName(taskId, mTaskOrganizer);
if (samePackage(packageName1, packageName2)) { final int userId1 = shortcutInfo.getUserId();
final int userId2 = SplitScreenUtils.getUserId(taskId, mTaskOrganizer);
if (samePackage(packageName1, packageName2, userId1, userId2)) {
if (supportMultiInstancesSplit(packageName1)) { if (supportMultiInstancesSplit(packageName1)) {
activityOptions.setApplyMultipleTaskFlagForShortcut(true); activityOptions.setApplyMultipleTaskFlagForShortcut(true);
ProtoLog.v(ShellProtoLogGroup.WM_SHELL_SPLIT_SCREEN, "Adding MULTIPLE_TASK"); ProtoLog.v(ShellProtoLogGroup.WM_SHELL_SPLIT_SCREEN, "Adding MULTIPLE_TASK");
@@ -578,23 +583,24 @@ public class SplitScreenController implements DragAndDropPolicy.Starter,
} }
/** /**
* See {@link #startIntent(PendingIntent, Intent, int, Bundle)} * See {@link #startIntent(PendingIntent, int, Intent, int, Bundle)}
* @param instanceId to be used by {@link SplitscreenEventLogger} * @param instanceId to be used by {@link SplitscreenEventLogger}
*/ */
public void startIntent(PendingIntent intent, @Nullable Intent fillInIntent, public void startIntent(PendingIntent intent, int userId, @Nullable Intent fillInIntent,
@SplitPosition int position, @Nullable Bundle options, @NonNull InstanceId instanceId) { @SplitPosition int position, @Nullable Bundle options, @NonNull InstanceId instanceId) {
mStageCoordinator.onRequestToSplit(instanceId, ENTER_REASON_LAUNCHER); mStageCoordinator.onRequestToSplit(instanceId, ENTER_REASON_LAUNCHER);
startIntent(intent, fillInIntent, position, options); startIntent(intent, userId, fillInIntent, position, options);
} }
private void startIntentAndTaskWithLegacyTransition(PendingIntent pendingIntent, private void startIntentAndTaskWithLegacyTransition(PendingIntent pendingIntent, int userId1,
@Nullable Bundle options1, int taskId, @Nullable Bundle options2, @Nullable Bundle options1, int taskId, @Nullable Bundle options2,
@SplitPosition int splitPosition, float splitRatio, RemoteAnimationAdapter adapter, @SplitPosition int splitPosition, float splitRatio, RemoteAnimationAdapter adapter,
InstanceId instanceId) { InstanceId instanceId) {
Intent fillInIntent = null; Intent fillInIntent = null;
final String packageName1 = SplitScreenUtils.getPackageName(pendingIntent); final String packageName1 = SplitScreenUtils.getPackageName(pendingIntent);
final String packageName2 = SplitScreenUtils.getPackageName(taskId, mTaskOrganizer); final String packageName2 = SplitScreenUtils.getPackageName(taskId, mTaskOrganizer);
if (samePackage(packageName1, packageName2)) { final int userId2 = SplitScreenUtils.getUserId(taskId, mTaskOrganizer);
if (samePackage(packageName1, packageName2, userId1, userId2)) {
if (supportMultiInstancesSplit(packageName1)) { if (supportMultiInstancesSplit(packageName1)) {
fillInIntent = new Intent(); fillInIntent = new Intent();
fillInIntent.addFlags(FLAG_ACTIVITY_MULTIPLE_TASK); fillInIntent.addFlags(FLAG_ACTIVITY_MULTIPLE_TASK);
@@ -611,15 +617,17 @@ public class SplitScreenController implements DragAndDropPolicy.Starter,
options1, taskId, options2, splitPosition, splitRatio, adapter, instanceId); options1, taskId, options2, splitPosition, splitRatio, adapter, instanceId);
} }
private void startIntentAndTask(PendingIntent pendingIntent, @Nullable Bundle options1, private void startIntentAndTask(PendingIntent pendingIntent, int userId1,
int taskId, @Nullable Bundle options2, @SplitPosition int splitPosition, @Nullable Bundle options1, int taskId, @Nullable Bundle options2,
float splitRatio, @Nullable RemoteTransition remoteTransition, InstanceId instanceId) { @SplitPosition int splitPosition, float splitRatio,
@Nullable RemoteTransition remoteTransition, InstanceId instanceId) {
Intent fillInIntent = null; Intent fillInIntent = null;
final String packageName1 = SplitScreenUtils.getPackageName(pendingIntent); final String packageName1 = SplitScreenUtils.getPackageName(pendingIntent);
// NOTE: This doesn't correctly pull out packageName2 if taskId is referring to a task in // NOTE: This doesn't correctly pull out packageName2 if taskId is referring to a task in
// recents that hasn't launched and is not being organized // recents that hasn't launched and is not being organized
final String packageName2 = SplitScreenUtils.getPackageName(taskId, mTaskOrganizer); final String packageName2 = SplitScreenUtils.getPackageName(taskId, mTaskOrganizer);
if (samePackage(packageName1, packageName2)) { final int userId2 = SplitScreenUtils.getUserId(taskId, mTaskOrganizer);
if (samePackage(packageName1, packageName2, userId1, userId2)) {
if (supportMultiInstancesSplit(packageName1)) { if (supportMultiInstancesSplit(packageName1)) {
fillInIntent = new Intent(); fillInIntent = new Intent();
fillInIntent.addFlags(FLAG_ACTIVITY_MULTIPLE_TASK); fillInIntent.addFlags(FLAG_ACTIVITY_MULTIPLE_TASK);
@@ -639,16 +647,16 @@ public class SplitScreenController implements DragAndDropPolicy.Starter,
options2, splitPosition, splitRatio, remoteTransition, instanceId); options2, splitPosition, splitRatio, remoteTransition, instanceId);
} }
private void startIntentsWithLegacyTransition(PendingIntent pendingIntent1, private void startIntentsWithLegacyTransition(PendingIntent pendingIntent1, int userId1,
@Nullable ShortcutInfo shortcutInfo1, @Nullable Bundle options1, @Nullable ShortcutInfo shortcutInfo1, @Nullable Bundle options1,
PendingIntent pendingIntent2, @Nullable ShortcutInfo shortcutInfo2, PendingIntent pendingIntent2, int userId2, @Nullable ShortcutInfo shortcutInfo2,
@Nullable Bundle options2, @SplitPosition int splitPosition, float splitRatio, @Nullable Bundle options2, @SplitPosition int splitPosition, float splitRatio,
RemoteAnimationAdapter adapter, InstanceId instanceId) { RemoteAnimationAdapter adapter, InstanceId instanceId) {
Intent fillInIntent1 = null; Intent fillInIntent1 = null;
Intent fillInIntent2 = null; Intent fillInIntent2 = null;
final String packageName1 = SplitScreenUtils.getPackageName(pendingIntent1); final String packageName1 = SplitScreenUtils.getPackageName(pendingIntent1);
final String packageName2 = SplitScreenUtils.getPackageName(pendingIntent2); final String packageName2 = SplitScreenUtils.getPackageName(pendingIntent2);
if (samePackage(packageName1, packageName2)) { if (samePackage(packageName1, packageName2, userId1, userId2)) {
if (supportMultiInstancesSplit(packageName1)) { if (supportMultiInstancesSplit(packageName1)) {
fillInIntent1 = new Intent(); fillInIntent1 = new Intent();
fillInIntent1.addFlags(FLAG_ACTIVITY_MULTIPLE_TASK); fillInIntent1.addFlags(FLAG_ACTIVITY_MULTIPLE_TASK);
@@ -668,16 +676,16 @@ public class SplitScreenController implements DragAndDropPolicy.Starter,
splitPosition, splitRatio, adapter, instanceId); splitPosition, splitRatio, adapter, instanceId);
} }
private void startIntents(PendingIntent pendingIntent1, private void startIntents(PendingIntent pendingIntent1, int userId1,
@Nullable ShortcutInfo shortcutInfo1, @Nullable Bundle options1, @Nullable ShortcutInfo shortcutInfo1, @Nullable Bundle options1,
PendingIntent pendingIntent2, @Nullable ShortcutInfo shortcutInfo2, PendingIntent pendingIntent2, int userId2, @Nullable ShortcutInfo shortcutInfo2,
@Nullable Bundle options2, @SplitPosition int splitPosition, float splitRatio, @Nullable Bundle options2, @SplitPosition int splitPosition, float splitRatio,
@Nullable RemoteTransition remoteTransition, InstanceId instanceId) { @Nullable RemoteTransition remoteTransition, InstanceId instanceId) {
Intent fillInIntent1 = null; Intent fillInIntent1 = null;
Intent fillInIntent2 = null; Intent fillInIntent2 = null;
final String packageName1 = SplitScreenUtils.getPackageName(pendingIntent1); final String packageName1 = SplitScreenUtils.getPackageName(pendingIntent1);
final String packageName2 = SplitScreenUtils.getPackageName(pendingIntent2); final String packageName2 = SplitScreenUtils.getPackageName(pendingIntent2);
if (samePackage(packageName1, packageName2)) { if (samePackage(packageName1, packageName2, userId1, userId2)) {
if (supportMultiInstancesSplit(packageName1)) { if (supportMultiInstancesSplit(packageName1)) {
fillInIntent1 = new Intent(); fillInIntent1 = new Intent();
fillInIntent1.addFlags(FLAG_ACTIVITY_MULTIPLE_TASK); fillInIntent1.addFlags(FLAG_ACTIVITY_MULTIPLE_TASK);
@@ -698,7 +706,7 @@ public class SplitScreenController implements DragAndDropPolicy.Starter,
} }
@Override @Override
public void startIntent(PendingIntent intent, @Nullable Intent fillInIntent, public void startIntent(PendingIntent intent, int userId1, @Nullable Intent fillInIntent,
@SplitPosition int position, @Nullable Bundle options) { @SplitPosition int position, @Nullable Bundle options) {
// Flag this as a no-user-action launch to prevent sending user leaving event to the current // Flag this as a no-user-action launch to prevent sending user leaving event to the current
// top activity since it's going to be put into another side of the split. This prevents the // top activity since it's going to be put into another side of the split. This prevents the
@@ -708,7 +716,8 @@ public class SplitScreenController implements DragAndDropPolicy.Starter,
final String packageName1 = SplitScreenUtils.getPackageName(intent); final String packageName1 = SplitScreenUtils.getPackageName(intent);
final String packageName2 = getPackageName(reverseSplitPosition(position)); final String packageName2 = getPackageName(reverseSplitPosition(position));
if (SplitScreenUtils.samePackage(packageName1, packageName2)) { final int userId2 = getUserId(reverseSplitPosition(position));
if (samePackage(packageName1, packageName2, userId1, userId2)) {
if (supportMultiInstancesSplit(packageName1)) { if (supportMultiInstancesSplit(packageName1)) {
// To prevent accumulating large number of instances in the background, reuse task // To prevent accumulating large number of instances in the background, reuse task
// in the background with priority. // in the background with priority.
@@ -761,6 +770,24 @@ public class SplitScreenController implements DragAndDropPolicy.Starter,
return taskInfo != null ? SplitScreenUtils.getPackageName(taskInfo.baseIntent) : null; return taskInfo != null ? SplitScreenUtils.getPackageName(taskInfo.baseIntent) : null;
} }
/** Retrieve user id of a specific split position if split screen is activated, otherwise
* returns the user id of the top running task. */
private int getUserId(@SplitPosition int position) {
ActivityManager.RunningTaskInfo taskInfo;
if (isSplitScreenVisible()) {
taskInfo = getTaskInfo(position);
} else {
taskInfo = mRecentTasksOptional
.map(recentTasks -> recentTasks.getTopRunningTask())
.orElse(null);
if (!isValidToSplit(taskInfo)) {
return -1;
}
}
return taskInfo != null ? taskInfo.userId : -1;
}
@VisibleForTesting @VisibleForTesting
boolean supportMultiInstancesSplit(String packageName) { boolean supportMultiInstancesSplit(String packageName) {
if (packageName != null) { if (packageName != null) {
@@ -1069,14 +1096,14 @@ public class SplitScreenController implements DragAndDropPolicy.Starter,
} }
@Override @Override
public void startIntentAndTaskWithLegacyTransition(PendingIntent pendingIntent, public void startIntentAndTaskWithLegacyTransition(PendingIntent pendingIntent, int userId1,
Bundle options1, int taskId, Bundle options2, int splitPosition, float splitRatio, Bundle options1, int taskId, Bundle options2, int splitPosition, float splitRatio,
RemoteAnimationAdapter adapter, InstanceId instanceId) { RemoteAnimationAdapter adapter, InstanceId instanceId) {
executeRemoteCallWithTaskPermission(mController, executeRemoteCallWithTaskPermission(mController,
"startIntentAndTaskWithLegacyTransition", (controller) -> "startIntentAndTaskWithLegacyTransition", (controller) ->
controller.startIntentAndTaskWithLegacyTransition(pendingIntent, controller.startIntentAndTaskWithLegacyTransition(pendingIntent,
options1, taskId, options2, splitPosition, splitRatio, adapter, userId1, options1, taskId, options2, splitPosition, splitRatio,
instanceId)); adapter, instanceId));
} }
@Override @Override
@@ -1102,13 +1129,14 @@ public class SplitScreenController implements DragAndDropPolicy.Starter,
} }
@Override @Override
public void startIntentAndTask(PendingIntent pendingIntent, @Nullable Bundle options1, public void startIntentAndTask(PendingIntent pendingIntent, int userId1,
int taskId, @Nullable Bundle options2, @SplitPosition int splitPosition, @Nullable Bundle options1, int taskId, @Nullable Bundle options2,
float splitRatio, @Nullable RemoteTransition remoteTransition, @SplitPosition int splitPosition, float splitRatio,
InstanceId instanceId) { @Nullable RemoteTransition remoteTransition, InstanceId instanceId) {
executeRemoteCallWithTaskPermission(mController, "startIntentAndTask", executeRemoteCallWithTaskPermission(mController, "startIntentAndTask",
(controller) -> controller.startIntentAndTask(pendingIntent, options1, taskId, (controller) -> controller.startIntentAndTask(pendingIntent, userId1, options1,
options2, splitPosition, splitRatio, remoteTransition, instanceId)); taskId, options2, splitPosition, splitRatio, remoteTransition,
instanceId));
} }
@Override @Override
@@ -1122,29 +1150,29 @@ public class SplitScreenController implements DragAndDropPolicy.Starter,
} }
@Override @Override
public void startIntentsWithLegacyTransition(PendingIntent pendingIntent1, public void startIntentsWithLegacyTransition(PendingIntent pendingIntent1, int userId1,
@Nullable ShortcutInfo shortcutInfo1, @Nullable Bundle options1, @Nullable ShortcutInfo shortcutInfo1, @Nullable Bundle options1,
PendingIntent pendingIntent2, @Nullable ShortcutInfo shortcutInfo2, PendingIntent pendingIntent2, int userId2, @Nullable ShortcutInfo shortcutInfo2,
@Nullable Bundle options2, @SplitPosition int splitPosition, float splitRatio, @Nullable Bundle options2, @SplitPosition int splitPosition, float splitRatio,
RemoteAnimationAdapter adapter, InstanceId instanceId) { RemoteAnimationAdapter adapter, InstanceId instanceId) {
executeRemoteCallWithTaskPermission(mController, "startIntentsWithLegacyTransition", executeRemoteCallWithTaskPermission(mController, "startIntentsWithLegacyTransition",
(controller) -> (controller) ->
controller.startIntentsWithLegacyTransition(pendingIntent1, shortcutInfo1, controller.startIntentsWithLegacyTransition(pendingIntent1, userId1,
options1, pendingIntent2, shortcutInfo2, options2, splitPosition, shortcutInfo1, options1, pendingIntent2, userId2, shortcutInfo2,
splitRatio, adapter, instanceId) options2, splitPosition, splitRatio, adapter, instanceId)
); );
} }
@Override @Override
public void startIntents(PendingIntent pendingIntent1, @Nullable ShortcutInfo shortcutInfo1, public void startIntents(PendingIntent pendingIntent1, int userId1,
@Nullable Bundle options1, PendingIntent pendingIntent2, @Nullable ShortcutInfo shortcutInfo1, @Nullable Bundle options1,
@Nullable ShortcutInfo shortcutInfo2, @Nullable Bundle options2, PendingIntent pendingIntent2, int userId2, @Nullable ShortcutInfo shortcutInfo2,
@SplitPosition int splitPosition, float splitRatio, @Nullable Bundle options2, @SplitPosition int splitPosition, float splitRatio,
@Nullable RemoteTransition remoteTransition, InstanceId instanceId) { @Nullable RemoteTransition remoteTransition, InstanceId instanceId) {
executeRemoteCallWithTaskPermission(mController, "startIntents", executeRemoteCallWithTaskPermission(mController, "startIntents",
(controller) -> (controller) ->
controller.startIntents(pendingIntent1, shortcutInfo1, controller.startIntents(pendingIntent1, userId1, shortcutInfo1,
options1, pendingIntent2, shortcutInfo2, options2, options1, pendingIntent2, userId2, shortcutInfo2, options2,
splitPosition, splitRatio, remoteTransition, instanceId) splitPosition, splitRatio, remoteTransition, instanceId)
); );
} }
@@ -1158,11 +1186,11 @@ public class SplitScreenController implements DragAndDropPolicy.Starter,
} }
@Override @Override
public void startIntent(PendingIntent intent, Intent fillInIntent, int position, public void startIntent(PendingIntent intent, int userId, Intent fillInIntent, int position,
@Nullable Bundle options, InstanceId instanceId) { @Nullable Bundle options, InstanceId instanceId) {
executeRemoteCallWithTaskPermission(mController, "startIntent", executeRemoteCallWithTaskPermission(mController, "startIntent",
(controller) -> controller.startIntent(intent, fillInIntent, position, options, (controller) -> controller.startIntent(intent, userId, fillInIntent, position,
instanceId)); options, instanceId));
} }
@Override @Override

View File

@@ -211,7 +211,7 @@ public class DragAndDropPolicyTest extends ShellTestCase {
mPolicy.getTargets(mInsets), TYPE_FULLSCREEN); mPolicy.getTargets(mInsets), TYPE_FULLSCREEN);
mPolicy.handleDrop(filterTargetByType(targets, TYPE_FULLSCREEN), mActivityClipData); mPolicy.handleDrop(filterTargetByType(targets, TYPE_FULLSCREEN), mActivityClipData);
verify(mSplitScreenStarter).startIntent(any(), any(), verify(mSplitScreenStarter).startIntent(any(), anyInt(), any(),
eq(SPLIT_POSITION_UNDEFINED), any()); eq(SPLIT_POSITION_UNDEFINED), any());
} }
@@ -223,12 +223,12 @@ public class DragAndDropPolicyTest extends ShellTestCase {
mPolicy.getTargets(mInsets), TYPE_SPLIT_LEFT, TYPE_SPLIT_RIGHT); mPolicy.getTargets(mInsets), TYPE_SPLIT_LEFT, TYPE_SPLIT_RIGHT);
mPolicy.handleDrop(filterTargetByType(targets, TYPE_SPLIT_LEFT), mActivityClipData); mPolicy.handleDrop(filterTargetByType(targets, TYPE_SPLIT_LEFT), mActivityClipData);
verify(mSplitScreenStarter).startIntent(any(), any(), verify(mSplitScreenStarter).startIntent(any(), anyInt(), any(),
eq(SPLIT_POSITION_TOP_OR_LEFT), any()); eq(SPLIT_POSITION_TOP_OR_LEFT), any());
reset(mSplitScreenStarter); reset(mSplitScreenStarter);
mPolicy.handleDrop(filterTargetByType(targets, TYPE_SPLIT_RIGHT), mActivityClipData); mPolicy.handleDrop(filterTargetByType(targets, TYPE_SPLIT_RIGHT), mActivityClipData);
verify(mSplitScreenStarter).startIntent(any(), any(), verify(mSplitScreenStarter).startIntent(any(), anyInt(), any(),
eq(SPLIT_POSITION_BOTTOM_OR_RIGHT), any()); eq(SPLIT_POSITION_BOTTOM_OR_RIGHT), any());
} }
@@ -240,12 +240,12 @@ public class DragAndDropPolicyTest extends ShellTestCase {
mPolicy.getTargets(mInsets), TYPE_SPLIT_TOP, TYPE_SPLIT_BOTTOM); mPolicy.getTargets(mInsets), TYPE_SPLIT_TOP, TYPE_SPLIT_BOTTOM);
mPolicy.handleDrop(filterTargetByType(targets, TYPE_SPLIT_TOP), mActivityClipData); mPolicy.handleDrop(filterTargetByType(targets, TYPE_SPLIT_TOP), mActivityClipData);
verify(mSplitScreenStarter).startIntent(any(), any(), verify(mSplitScreenStarter).startIntent(any(), anyInt(), any(),
eq(SPLIT_POSITION_TOP_OR_LEFT), any()); eq(SPLIT_POSITION_TOP_OR_LEFT), any());
reset(mSplitScreenStarter); reset(mSplitScreenStarter);
mPolicy.handleDrop(filterTargetByType(targets, TYPE_SPLIT_BOTTOM), mActivityClipData); mPolicy.handleDrop(filterTargetByType(targets, TYPE_SPLIT_BOTTOM), mActivityClipData);
verify(mSplitScreenStarter).startIntent(any(), any(), verify(mSplitScreenStarter).startIntent(any(), anyInt(), any(),
eq(SPLIT_POSITION_BOTTOM_OR_RIGHT), any()); eq(SPLIT_POSITION_BOTTOM_OR_RIGHT), any());
} }

View File

@@ -181,7 +181,8 @@ public class SplitScreenControllerTests extends ShellTestCase {
PendingIntent pendingIntent = PendingIntent pendingIntent =
PendingIntent.getActivity(mContext, 0, startIntent, FLAG_IMMUTABLE); PendingIntent.getActivity(mContext, 0, startIntent, FLAG_IMMUTABLE);
mSplitScreenController.startIntent(pendingIntent, null, SPLIT_POSITION_TOP_OR_LEFT, null); mSplitScreenController.startIntent(pendingIntent, mContext.getUserId(), null,
SPLIT_POSITION_TOP_OR_LEFT, null);
verify(mStageCoordinator).startIntent(eq(pendingIntent), mIntentCaptor.capture(), verify(mStageCoordinator).startIntent(eq(pendingIntent), mIntentCaptor.capture(),
eq(SPLIT_POSITION_TOP_OR_LEFT), isNull()); eq(SPLIT_POSITION_TOP_OR_LEFT), isNull());
@@ -200,7 +201,8 @@ public class SplitScreenControllerTests extends ShellTestCase {
createTaskInfo(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, startIntent); createTaskInfo(WINDOWING_MODE_FULLSCREEN, ACTIVITY_TYPE_STANDARD, startIntent);
doReturn(topRunningTask).when(mRecentTasks).getTopRunningTask(); doReturn(topRunningTask).when(mRecentTasks).getTopRunningTask();
mSplitScreenController.startIntent(pendingIntent, null, SPLIT_POSITION_TOP_OR_LEFT, null); mSplitScreenController.startIntent(pendingIntent, mContext.getUserId(), null,
SPLIT_POSITION_TOP_OR_LEFT, null);
verify(mStageCoordinator).startIntent(eq(pendingIntent), mIntentCaptor.capture(), verify(mStageCoordinator).startIntent(eq(pendingIntent), mIntentCaptor.capture(),
eq(SPLIT_POSITION_TOP_OR_LEFT), isNull()); eq(SPLIT_POSITION_TOP_OR_LEFT), isNull());
@@ -223,7 +225,8 @@ public class SplitScreenControllerTests extends ShellTestCase {
ActivityManager.RecentTaskInfo sameTaskInfo = new ActivityManager.RecentTaskInfo(); ActivityManager.RecentTaskInfo sameTaskInfo = new ActivityManager.RecentTaskInfo();
doReturn(sameTaskInfo).when(mRecentTasks).findTaskInBackground(any()); doReturn(sameTaskInfo).when(mRecentTasks).findTaskInBackground(any());
mSplitScreenController.startIntent(pendingIntent, null, SPLIT_POSITION_TOP_OR_LEFT, null); mSplitScreenController.startIntent(pendingIntent, mContext.getUserId(), null,
SPLIT_POSITION_TOP_OR_LEFT, null);
verify(mSplitScreenController).startTask(anyInt(), eq(SPLIT_POSITION_TOP_OR_LEFT), verify(mSplitScreenController).startTask(anyInt(), eq(SPLIT_POSITION_TOP_OR_LEFT),
isNull()); isNull());
@@ -246,7 +249,8 @@ public class SplitScreenControllerTests extends ShellTestCase {
doReturn(new ActivityManager.RecentTaskInfo()).when(mRecentTasks) doReturn(new ActivityManager.RecentTaskInfo()).when(mRecentTasks)
.findTaskInBackground(any()); .findTaskInBackground(any());
mSplitScreenController.startIntent(pendingIntent, null, SPLIT_POSITION_TOP_OR_LEFT, null); mSplitScreenController.startIntent(pendingIntent, mContext.getUserId(), null,
SPLIT_POSITION_TOP_OR_LEFT, null);
verify(mSplitScreenController).startTask(anyInt(), eq(SPLIT_POSITION_TOP_OR_LEFT), verify(mSplitScreenController).startTask(anyInt(), eq(SPLIT_POSITION_TOP_OR_LEFT),
isNull()); isNull());
@@ -265,7 +269,8 @@ public class SplitScreenControllerTests extends ShellTestCase {
doReturn(sameTaskInfo).when(mSplitScreenController).getTaskInfo( doReturn(sameTaskInfo).when(mSplitScreenController).getTaskInfo(
SPLIT_POSITION_BOTTOM_OR_RIGHT); SPLIT_POSITION_BOTTOM_OR_RIGHT);
mSplitScreenController.startIntent(pendingIntent, null, SPLIT_POSITION_TOP_OR_LEFT, null); mSplitScreenController.startIntent(pendingIntent, mContext.getUserId(), null,
SPLIT_POSITION_TOP_OR_LEFT, null);
verify(mStageCoordinator).switchSplitPosition(anyString()); verify(mStageCoordinator).switchSplitPosition(anyString());
} }