diff options
| author | 2025-01-23 14:47:15 -0800 | |
|---|---|---|
| committer | 2025-01-23 14:47:15 -0800 | |
| commit | 2802b72fb11b142fc0b07bdbcb13384a65e22145 (patch) | |
| tree | 6b056ec7db2e4fa2030682d66292124e455331e4 | |
| parent | c7eaa6ee4287dbfb9d633cff4aaf31ffa36e3c91 (diff) | |
| parent | 9a0b58ce46a7d9ed4255d5a396369b9b34e5399c (diff) | |
Merge "Add a config to turn on window drag" into main
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 e69d60ddd6c6..ad11252364ce 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 @@ -37,6 +37,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; @@ -91,7 +92,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, |