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

Commit ee4c7cfa authored by Omar Elmekkawy's avatar Omar Elmekkawy
Browse files

[3/n] Add onDragMove API to notify tiling of drag to break tiling

This CL adds a new API, onDragMove to DragEventListener, to notify the tiling
controller of drag to break tiling and hide the divider view.

Flag: com.android.window.flags.enable_tile_resizing
Test: tests are WIP
Bug: 368892978
Change-Id: I327d18f0bb88d5629e980b43c03d3fb1aec470e7
parent 4485a41a
Loading
Loading
Loading
Loading
+12 −7
Original line number Diff line number Diff line
@@ -185,7 +185,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel,
            new ExclusionRegionListenerImpl();

    private final SparseArray<DesktopModeWindowDecoration> mWindowDecorByTaskId;
    private final DragStartListenerImpl mDragStartListener = new DragStartListenerImpl();
    private final DragEventListenerImpl mDragEventListener = new DragEventListenerImpl();
    private final InputMonitorFactory mInputMonitorFactory;
    private TaskOperations mTaskOperations;
    private final Supplier<SurfaceControl.Transaction> mTransactionFactory;
@@ -1515,7 +1515,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel,
                mTaskOrganizer,
                windowDecoration,
                mDisplayController,
                mDragStartListener,
                mDragEventListener,
                mTransitions,
                mInteractionJankMonitor,
                mTransactionFactory,
