Loading libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java +42 −21 Original line number Diff line number Diff line Loading @@ -199,6 +199,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel { }); } }; private final TaskPositionerFactory mTaskPositionerFactory; public DesktopModeWindowDecorViewModel( Context context, Loading Loading @@ -250,7 +251,8 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel { new SparseArray<>(), interactionJankMonitor, desktopTasksLimiter, activityOrientationChangeHandler); activityOrientationChangeHandler, new TaskPositionerFactory()); } @VisibleForTesting Loading Loading @@ -280,7 +282,8 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel { SparseArray<DesktopModeWindowDecoration> windowDecorByTaskId, InteractionJankMonitor interactionJankMonitor, Optional<DesktopTasksLimiter> desktopTasksLimiter, Optional<DesktopActivityOrientationChangeHandler> activityOrientationChangeHandler) { Optional<DesktopActivityOrientationChangeHandler> activityOrientationChangeHandler, TaskPositionerFactory taskPositionerFactory) { mContext = context; mMainExecutor = shellExecutor; mMainHandler = mainHandler; Loading Loading @@ -335,6 +338,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel { } } }; mTaskPositionerFactory = taskPositionerFactory; shellInit.addInitCallback(this::onInit, this); } Loading Loading @@ -828,7 +832,10 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel { decoration.mTaskSurface, e.getRawX(dragPointerIdx), newTaskBounds); // Flip mIsDragging only if the bounds actually changed. if (mIsDragging || !newTaskBounds.equals(mOnDragStartInitialBounds)) { updateDragStatus(e.getActionMasked()); } return true; } case MotionEvent.ACTION_UP: Loading Loading @@ -1280,23 +1287,18 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel { mMultiInstanceHelper); mWindowDecorByTaskId.put(taskInfo.taskId, windowDecoration); final DragPositioningCallback dragPositioningCallback; if (!DesktopModeStatus.isVeiledResizeEnabled()) { dragPositioningCallback = new FluidResizeTaskPositioner( mTaskOrganizer, mTransitions, windowDecoration, mDisplayController, mDragStartListener, mTransactionFactory); windowDecoration.setTaskDragResizer( (FluidResizeTaskPositioner) dragPositioningCallback); } else { dragPositioningCallback = new VeiledResizeTaskPositioner( mTaskOrganizer, windowDecoration, mDisplayController, mDragStartListener, mTransitions, mInteractionJankMonitor); windowDecoration.setTaskDragResizer( (VeiledResizeTaskPositioner) dragPositioningCallback); } final TaskPositioner taskPositioner = mTaskPositionerFactory.create( mTaskOrganizer, windowDecoration, mDisplayController, mDragStartListener, mTransitions, mInteractionJankMonitor, mTransactionFactory); windowDecoration.setTaskDragResizer(taskPositioner); final DesktopModeTouchEventListener touchEventListener = new DesktopModeTouchEventListener(taskInfo, dragPositioningCallback); new DesktopModeTouchEventListener(taskInfo, taskPositioner); windowDecoration.setOnMaximizeOrRestoreClickListener(() -> { onMaximizeOrRestore(taskInfo.taskId, "maximize_menu"); return Unit.INSTANCE; Loading Loading @@ -1330,7 +1332,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel { windowDecoration.setCaptionListeners( touchEventListener, touchEventListener, touchEventListener, touchEventListener); windowDecoration.setExclusionRegionListener(mExclusionRegionListener); windowDecoration.setDragPositioningCallback(dragPositioningCallback); windowDecoration.setDragPositioningCallback(taskPositioner); windowDecoration.setDragDetector(touchEventListener.mDragDetector); windowDecoration.relayout(taskInfo, startT, finishT, false /* applyStartTransactionOnDraw */, false /* shouldSetTaskPositionAndCrop */); Loading Loading @@ -1479,6 +1481,25 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel { } } } } @VisibleForTesting static class TaskPositionerFactory { TaskPositioner create( ShellTaskOrganizer taskOrganizer, DesktopModeWindowDecoration windowDecoration, DisplayController displayController, DragPositioningCallbackUtility.DragStartListener dragStartListener, Transitions transitions, InteractionJankMonitor interactionJankMonitor, Supplier<SurfaceControl.Transaction> transactionFactory) { if (!DesktopModeStatus.isVeiledResizeEnabled()) { return new FluidResizeTaskPositioner( taskOrganizer, transitions, windowDecoration, displayController, dragStartListener, transactionFactory); } return new VeiledResizeTaskPositioner( taskOrganizer, windowDecoration, displayController, dragStartListener, transitions, interactionJankMonitor); } } } libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/FluidResizeTaskPositioner.java +1 −2 Original line number Diff line number Diff line Loading @@ -49,8 +49,7 @@ import java.util.function.Supplier; * that we send the final shell transition since we still utilize the {@link #onTransitionConsumed} * callback. */ class FluidResizeTaskPositioner implements DragPositioningCallback, TaskDragResizer, Transitions.TransitionHandler { class FluidResizeTaskPositioner implements TaskPositioner, Transitions.TransitionHandler { private final ShellTaskOrganizer mTaskOrganizer; private final Transitions mTransitions; private final WindowDecoration mWindowDecoration; Loading libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/TaskDragResizer.java +1 −1 Original line number Diff line number Diff line Loading @@ -19,7 +19,7 @@ package com.android.wm.shell.windowdecor; /** * Holds the state of a drag resize. */ interface TaskDragResizer { public interface TaskDragResizer { /** * Returns true if task is currently being resized or animating the final transition after Loading libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/TaskPositioner.kt 0 → 100644 +22 −0 Original line number Diff line number Diff line /* * Copyright (C) 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.wm.shell.windowdecor /** * Interface for TaskPositioner. */ interface TaskPositioner : DragPositioningCallback, TaskDragResizer libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/VeiledResizeTaskPositioner.java +1 −2 Original line number Diff line number Diff line Loading @@ -47,8 +47,7 @@ import java.util.function.Supplier; * If the drag is resizing the task, we resize the veil instead. * If the drag is repositioning, we update in the typical manner. */ public class VeiledResizeTaskPositioner implements DragPositioningCallback, TaskDragResizer, Transitions.TransitionHandler { public class VeiledResizeTaskPositioner implements TaskPositioner, Transitions.TransitionHandler { private DesktopModeWindowDecoration mDesktopWindowDecoration; private ShellTaskOrganizer mTaskOrganizer; Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java +42 −21 Original line number Diff line number Diff line Loading @@ -199,6 +199,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel { }); } }; private final TaskPositionerFactory mTaskPositionerFactory; public DesktopModeWindowDecorViewModel( Context context, Loading Loading @@ -250,7 +251,8 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel { new SparseArray<>(), interactionJankMonitor, desktopTasksLimiter, activityOrientationChangeHandler); activityOrientationChangeHandler, new TaskPositionerFactory()); } @VisibleForTesting Loading Loading @@ -280,7 +282,8 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel { SparseArray<DesktopModeWindowDecoration> windowDecorByTaskId, InteractionJankMonitor interactionJankMonitor, Optional<DesktopTasksLimiter> desktopTasksLimiter, Optional<DesktopActivityOrientationChangeHandler> activityOrientationChangeHandler) { Optional<DesktopActivityOrientationChangeHandler> activityOrientationChangeHandler, TaskPositionerFactory taskPositionerFactory) { mContext = context; mMainExecutor = shellExecutor; mMainHandler = mainHandler; Loading Loading @@ -335,6 +338,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel { } } }; mTaskPositionerFactory = taskPositionerFactory; shellInit.addInitCallback(this::onInit, this); } Loading Loading @@ -828,7 +832,10 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel { decoration.mTaskSurface, e.getRawX(dragPointerIdx), newTaskBounds); // Flip mIsDragging only if the bounds actually changed. if (mIsDragging || !newTaskBounds.equals(mOnDragStartInitialBounds)) { updateDragStatus(e.getActionMasked()); } return true; } case MotionEvent.ACTION_UP: Loading Loading @@ -1280,23 +1287,18 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel { mMultiInstanceHelper); mWindowDecorByTaskId.put(taskInfo.taskId, windowDecoration); final DragPositioningCallback dragPositioningCallback; if (!DesktopModeStatus.isVeiledResizeEnabled()) { dragPositioningCallback = new FluidResizeTaskPositioner( mTaskOrganizer, mTransitions, windowDecoration, mDisplayController, mDragStartListener, mTransactionFactory); windowDecoration.setTaskDragResizer( (FluidResizeTaskPositioner) dragPositioningCallback); } else { dragPositioningCallback = new VeiledResizeTaskPositioner( mTaskOrganizer, windowDecoration, mDisplayController, mDragStartListener, mTransitions, mInteractionJankMonitor); windowDecoration.setTaskDragResizer( (VeiledResizeTaskPositioner) dragPositioningCallback); } final TaskPositioner taskPositioner = mTaskPositionerFactory.create( mTaskOrganizer, windowDecoration, mDisplayController, mDragStartListener, mTransitions, mInteractionJankMonitor, mTransactionFactory); windowDecoration.setTaskDragResizer(taskPositioner); final DesktopModeTouchEventListener touchEventListener = new DesktopModeTouchEventListener(taskInfo, dragPositioningCallback); new DesktopModeTouchEventListener(taskInfo, taskPositioner); windowDecoration.setOnMaximizeOrRestoreClickListener(() -> { onMaximizeOrRestore(taskInfo.taskId, "maximize_menu"); return Unit.INSTANCE; Loading Loading @@ -1330,7 +1332,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel { windowDecoration.setCaptionListeners( touchEventListener, touchEventListener, touchEventListener, touchEventListener); windowDecoration.setExclusionRegionListener(mExclusionRegionListener); windowDecoration.setDragPositioningCallback(dragPositioningCallback); windowDecoration.setDragPositioningCallback(taskPositioner); windowDecoration.setDragDetector(touchEventListener.mDragDetector); windowDecoration.relayout(taskInfo, startT, finishT, false /* applyStartTransactionOnDraw */, false /* shouldSetTaskPositionAndCrop */); Loading Loading @@ -1479,6 +1481,25 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel { } } } } @VisibleForTesting static class TaskPositionerFactory { TaskPositioner create( ShellTaskOrganizer taskOrganizer, DesktopModeWindowDecoration windowDecoration, DisplayController displayController, DragPositioningCallbackUtility.DragStartListener dragStartListener, Transitions transitions, InteractionJankMonitor interactionJankMonitor, Supplier<SurfaceControl.Transaction> transactionFactory) { if (!DesktopModeStatus.isVeiledResizeEnabled()) { return new FluidResizeTaskPositioner( taskOrganizer, transitions, windowDecoration, displayController, dragStartListener, transactionFactory); } return new VeiledResizeTaskPositioner( taskOrganizer, windowDecoration, displayController, dragStartListener, transitions, interactionJankMonitor); } } }
libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/FluidResizeTaskPositioner.java +1 −2 Original line number Diff line number Diff line Loading @@ -49,8 +49,7 @@ import java.util.function.Supplier; * that we send the final shell transition since we still utilize the {@link #onTransitionConsumed} * callback. */ class FluidResizeTaskPositioner implements DragPositioningCallback, TaskDragResizer, Transitions.TransitionHandler { class FluidResizeTaskPositioner implements TaskPositioner, Transitions.TransitionHandler { private final ShellTaskOrganizer mTaskOrganizer; private final Transitions mTransitions; private final WindowDecoration mWindowDecoration; Loading
libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/TaskDragResizer.java +1 −1 Original line number Diff line number Diff line Loading @@ -19,7 +19,7 @@ package com.android.wm.shell.windowdecor; /** * Holds the state of a drag resize. */ interface TaskDragResizer { public interface TaskDragResizer { /** * Returns true if task is currently being resized or animating the final transition after Loading
libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/TaskPositioner.kt 0 → 100644 +22 −0 Original line number Diff line number Diff line /* * Copyright (C) 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.wm.shell.windowdecor /** * Interface for TaskPositioner. */ interface TaskPositioner : DragPositioningCallback, TaskDragResizer
libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/VeiledResizeTaskPositioner.java +1 −2 Original line number Diff line number Diff line Loading @@ -47,8 +47,7 @@ import java.util.function.Supplier; * If the drag is resizing the task, we resize the veil instead. * If the drag is repositioning, we update in the typical manner. */ public class VeiledResizeTaskPositioner implements DragPositioningCallback, TaskDragResizer, Transitions.TransitionHandler { public class VeiledResizeTaskPositioner implements TaskPositioner, Transitions.TransitionHandler { private DesktopModeWindowDecoration mDesktopWindowDecoration; private ShellTaskOrganizer mTaskOrganizer; Loading