Loading libs/WindowManager/Shell/res/values/config.xml +3 −0 Original line number Diff line number Diff line Loading @@ -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> libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayController.java +5 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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()); Loading libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/MultiDisplayVeiledResizeTaskPositioner.kt +21 −4 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading @@ -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 { Loading Loading @@ -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, Loading Loading @@ -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, Loading Loading
libs/WindowManager/Shell/res/values/config.xml +3 −0 Original line number Diff line number Diff line Loading @@ -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>
libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayController.java +5 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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()); Loading
libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/MultiDisplayVeiledResizeTaskPositioner.kt +21 −4 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 Loading @@ -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 { Loading Loading @@ -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, Loading Loading @@ -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, Loading