@@ -1641,13 +1641,18 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel,
        }
    }

    private class DragStartListenerImpl
            implements DragPositioningCallbackUtility.DragStartListener {
    private class DragEventListenerImpl
            implements DragPositioningCallbackUtility.DragEventListener {
        @Override
        public void onDragStart(int taskId) {
            final DesktopModeWindowDecoration decoration = mWindowDecorByTaskId.get(taskId);
            decoration.closeHandleMenu();
        }

        @Override
        public void onDragMove(int taskId) {

        }
    }

    /**
@@ -1741,7 +1746,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel,
                ShellTaskOrganizer taskOrganizer,
                DesktopModeWindowDecoration windowDecoration,
                DisplayController displayController,
                DragPositioningCallbackUtility.DragStartListener dragStartListener,
                DragPositioningCallbackUtility.DragEventListener dragEventListener,
                Transitions transitions,
                InteractionJankMonitor interactionJankMonitor,
                Supplier<SurfaceControl.Transaction> transactionFactory,
@@ -1751,7 +1756,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel,
                            taskOrganizer,
                            windowDecoration,
                            displayController,
                            dragStartListener,
                            dragEventListener,
                            transitions,
                            interactionJankMonitor,
                            handler)
@@ -1760,7 +1765,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel,
                            transitions,
                            windowDecoration,
                            displayController,
                            dragStartListener,
                            dragEventListener,
                            transactionFactory);

            if (DesktopModeFlags.ENABLE_WINDOWING_SCALED_RESIZING.isTrue()) {
+19 −0
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ import static com.android.wm.shell.windowdecor.DragResizeWindowGeometry.getFineR
import static com.android.wm.shell.windowdecor.DragResizeWindowGeometry.getLargeResizeCornerSize;
import static com.android.wm.shell.windowdecor.DragResizeWindowGeometry.getResizeEdgeHandleSize;
import static com.android.wm.shell.windowdecor.DragResizeWindowGeometry.getResizeHandleEdgeInset;
import static com.android.wm.shell.windowdecor.DragPositioningCallbackUtility.DragEventListener;

import android.annotation.NonNull;
import android.annotation.Nullable;
@@ -318,6 +319,24 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin
        mOnToSplitscreenClickListener = listener;
    }

    /**
     * Adds a drag resize observer that gets notified on the task being drag resized.
     *
     * @param dragResizeListener The observing object to be added.
     */
    public void addDragResizeListener(DragEventListener dragResizeListener) {
        mTaskDragResizer.addDragEventListener(dragResizeListener);
    }

    /**
     * Removes an already existing drag resize observer.
     *
     * @param dragResizeListener observer to be removed.
     */
    public void removeDragResizeListener(DragEventListener dragResizeListener) {
        mTaskDragResizer.removeDragEventListener(dragResizeListener);
    }

    /** Registers a listener to be called when the decoration's new window action is triggered. */
    void setOnNewWindowClickListener(Function0<Unit> listener) {
        mOnNewWindowClickListener = listener;
+8 −1
Original line number Diff line number Diff line
@@ -284,12 +284,19 @@ public class DragPositioningCallbackUtility {
                && DesktopModeFlags.ENABLE_DESKTOP_WINDOWING_SIZE_CONSTRAINTS.isTrue();
    }

    interface DragStartListener {
    public interface DragEventListener {
        /**
         * Inform the implementing class that a drag resize has started
         *
         * @param taskId id of this positioner's {@link WindowDecoration}
         */
        void onDragStart(int taskId);

        /**
         * Inform the implementing class that a drag move has started.
         *
         * @param taskId id of this positioner's {@link WindowDecoration}
         */
        void onDragMove(int taskId);
    }
}
+27 −5
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ import com.android.wm.shell.ShellTaskOrganizer;
import com.android.wm.shell.common.DisplayController;
import com.android.wm.shell.transition.Transitions;

import java.util.ArrayList;
import java.util.function.Supplier;

/**
@@ -55,7 +56,8 @@ class FluidResizeTaskPositioner implements TaskPositioner, Transitions.Transitio
    private final WindowDecoration mWindowDecoration;
    private final Supplier<SurfaceControl.Transaction> mTransactionSupplier;
    private DisplayController mDisplayController;
    private DragPositioningCallbackUtility.DragStartListener mDragStartListener;
    private ArrayList<DragPositioningCallbackUtility.DragEventListener> mDragEventListeners =
            new ArrayList<>();
    private final Rect mStableBounds = new Rect();
    private final Rect mTaskBoundsAtDragStart = new Rect();
    private final PointF mRepositionStartPoint = new PointF();
@@ -69,20 +71,22 @@ class FluidResizeTaskPositioner implements TaskPositioner, Transitions.Transitio
    FluidResizeTaskPositioner(ShellTaskOrganizer taskOrganizer, Transitions transitions,
            WindowDecoration windowDecoration, DisplayController displayController) {
        this(taskOrganizer, transitions, windowDecoration, displayController,
                dragStartListener -> {}, SurfaceControl.Transaction::new);
                null, SurfaceControl.Transaction::new);
    }

    FluidResizeTaskPositioner(ShellTaskOrganizer taskOrganizer,
            Transitions transitions,
            WindowDecoration windowDecoration,
            DisplayController displayController,
            DragPositioningCallbackUtility.DragStartListener dragStartListener,
            DragPositioningCallbackUtility.DragEventListener dragEventListener,
            Supplier<SurfaceControl.Transaction> supplier) {
        mTaskOrganizer = taskOrganizer;
        mTransitions = transitions;
        mWindowDecoration = windowDecoration;
        mDisplayController = displayController;
        mDragStartListener = dragStartListener;
        if (dragEventListener != null) {
            mDragEventListeners.add(dragEventListener);
        }
        mTransactionSupplier = supplier;
    }

@@ -92,7 +96,9 @@ class FluidResizeTaskPositioner implements TaskPositioner, Transitions.Transitio
        mTaskBoundsAtDragStart.set(
                mWindowDecoration.mTaskInfo.configuration.windowConfiguration.getBounds());
        mRepositionStartPoint.set(x, y);
        mDragStartListener.onDragStart(mWindowDecoration.mTaskInfo.taskId);
        for (DragPositioningCallbackUtility.DragEventListener listener : mDragEventListeners) {
            listener.onDragStart(mWindowDecoration.mTaskInfo.taskId);
        }
        if (mCtrlType != CTRL_TYPE_UNDEFINED && !mWindowDecoration.mHasGlobalFocus) {
            WindowContainerTransaction wct = new WindowContainerTransaction();
            wct.reorder(mWindowDecoration.mTaskInfo.token, true /* onTop */,
@@ -120,6 +126,10 @@ class FluidResizeTaskPositioner implements TaskPositioner, Transitions.Transitio
            // The task is being resized, send the |dragResizing| hint to core with the first
            // bounds-change wct.
            if (!mHasDragResized) {
                for (DragPositioningCallbackUtility.DragEventListener listener :
                        mDragEventListeners) {
                    listener.onDragMove(mWindowDecoration.mTaskInfo.taskId);
                }
                // This is the first bounds change since drag resize operation started.
                wct.setDragResizing(mWindowDecoration.mTaskInfo.token, true /* dragResizing */);
            }
@@ -216,4 +226,16 @@ class FluidResizeTaskPositioner implements TaskPositioner, Transitions.Transitio
    public boolean isResizingOrAnimating() {
        return mIsResizingOrAnimatingResize;
    }

    @Override
    public void addDragEventListener(
            DragPositioningCallbackUtility.DragEventListener dragEventListener) {
        mDragEventListeners.add(dragEventListener);
    }

    @Override
    public void removeDragEventListener(
            DragPositioningCallbackUtility.DragEventListener dragEventListener) {
        mDragEventListeners.remove(dragEventListener);
    }
}
+15 −0
Original line number Diff line number Diff line
@@ -26,4 +26,19 @@ public interface TaskDragResizer {
     * a resize is complete.
     */
    boolean isResizingOrAnimating();

    /**
     * Adds a drag start listener to be notified of drag start events.
     *
     * @param dragEventListener Listener to be added.
     */
    void addDragEventListener(DragPositioningCallbackUtility.DragEventListener dragEventListener);

    /**
     * Removes a drag start listener from the listener set.
     *
     * @param dragEventListener Listener to be removed.
     */
    void removeDragEventListener(
            DragPositioningCallbackUtility.DragEventListener dragEventListener);
}
Loading