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

This commit is contained in:
Jerry Chang
2022-06-08 01:37:16 +00:00
committed by Android (Google) Code Review
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.wm.shell.R;
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.protolog.ShellProtoLogGroup;
import com.android.wm.shell.splitscreen.SplitScreenController;
@@ -75,6 +76,7 @@ import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
/**
* The policy for handling drag and drop operations to shell.
@@ -289,18 +291,15 @@ public class DragAndDropPolicy {
final ComponentName currentActivity;
if (!inSplitScreen) {
currentActivity = mSession.runningTaskInfo != null
? mSession.runningTaskInfo.baseActivity
? mSession.runningTaskInfo.baseIntent.getComponent()
: null;
} else {
final int nonReplacedSplitPosition = position == SPLIT_POSITION_TOP_OR_LEFT
? SPLIT_POSITION_BOTTOM_OR_RIGHT
: SPLIT_POSITION_TOP_OR_LEFT;
ActivityManager.RunningTaskInfo nonReplacedTaskInfo =
mSplitScreen.getTaskInfo(nonReplacedSplitPosition);
currentActivity = nonReplacedTaskInfo.baseActivity;
final ActivityManager.RunningTaskInfo nonReplacedTaskInfo =
mSplitScreen.getTaskInfo(SplitLayout.reversePosition(position));
currentActivity = nonReplacedTaskInfo.baseIntent.getComponent();
}
if (currentActivity.equals(dragIntentActivity)) {
if (Objects.equals(currentActivity, dragIntentActivity)) {
// Only apply MULTIPLE_TASK if we are dragging the same activity
final Intent fillInIntent = new Intent();
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.RetentionPolicy;
import java.util.Arrays;
import java.util.Objects;
import java.util.Optional;
import java.util.concurrent.Executor;
@@ -366,11 +367,12 @@ public class SplitScreenController implements DragAndDropPolicy.Starter,
if (apps == null || apps.length == 0) {
final ActivityManager.RunningTaskInfo pairedTaskInfo =
getTaskInfo(SplitLayout.reversePosition(position));
final ComponentName pairedActivity =
pairedTaskInfo != null ? pairedTaskInfo.baseActivity : null;
final ComponentName intentActivity =
intent.getIntent() != null ? intent.getIntent().getComponent() : null;
if (pairedActivity != null && pairedActivity.equals(intentActivity)) {
final ComponentName pairedActivity = pairedTaskInfo != null
? pairedTaskInfo.baseIntent.getComponent() : null;
final ComponentName intentActivity = intent.getIntent() != null
? intent.getIntent().getComponent() : null;
if (Objects.equals(pairedActivity, intentActivity)) {
// Switch split position if dragging the same activity to another side.
setSideStagePosition(SplitLayout.reversePosition(
mStageCoordinator.getSideStagePosition()));

View File

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