summaryrefslogtreecommitdiff
path: root/libs
diff options
context:
space:
mode:
Diffstat (limited to 'libs')
-rw-r--r--libs/WindowManager/Shell/res/values/config.xml3
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayController.java6
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/MultiDisplayVeiledResizeTaskPositioner.kt25
3 files changed, 29 insertions, 5 deletions
diff --git a/libs/WindowManager/Shell/res/values/config.xml b/libs/WindowManager/Shell/res/values/config.xml
index 59e6c7786cb8..c38d459f64d3 100644
--- a/libs/WindowManager/Shell/res/values/config.xml
+++ b/libs/WindowManager/Shell/res/values/config.xml
@@ -188,4 +188,7 @@
<string-array name="desktop_windowing_app_handle_education_allowlist_apps"></string-array>
<!-- Apps that can trigger Desktop Windowing App-To-Web Education -->
<string-array name="desktop_windowing_app_to_web_education_allowlist_apps"></string-array>
+
+ <!-- Whether this device allows to drag windows across displays. -->
+ <bool name="config_enableConnectedDisplayWindowDrag">true</bool>
</resources>
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayController.java
index 72be066fc7a7..71f30f39136a 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayController.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayController.java
@@ -36,6 +36,7 @@ import android.window.WindowContainerTransaction;
import androidx.annotation.BinderThread;
import com.android.window.flags.Flags;
+import com.android.wm.shell.R;
import com.android.wm.shell.common.DisplayChangeController.OnDisplayChangingListener;
import com.android.wm.shell.shared.annotations.ShellMainThread;
import com.android.wm.shell.sysui.ShellInit;
@@ -87,7 +88,10 @@ public class DisplayController {
onDisplayAdded(displayIds[i]);
}
- if (Flags.enableConnectedDisplaysWindowDrag()) {
+ final boolean enableConnectedDisplayWindowDrag =
+ mContext.getResources()
+ .getBoolean(R.bool.config_enableConnectedDisplayWindowDrag);
+ if (Flags.enableConnectedDisplaysWindowDrag() && enableConnectedDisplayWindowDrag) {
mDisplayManager.registerTopologyListener(mMainExecutor,
this::onDisplayTopologyChanged);
onDisplayTopologyChanged(mDisplayManager.getDisplayTopology());
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/MultiDisplayVeiledResizeTaskPositioner.kt b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/MultiDisplayVeiledResizeTaskPositioner.kt
index 07496eb0e526..33f0432372d0 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/MultiDisplayVeiledResizeTaskPositioner.kt
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/MultiDisplayVeiledResizeTaskPositioner.kt
@@ -29,6 +29,7 @@ import android.window.TransitionRequestInfo
import android.window.WindowContainerTransaction
import com.android.internal.jank.Cuj
import com.android.internal.jank.InteractionJankMonitor
+import com.android.wm.shell.R
import com.android.wm.shell.ShellTaskOrganizer
import com.android.wm.shell.common.DisplayController
import com.android.wm.shell.common.MultiDisplayDragMoveBoundsCalculator
@@ -67,6 +68,8 @@ class MultiDisplayVeiledResizeTaskPositioner(
(ctrlType and DragPositioningCallback.CTRL_TYPE_LEFT) != 0 ||
(ctrlType and DragPositioningCallback.CTRL_TYPE_RIGHT) != 0
+ private val enableMultiDisplayWindowDrag: Boolean
+
@DragPositioningCallback.CtrlType private var ctrlType = 0
private var isResizingOrAnimatingResize = false
@Surface.Rotation private var rotation = 0
@@ -93,6 +96,10 @@ class MultiDisplayVeiledResizeTaskPositioner(
init {
dragEventListeners.add(dragEventListener)
+ enableMultiDisplayWindowDrag =
+ desktopWindowDecoration.mDecorWindowContext.resources.getBoolean(
+ R.bool.config_enableConnectedDisplayWindowDrag
+ )
}
override fun onDragPositioningStart(ctrlType: Int, displayId: Int, x: Float, y: Float): Rect {
@@ -168,8 +175,13 @@ class MultiDisplayVeiledResizeTaskPositioner(
val startDisplayLayout = displayController.getDisplayLayout(startDisplayId)
val currentDisplayLayout = displayController.getDisplayLayout(displayId)
- if (startDisplayLayout == null || currentDisplayLayout == null) {
- // Fall back to single-display drag behavior if any display layout is unavailable.
+ if (
+ startDisplayLayout == null ||
+ currentDisplayLayout == null ||
+ !enableMultiDisplayWindowDrag
+ ) {
+ // Fall back to single-display drag behavior if any display layout is unavailable or
+ // it's explicitly disabled.
DragPositioningCallbackUtility.setPositionOnDrag(
desktopWindowDecoration,
repositionTaskBounds,
@@ -237,8 +249,13 @@ class MultiDisplayVeiledResizeTaskPositioner(
val startDisplayLayout = displayController.getDisplayLayout(startDisplayId)
val currentDisplayLayout = displayController.getDisplayLayout(displayId)
- if (startDisplayLayout == null || currentDisplayLayout == null) {
- // Fall back to single-display drag behavior if any display layout is unavailable.
+ if (
+ startDisplayLayout == null ||
+ currentDisplayLayout == null ||
+ !enableMultiDisplayWindowDrag
+ ) {
+ // Fall back to single-display drag behavior if any display layout is unavailable or
+ // it's explicitly disabled.
DragPositioningCallbackUtility.updateTaskBounds(
repositionTaskBounds,
taskBoundsAtDragStart,