summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitscreenEventLogger.java4
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java31
2 files changed, 27 insertions, 8 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitscreenEventLogger.java b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitscreenEventLogger.java
index 033d743d8042..2dc4a0441b06 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitscreenEventLogger.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/SplitscreenEventLogger.java
@@ -87,6 +87,10 @@ public class SplitscreenEventLogger {
return mLoggerSessionId != null;
}
+ public boolean isEnterRequestedByDrag() {
+ return mEnterReason == ENTER_REASON_DRAG;
+ }
+
/**
* May be called before logEnter() to indicate that the session was started from a drag.
*/
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java
index a578caf90141..c17f8226c925 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/splitscreen/StageCoordinator.java
@@ -505,6 +505,12 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
final WindowContainerTransaction wct = new WindowContainerTransaction();
options = resolveStartStage(STAGE_TYPE_UNDEFINED, position, options, wct);
+ // If split still not active, apply windows bounds first to avoid surface reset to
+ // wrong pos by SurfaceAnimator from wms.
+ if (!mMainStage.isActive() && mLogger.isEnterRequestedByDrag()) {
+ updateWindowBounds(mSplitLayout, wct);
+ }
+
wct.sendPendingIntent(intent, fillInIntent, options);
mSyncQueue.queue(transition, WindowManager.TRANSIT_OPEN, wct);
}
@@ -1461,18 +1467,27 @@ public class StageCoordinator implements SplitLayout.SplitLayoutHandler,
}
}
} else if (isSideStage && hasChildren && !mMainStage.isActive()) {
- // TODO (b/238697912) : Add the validation to prevent entering non-recovered status
- onSplitScreenEnter();
final WindowContainerTransaction wct = new WindowContainerTransaction();
mSplitLayout.init();
- mSplitLayout.setDividerAtBorder(mSideStagePosition == SPLIT_POSITION_TOP_OR_LEFT);
- mMainStage.activate(wct, true /* includingTopTask */);
- updateWindowBounds(mSplitLayout, wct);
- wct.reorder(mRootTaskInfo.token, true);
- wct.setForceTranslucent(mRootTaskInfo.token, false);
+ if (mLogger.isEnterRequestedByDrag()) {
+ prepareEnterSplitScreen(wct);
+ } else {
+ // TODO (b/238697912) : Add the validation to prevent entering non-recovered status
+ onSplitScreenEnter();
+ mSplitLayout.setDividerAtBorder(mSideStagePosition == SPLIT_POSITION_TOP_OR_LEFT);
+ mMainStage.activate(wct, true /* includingTopTask */);
+ updateWindowBounds(mSplitLayout, wct);
+ wct.reorder(mRootTaskInfo.token, true);
+ wct.setForceTranslucent(mRootTaskInfo.token, false);
+ }
+
mSyncQueue.queue(wct);
mSyncQueue.runInSync(t -> {
- mSplitLayout.flingDividerToCenter();
+ if (mLogger.isEnterRequestedByDrag()) {
+ updateSurfaceBounds(mSplitLayout, t, false /* applyResizingOffset */);
+ } else {
+ mSplitLayout.flingDividerToCenter();
+ }
});
}
if (mMainStageListener.mHasChildren && mSideStageListener.mHasChildren) {