Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 353572f3 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Don’t consider move without actual bounds change as drag" into main

parents bf91bc9d 64559297
Loading
Loading
Loading
Loading
+42 −21
Original line number Diff line number Diff line
@@ -199,6 +199,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel {
                    });
                }
            };
    private final TaskPositionerFactory mTaskPositionerFactory;

    public DesktopModeWindowDecorViewModel(
            Context context,
@@ -250,7 +251,8 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel {
                new SparseArray<>(),
                interactionJankMonitor,
                desktopTasksLimiter,
                activityOrientationChangeHandler);
                activityOrientationChangeHandler,
                new TaskPositionerFactory());
    }

    @VisibleForTesting
@@ -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;
@@ -335,6 +338,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel {
                }
            }
        };
        mTaskPositionerFactory = taskPositionerFactory;

        shellInit.addInitCallback(this::onInit, this);
    }
@@ -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:
@@ -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;
@@ -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 */);
@@ -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);
        }
    }
}
+1 −2
Original line number Diff line number Diff line
@@ -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;
+1 −1
Original line number Diff line number Diff line
@@ -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
+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
+1 −2
Original line number Diff line number Diff line
@@ -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