Merge "Fix not able to launch multi-instance with drag and drop gesture" into tm-qpr-dev am: 5e5d3a1544

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

Change-Id: I905c076c1703665b3958e8ba2ef8d4f2716a1d10
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Jerry Chang
2022-06-08 02:05:54 +00:00
committed by Automerger Merge Worker
3 changed files with 17 additions and 14 deletions

View File

@@ -67,6 +67,7 @@ import com.android.internal.logging.InstanceId;
import com.android.internal.protolog.common.ProtoLog; import com.android.internal.protolog.common.ProtoLog;
import com.android.wm.shell.R; import com.android.wm.shell.R;
import com.android.wm.shell.common.DisplayLayout; import com.android.wm.shell.common.DisplayLayout;
import com.android.wm.shell.common.split.SplitLayout;
import com.android.wm.shell.common.split.SplitScreenConstants.SplitPosition; import com.android.wm.shell.common.split.SplitScreenConstants.SplitPosition;
import com.android.wm.shell.protolog.ShellProtoLogGroup; import com.android.wm.shell.protolog.ShellProtoLogGroup;
import com.android.wm.shell.splitscreen.SplitScreenController; import com.android.wm.shell.splitscreen.SplitScreenController;
@@ -75,6 +76,7 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects;
/** /**
* The policy for handling drag and drop operations to shell. * The policy for handling drag and drop operations to shell.
@@ -289,18 +291,15 @@ public class DragAndDropPolicy {
final ComponentName currentActivity; final ComponentName currentActivity;
if (!inSplitScreen) { if (!inSplitScreen) {
currentActivity = mSession.runningTaskInfo != null currentActivity = mSession.runningTaskInfo != null
? mSession.runningTaskInfo.baseActivity ? mSession.runningTaskInfo.baseIntent.getComponent()
: null; : null;
} else { } else {
final int nonReplacedSplitPosition = position == SPLIT_POSITION_TOP_OR_LEFT final ActivityManager.RunningTaskInfo nonReplacedTaskInfo =
? SPLIT_POSITION_BOTTOM_OR_RIGHT mSplitScreen.getTaskInfo(SplitLayout.reversePosition(position));
: SPLIT_POSITION_TOP_OR_LEFT; currentActivity = nonReplacedTaskInfo.baseIntent.getComponent();
ActivityManager.RunningTaskInfo nonReplacedTaskInfo =
mSplitScreen.getTaskInfo(nonReplacedSplitPosition);
currentActivity = nonReplacedTaskInfo.baseActivity;
} }
if (currentActivity.equals(dragIntentActivity)) { if (Objects.equals(currentActivity, dragIntentActivity)) {
// Only apply MULTIPLE_TASK if we are dragging the same activity // Only apply MULTIPLE_TASK if we are dragging the same activity
final Intent fillInIntent = new Intent(); final Intent fillInIntent = new Intent();
fillInIntent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK); fillInIntent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);

View File

@@ -83,6 +83,7 @@ import java.io.PrintWriter;
import java.lang.annotation.Retention; import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy; import java.lang.annotation.RetentionPolicy;
import java.util.Arrays; import java.util.Arrays;
import java.util.Objects;
import java.util.Optional; import java.util.Optional;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
@@ -366,11 +367,12 @@ public class SplitScreenController implements DragAndDropPolicy.Starter,
if (apps == null || apps.length == 0) { if (apps == null || apps.length == 0) {
final ActivityManager.RunningTaskInfo pairedTaskInfo = final ActivityManager.RunningTaskInfo pairedTaskInfo =
getTaskInfo(SplitLayout.reversePosition(position)); getTaskInfo(SplitLayout.reversePosition(position));
final ComponentName pairedActivity = final ComponentName pairedActivity = pairedTaskInfo != null
pairedTaskInfo != null ? pairedTaskInfo.baseActivity : null; ? pairedTaskInfo.baseIntent.getComponent() : null;
final ComponentName intentActivity = final ComponentName intentActivity = intent.getIntent() != null
intent.getIntent() != null ? intent.getIntent().getComponent() : null; ? intent.getIntent().getComponent() : null;
if (pairedActivity != null && pairedActivity.equals(intentActivity)) {
if (Objects.equals(pairedActivity, intentActivity)) {
// Switch split position if dragging the same activity to another side. // Switch split position if dragging the same activity to another side.
setSideStagePosition(SplitLayout.reversePosition( setSideStagePosition(SplitLayout.reversePosition(
mStageCoordinator.getSideStagePosition())); mStageCoordinator.getSideStagePosition()));

View File

@@ -182,8 +182,10 @@ public class DragAndDropPolicyTest {
info.configuration.windowConfiguration.setActivityType(actType); info.configuration.windowConfiguration.setActivityType(actType);
info.configuration.windowConfiguration.setWindowingMode(winMode); info.configuration.windowConfiguration.setWindowingMode(winMode);
info.isResizeable = true; info.isResizeable = true;
info.baseActivity = new ComponentName(getInstrumentation().getContext().getPackageName(), info.baseActivity = new ComponentName(getInstrumentation().getContext(),
".ActivityWithMode" + winMode); ".ActivityWithMode" + winMode);
info.baseIntent = new Intent();
info.baseIntent.setComponent(info.baseActivity);
ActivityInfo activityInfo = new ActivityInfo(); ActivityInfo activityInfo = new ActivityInfo();
activityInfo.packageName = info.baseActivity.getPackageName(); activityInfo.packageName = info.baseActivity.getPackageName();
activityInfo.name = info.baseActivity.getClassName(); activityInfo.name = info.baseActivity.getClassName();