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

Commit 47eed829 authored by Jorge Gil's avatar Jorge Gil
Browse files

Make DesktopModeTouchEventListener static

For better encapsulation and to make unit testing easier.

Flag: EXEMPT refactor
Bug: 418225224
Test: m
Change-Id: Ib02985829fde63c7b3d862af849913ac5e22bdc8
parent 1e1a9b1b
Loading
Loading
Loading
Loading
+129 −28
Original line number Original line Diff line number Diff line
@@ -185,6 +185,7 @@ import java.util.List;
import java.util.Optional;
import java.util.Optional;
import java.util.Set;
import java.util.Set;
import java.util.function.Consumer;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;
import java.util.function.Supplier;


/**
/**
@@ -237,6 +238,17 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel,
            new ExclusionRegionListenerImpl();
            new ExclusionRegionListenerImpl();


    private final SparseArray<WindowDecorationWrapper> mWindowDecorByTaskId;
    private final SparseArray<WindowDecorationWrapper> mWindowDecorByTaskId;
    private final Function<Integer, WindowDecorationWrapper> mWindowDecorationFinder =
            new Function<>() {
                @Override
                public WindowDecorationWrapper apply(Integer taskId) {
                    return mWindowDecorByTaskId.get(taskId);
                }
            };

    private final AppHandleMotionEventHandler mAppHandleMotionEventHandler =
            this::handleCaptionThroughStatusBar;

    private final InputMonitorFactory mInputMonitorFactory;
    private final InputMonitorFactory mInputMonitorFactory;
    private TaskOperations mTaskOperations;
    private TaskOperations mTaskOperations;
    private final Supplier<SurfaceControl.Transaction> mTransactionFactory;
    private final Supplier<SurfaceControl.Transaction> mTransactionFactory;
@@ -552,7 +564,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel,
                && Flags.enableDesktopWindowingAppHandleEducation()) {
                && Flags.enableDesktopWindowingAppHandleEducation()) {
            mAppHandleEducationController.setAppHandleEducationTooltipCallbacks(
            mAppHandleEducationController.setAppHandleEducationTooltipCallbacks(
                    /* appHandleTooltipClickCallback= */(taskId) -> {
                    /* appHandleTooltipClickCallback= */(taskId) -> {
                        openHandleMenu(taskId);
                        mWindowDecorationActions.onOpenHandleMenu(taskId);
                        return Unit.INSTANCE;
                        return Unit.INSTANCE;
                    },
                    },
                    /* onToDesktopClickCallback= */(taskId, desktopModeTransitionSource) -> {
                    /* onToDesktopClickCallback= */(taskId, desktopModeTransitionSource) -> {
@@ -1136,8 +1148,23 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel,
        /** Called when the caption is released. */
        /** Called when the caption is released. */
        void onCaptionReleased();
        void onCaptionReleased();
    }
    }

    /** Handler of motion events on the app handle. */
    interface AppHandleMotionEventHandler {
        /**
         * Handles motion events coming from the decor's app handle.
         *
         * @param ev the event to handle
         * @param relevantDecor the window decoration from which the event originates
         * @param interruptDragCallback a callback to invoke when the drag is interrupted
         **/
        void onMotionEvent(MotionEvent ev, WindowDecorationWrapper relevantDecor,
                Runnable interruptDragCallback);
    }

    @VisibleForTesting
    @VisibleForTesting
    public class DesktopModeTouchEventListener extends GestureDetector.SimpleOnGestureListener
    public static class DesktopModeTouchEventListener
            extends GestureDetector.SimpleOnGestureListener
            implements View.OnClickListener, View.OnTouchListener, View.OnLongClickListener,
            implements View.OnClickListener, View.OnTouchListener, View.OnLongClickListener,
            View.OnGenericMotionListener, DragDetector.MotionEventHandler {
            View.OnGenericMotionListener, DragDetector.MotionEventHandler {
        private static final String TAG = "DesktopModeTouchEventListener";
        private static final String TAG = "DesktopModeTouchEventListener";
@@ -1147,9 +1174,27 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel,
        private static final boolean DEBUG_MOTION_EVENTS = SystemProperties.getBoolean(
        private static final boolean DEBUG_MOTION_EVENTS = SystemProperties.getBoolean(
                "persist.wm.debug.window_decoration_motion_events_debug", false);
                "persist.wm.debug.window_decoration_motion_events_debug", false);


        private final @NonNull Context mContext;
        private final int mTaskId;
        private final int mTaskId;
        private final WindowContainerToken mTaskToken;
        private final WindowContainerToken mTaskToken;
        private final DragPositioningCallback mDragPositioningCallback;
        private final @NonNull DragPositioningCallback mDragPositioningCallback;
        private final @NonNull Function<Integer, WindowDecorationWrapper> mWindowDecorationFinder;
        private final @Nullable SplitScreenController mSplitScreenController;
        private final @NonNull DesktopTasksController mDesktopTasksController;
        private final @NonNull TaskOperations mTaskOperations;
        private final @NonNull DesktopModeUiEventLogger mDesktopModeUiEventLogger;
        private final @NonNull WindowDecorationActions mWindowDecorationActions;
        private final @NonNull DesktopUserRepositories mDesktopUserRepositories;
        private final @NonNull WindowDecorationGestureExclusionTracker mGestureExclusionTracker;
        private final @Nullable InputManager mInputManager;
        private final @NonNull FocusTransitionObserver mFocusTransitionObserver;
        private final @NonNull ShellDesktopState mShellDesktopState;
        private final @NonNull MultiDisplayDragMoveIndicatorController
                mMultiDisplayDragMoveIndicatorController;
        private final @NonNull Supplier<SurfaceControl.Transaction> mTransactionFactory;
        private final @Nullable CaptionTouchStatusListener mCaptionTouchStatusListener;
        private final @NonNull AppHandleMotionEventHandler mAppHandleMotionEventHandler;

        private final DragDetector mHandleDragDetector;
        private final DragDetector mHandleDragDetector;
        private final DragDetector mHeaderDragDetector;
        private final DragDetector mHeaderDragDetector;
        private final GestureDetector mGestureDetector;
        private final GestureDetector mGestureDetector;
@@ -1174,11 +1219,45 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel,
        private int mCurrentPointerIconType = PointerIcon.TYPE_ARROW;
        private int mCurrentPointerIconType = PointerIcon.TYPE_ARROW;


        private DesktopModeTouchEventListener(
        private DesktopModeTouchEventListener(
                RunningTaskInfo taskInfo,
                @NonNull Context context,
                DragPositioningCallback dragPositioningCallback) {
                @NonNull RunningTaskInfo taskInfo,
                @NonNull DragPositioningCallback dragPositioningCallback,
                @NonNull Function<Integer, WindowDecorationWrapper> windowDecorationFinder,
                @Nullable SplitScreenController splitScreenController,
                @NonNull DesktopTasksController desktopTasksController,
                @NonNull TaskOperations taskOperations,
                @NonNull DesktopModeUiEventLogger desktopModeUiEventLogger,
                @NonNull WindowDecorationActions windowDecorationActions,
                @NonNull DesktopUserRepositories desktopUserRepositories,
                @NonNull WindowDecorationGestureExclusionTracker gestureExclusionTracker,
                @Nullable InputManager inputManager,
                @NonNull FocusTransitionObserver focusTransitionObserver,
                @NonNull ShellDesktopState shellDesktopState,
                @NonNull MultiDisplayDragMoveIndicatorController
                        multiDisplayDragMoveIndicatorController,
                @NonNull Supplier<SurfaceControl.Transaction> transactionFactory,
                @Nullable CaptionTouchStatusListener captionTouchStatusListener,
                @NonNull AppHandleMotionEventHandler appHandleMotionEventHandler) {
            mContext = context;
            mDragPositioningCallback = dragPositioningCallback;
            mWindowDecorationFinder = windowDecorationFinder;
            mSplitScreenController = splitScreenController;
            mDesktopTasksController = desktopTasksController;
            mTaskOperations = taskOperations;
            mDesktopModeUiEventLogger = desktopModeUiEventLogger;
            mWindowDecorationActions = windowDecorationActions;
            mDesktopUserRepositories = desktopUserRepositories;
            mGestureExclusionTracker = gestureExclusionTracker;
            mInputManager = inputManager;
            mFocusTransitionObserver = focusTransitionObserver;
            mShellDesktopState = shellDesktopState;
            mMultiDisplayDragMoveIndicatorController = multiDisplayDragMoveIndicatorController;
            mTransactionFactory = transactionFactory;
            mCaptionTouchStatusListener = captionTouchStatusListener;
            mAppHandleMotionEventHandler = appHandleMotionEventHandler;

            mTaskId = taskInfo.taskId;
            mTaskId = taskInfo.taskId;
            mTaskToken = taskInfo.token;
            mTaskToken = taskInfo.token;
            mDragPositioningCallback = dragPositioningCallback;
            final int touchSlop = ViewConfiguration.get(mContext).getScaledTouchSlop();
            final int touchSlop = ViewConfiguration.get(mContext).getScaledTouchSlop();
            final long appHandleHoldToDragDuration =
            final long appHandleHoldToDragDuration =
                    DesktopModeFlags.ENABLE_HOLD_TO_DRAG_APP_HANDLE.isTrue()
                    DesktopModeFlags.ENABLE_HOLD_TO_DRAG_APP_HANDLE.isTrue()
@@ -1213,7 +1292,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel,
                mIsDragging = false;
                mIsDragging = false;
                return;
                return;
            }
            }
            final WindowDecorationWrapper decoration = mWindowDecorByTaskId.get(mTaskId);
            final WindowDecorationWrapper decoration = mWindowDecorationFinder.apply(mTaskId);
            if (decoration == null) {
            if (decoration == null) {
                logD("onClick(%s) but decoration is null, ignoring", viewName);
                logD("onClick(%s) but decoration is null, ignoring", viewName);
                return;
                return;
@@ -1229,7 +1308,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel,
                        final int nextFocusedTaskId = mDesktopTasksController.getNextFocusedTask(
                        final int nextFocusedTaskId = mDesktopTasksController.getNextFocusedTask(
                                decoration.getTaskInfo());
                                decoration.getTaskInfo());
                        WindowDecorationWrapper nextFocusedWindow =
                        WindowDecorationWrapper nextFocusedWindow =
                                mWindowDecorByTaskId.get(nextFocusedTaskId);
                                mWindowDecorationFinder.apply(nextFocusedTaskId);
                        if (nextFocusedWindow != null) {
                        if (nextFocusedWindow != null) {
                            nextFocusedWindow.a11yAnnounceNewFocusedWindow();
                            nextFocusedWindow.a11yAnnounceNewFocusedWindow();
                        }
                        }
@@ -1254,7 +1333,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel,
                if (decoration.getHandleMenuController() != null
                if (decoration.getHandleMenuController() != null
                        && !decoration.getHandleMenuController().isHandleMenuActive()) {
                        && !decoration.getHandleMenuController().isHandleMenuActive()) {
                    moveTaskToFront(decoration.getTaskInfo());
                    moveTaskToFront(decoration.getTaskInfo());
                    openHandleMenu(mTaskId);
                    mWindowDecorationActions.onOpenHandleMenu(mTaskId);
                }
                }
            } else if (id == R.id.maximize_window) {
            } else if (id == R.id.maximize_window) {
                // TODO(b/346441962): move click detection logic into the decor's
                // TODO(b/346441962): move click detection logic into the decor's
@@ -1268,11 +1347,11 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel,
                        && desktopRepository.isTaskInFullImmersiveState(
                        && desktopRepository.isTaskInFullImmersiveState(
                        decoration.getTaskInfo().taskId)) {
                        decoration.getTaskInfo().taskId)) {
                    // Task is in immersive and should exit.
                    // Task is in immersive and should exit.
                    onEnterOrExitImmersive(decoration.getTaskInfo());
                    mWindowDecorationActions.onImmersiveOrRestore(decoration.getTaskInfo());
                } else {
                } else {
                    // Full immersive is disabled or task doesn't request/support it, so just
                    // Full immersive is disabled or task doesn't request/support it, so just
                    // toggle between maximize/restore states.
                    // toggle between maximize/restore states.
                    onToggleSizeInteraction(decoration.getTaskInfo().taskId,
                    mWindowDecorationActions.onMaximizeOrRestore(decoration.getTaskInfo().taskId,
                            ToggleTaskSizeInteraction.AmbiguousSource.HEADER_BUTTON,
                            ToggleTaskSizeInteraction.AmbiguousSource.HEADER_BUTTON,
                            getInputMethod(mMotionEvent));
                            getInputMethod(mMotionEvent));
                }
                }
@@ -1282,7 +1361,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel,
                    final int nextFocusedTaskId = mDesktopTasksController
                    final int nextFocusedTaskId = mDesktopTasksController
                            .getNextFocusedTask(decoration.getTaskInfo());
                            .getNextFocusedTask(decoration.getTaskInfo());
                    WindowDecorationWrapper nextFocusedWindow =
                    WindowDecorationWrapper nextFocusedWindow =
                            mWindowDecorByTaskId.get(nextFocusedTaskId);
                            mWindowDecorationFinder.apply(nextFocusedTaskId);
                    if (nextFocusedWindow != null) {
                    if (nextFocusedWindow != null) {
                        nextFocusedWindow.a11yAnnounceNewFocusedWindow();
                        nextFocusedWindow.a11yAnnounceNewFocusedWindow();
                    }
                    }
@@ -1298,7 +1377,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel,
            final String viewName = getResourceName(v);
            final String viewName = getResourceName(v);
            debugLogD("onTouch(%s) action=%s", viewName, MotionEvent.actionToString(e.getAction()));
            debugLogD("onTouch(%s) action=%s", viewName, MotionEvent.actionToString(e.getAction()));
            final int id = v.getId();
            final int id = v.getId();
            final WindowDecorationWrapper decoration = mWindowDecorByTaskId.get(mTaskId);
            final WindowDecorationWrapper decoration = mWindowDecorationFinder.apply(mTaskId);
            if (decoration == null) {
            if (decoration == null) {
                debugLogD("onTouch(%s) but decoration is null, ignoring", viewName);
                debugLogD("onTouch(%s) but decoration is null, ignoring", viewName);
                return false;
                return false;
@@ -1402,7 +1481,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel,
                logD("onLongClick(%s) but long click is disabled, ignoring", viewName);
                logD("onLongClick(%s) but long click is disabled, ignoring", viewName);
                return false;
                return false;
            }
            }
            final WindowDecorationWrapper decoration = mWindowDecorByTaskId.get(mTaskId);
            final WindowDecorationWrapper decoration = mWindowDecorationFinder.apply(mTaskId);
            if (decoration == null) {
            if (decoration == null) {
                logD("onLongClick(%s) but decoration is null, ignoring", viewName);
                logD("onLongClick(%s) but decoration is null, ignoring", viewName);
                return false;
                return false;
@@ -1423,7 +1502,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel,
        @Override
        @Override
        public boolean onGenericMotion(View v, MotionEvent ev) {
        public boolean onGenericMotion(View v, MotionEvent ev) {
            mMotionEvent = ev;
            mMotionEvent = ev;
            final WindowDecorationWrapper decoration = mWindowDecorByTaskId.get(mTaskId);
            final WindowDecorationWrapper decoration = mWindowDecorationFinder.apply(mTaskId);
            if (decoration == null) {
            if (decoration == null) {
                return false;
                return false;
            }
            }
@@ -1476,7 +1555,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel,
            final String viewName = getResourceName(v);
            final String viewName = getResourceName(v);
            debugLogD("handleMotionEvent(%s) action=%s",
            debugLogD("handleMotionEvent(%s) action=%s",
                    viewName, MotionEvent.actionToString(e.getAction()));
                    viewName, MotionEvent.actionToString(e.getAction()));
            final WindowDecorationWrapper decoration = mWindowDecorByTaskId.get(mTaskId);
            final WindowDecorationWrapper decoration = mWindowDecorationFinder.apply(mTaskId);
            if (decoration == null) {
            if (decoration == null) {
                debugLogD("handleMotionEvent(%s) but decoration is null, ignoring", viewName);
                debugLogD("handleMotionEvent(%s) but decoration is null, ignoring", viewName);
                return false;
                return false;
@@ -1500,7 +1579,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel,
                        viewName);
                        viewName);
                return false;
                return false;
            }
            }
            handleCaptionThroughStatusBar(e, decoration,
            mAppHandleMotionEventHandler.onMotionEvent(e, decoration,
                    /* interruptDragCallback= */
                    /* interruptDragCallback= */
                    () -> {
                    () -> {
                        logD("handleNonFreeformMotionEvent(%s) drag interrupted", viewName);
                        logD("handleNonFreeformMotionEvent(%s) drag interrupted", viewName);
@@ -1809,12 +1888,29 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel,
                // Disallow double-tap to resize when in full immersive.
                // Disallow double-tap to resize when in full immersive.
                return false;
                return false;
            }
            }
            onToggleSizeInteraction(mTaskId,
            mWindowDecorationActions.onMaximizeOrRestore(mTaskId,
                    ToggleTaskSizeInteraction.AmbiguousSource.DOUBLE_TAP,
                    ToggleTaskSizeInteraction.AmbiguousSource.DOUBLE_TAP,
                    getInputMethod(mMotionEvent));
                    getInputMethod(mMotionEvent));
            return true;
            return true;
        }
        }


        private boolean isTaskInSplitScreen(int taskId) {
            return mSplitScreenController != null
                    && mSplitScreenController.isTaskInSplitScreen(taskId);
        }

        @Nullable
        private RunningTaskInfo getOtherSplitTask(int taskId) {
            @SplitPosition int remainingTaskPosition = mSplitScreenController
                    .getSplitPosition(taskId) == SPLIT_POSITION_BOTTOM_OR_RIGHT
                    ? SPLIT_POSITION_TOP_OR_LEFT : SPLIT_POSITION_BOTTOM_OR_RIGHT;
            return mSplitScreenController.getTaskInfo(remainingTaskPosition);
        }

        private InputMethod getInputMethod(MotionEvent ev) {
            return DesktopModeEventLogger.getInputMethodFromMotionEvent(ev);
        }

        private void debugLogD(@NonNull String msg, @NonNull Object... args) {
        private void debugLogD(@NonNull String msg, @NonNull Object... args) {
            if (DEBUG_MOTION_EVENTS) {
            if (DEBUG_MOTION_EVENTS) {
                logD(msg, args);
                logD(msg, args);
@@ -1946,7 +2042,6 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel,
        relevantDecor.updateHoverAndPressStatus(ev);
        relevantDecor.updateHoverAndPressStatus(ev);
    }
    }



    /**
    /**
     * Perform caption actions if not able to through normal means.
     * Perform caption actions if not able to through normal means.
     * Turn on desktop mode if handle is dragged below status bar.
     * Turn on desktop mode if handle is dragged below status bar.
@@ -2301,7 +2396,13 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel,
        windowDecoration.setTaskDragResizer(taskPositioner);
        windowDecoration.setTaskDragResizer(taskPositioner);


        final DesktopModeTouchEventListener touchEventListener =
        final DesktopModeTouchEventListener touchEventListener =
                new DesktopModeTouchEventListener(taskInfo, taskPositioner);
                new DesktopModeTouchEventListener(mContext, taskInfo, taskPositioner,
                        mWindowDecorationFinder, mSplitScreenController, mDesktopTasksController,
                        mTaskOperations, mDesktopModeUiEventLogger, mWindowDecorationActions,
                        mDesktopUserRepositories, mGestureExclusionTracker, mInputManager,
                        mFocusTransitionObserver, mShellDesktopState,
                        mMultiDisplayDragMoveIndicatorController, mTransactionFactory,
                        mCaptionTouchStatusListener, mAppHandleMotionEventHandler);
        windowDecoration.setCaptionListeners(
        windowDecoration.setCaptionListeners(
                touchEventListener, touchEventListener, touchEventListener, touchEventListener);
                touchEventListener, touchEventListener, touchEventListener, touchEventListener);
        windowDecoration.setExclusionRegionListener(mExclusionRegionListener);
        windowDecoration.setExclusionRegionListener(mExclusionRegionListener);
@@ -2508,10 +2609,6 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel,
        }
        }
    }
    }


    private InputMethod getInputMethod(MotionEvent ev) {
        return DesktopModeEventLogger.getInputMethodFromMotionEvent(ev);
    }

    @VisibleForTesting
    @VisibleForTesting
    static class DefaultWindowDecorationActions implements WindowDecorationActions {
    static class DefaultWindowDecorationActions implements WindowDecorationActions {
        private final DesktopModeWindowDecorViewModel mViewModel;
        private final DesktopModeWindowDecorViewModel mViewModel;
@@ -2536,10 +2633,9 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel,


        @Override
        @Override
        public void onMaximizeOrRestore(int taskId,
        public void onMaximizeOrRestore(int taskId,
                @NonNull DesktopModeEventLogger.Companion.InputMethod inputMethod) {
                @NotNull ToggleTaskSizeInteraction.AmbiguousSource ambiguousSource,
            mViewModel.onToggleSizeInteraction(taskId,
                @NotNull InputMethod inputMethod) {
                    ToggleTaskSizeInteraction.AmbiguousSource.MAXIMIZE_MENU,
            mViewModel.onToggleSizeInteraction(taskId, ambiguousSource, inputMethod);
                    inputMethod);
        }
        }


        @Override
        @Override
@@ -2626,6 +2722,11 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel,
        public void onNewWindow(int taskId) {
        public void onNewWindow(int taskId) {
            mViewModel.launchNewWindow(taskId);
            mViewModel.launchNewWindow(taskId);
        }
        }

        @Override
        public void onOpenHandleMenu(int taskId) {
            mViewModel.openHandleMenu(taskId);
        }
    }
    }




+7 −1
Original line number Original line Diff line number Diff line
@@ -74,6 +74,7 @@ import com.android.wm.shell.desktopmode.DesktopModeUiEventLogger
import com.android.wm.shell.desktopmode.DesktopModeUiEventLogger.DesktopUiEventEnum.A11Y_MAXIMIZE_MENU_MAXIMIZE
import com.android.wm.shell.desktopmode.DesktopModeUiEventLogger.DesktopUiEventEnum.A11Y_MAXIMIZE_MENU_MAXIMIZE
import com.android.wm.shell.desktopmode.DesktopModeUiEventLogger.DesktopUiEventEnum.A11Y_MAXIMIZE_MENU_RESIZE_LEFT
import com.android.wm.shell.desktopmode.DesktopModeUiEventLogger.DesktopUiEventEnum.A11Y_MAXIMIZE_MENU_RESIZE_LEFT
import com.android.wm.shell.desktopmode.DesktopModeUiEventLogger.DesktopUiEventEnum.A11Y_MAXIMIZE_MENU_RESIZE_RIGHT
import com.android.wm.shell.desktopmode.DesktopModeUiEventLogger.DesktopUiEventEnum.A11Y_MAXIMIZE_MENU_RESIZE_RIGHT
import com.android.wm.shell.desktopmode.common.ToggleTaskSizeInteraction.AmbiguousSource
import com.android.wm.shell.desktopmode.isTaskMaximized
import com.android.wm.shell.desktopmode.isTaskMaximized
import com.android.wm.shell.shared.animation.Interpolators.EMPHASIZED_DECELERATE
import com.android.wm.shell.shared.animation.Interpolators.EMPHASIZED_DECELERATE
import com.android.wm.shell.shared.animation.Interpolators.FAST_OUT_LINEAR_IN
import com.android.wm.shell.shared.animation.Interpolators.FAST_OUT_LINEAR_IN
@@ -469,6 +470,7 @@ class MaximizeMenu(
                            desktopModeUiEventLogger.log(taskInfo, A11Y_MAXIMIZE_MENU_MAXIMIZE)
                            desktopModeUiEventLogger.log(taskInfo, A11Y_MAXIMIZE_MENU_MAXIMIZE)
                            windowDecorationActions.onMaximizeOrRestore(
                            windowDecorationActions.onMaximizeOrRestore(
                                taskInfo.taskId,
                                taskInfo.taskId,
                                AmbiguousSource.MAXIMIZE_MENU,
                                InputMethod.ACCESSIBILITY,
                                InputMethod.ACCESSIBILITY,
                            )
                            )
                        }
                        }
@@ -583,7 +585,11 @@ class MaximizeMenu(
                    windowDecorationActions.onImmersiveOrRestore(taskInfo)
                    windowDecorationActions.onImmersiveOrRestore(taskInfo)
                }
                }
                R.id.maximize_menu_size_toggle_button -> {
                R.id.maximize_menu_size_toggle_button -> {
                    windowDecorationActions.onMaximizeOrRestore(taskInfo.taskId, lastInputMethod)
                    windowDecorationActions.onMaximizeOrRestore(
                        taskInfo.taskId,
                        AmbiguousSource.MAXIMIZE_MENU,
                        lastInputMethod,
                    )
                }
                }
                R.id.maximize_menu_snap_right_button -> {
                R.id.maximize_menu_snap_right_button -> {
                    windowDecorationActions.onRightSnap(taskInfo.taskId, lastInputMethod)
                    windowDecorationActions.onRightSnap(taskInfo.taskId, lastInputMethod)
+5 −1
Original line number Original line Diff line number Diff line
@@ -19,6 +19,7 @@ package com.android.wm.shell.windowdecor
import android.app.ActivityManager.RunningTaskInfo
import android.app.ActivityManager.RunningTaskInfo
import android.content.Intent
import android.content.Intent
import com.android.wm.shell.desktopmode.DesktopModeEventLogger.Companion.InputMethod
import com.android.wm.shell.desktopmode.DesktopModeEventLogger.Companion.InputMethod
import com.android.wm.shell.desktopmode.common.ToggleTaskSizeInteraction.AmbiguousSource
import com.android.wm.shell.shared.desktopmode.DesktopModeTransitionSource
import com.android.wm.shell.shared.desktopmode.DesktopModeTransitionSource


/**
/**
@@ -27,7 +28,7 @@ import com.android.wm.shell.shared.desktopmode.DesktopModeTransitionSource
 */
 */
interface WindowDecorationActions {
interface WindowDecorationActions {
    /** Maximizes a window or restores previous sized if already maximized. */
    /** Maximizes a window or restores previous sized if already maximized. */
    fun onMaximizeOrRestore(taskId: Int, inputMethod: InputMethod)
    fun onMaximizeOrRestore(taskId: Int, ambiguousSource: AmbiguousSource, inputMethod: InputMethod)


    /** Minimizes the task. */
    /** Minimizes the task. */
    fun onMinimize(taskInfo: RunningTaskInfo)
    fun onMinimize(taskInfo: RunningTaskInfo)
@@ -82,4 +83,7 @@ interface WindowDecorationActions {


    /** Creates new instance of task. */
    /** Creates new instance of task. */
    fun onNewWindow(taskId: Int)
    fun onNewWindow(taskId: Int)

    /** Opens the handle menu. */
    fun onOpenHandleMenu(taskId: Int)
}
}
+3 −0
Original line number Original line Diff line number Diff line
@@ -62,6 +62,7 @@ import com.android.wm.shell.desktopmode.DesktopModeUiEventLogger.DesktopUiEventE
import com.android.wm.shell.desktopmode.DesktopModeUiEventLogger.DesktopUiEventEnum.A11Y_APP_WINDOW_CLOSE_BUTTON
import com.android.wm.shell.desktopmode.DesktopModeUiEventLogger.DesktopUiEventEnum.A11Y_APP_WINDOW_CLOSE_BUTTON
import com.android.wm.shell.desktopmode.DesktopModeUiEventLogger.DesktopUiEventEnum.A11Y_APP_WINDOW_MAXIMIZE_RESTORE_BUTTON
import com.android.wm.shell.desktopmode.DesktopModeUiEventLogger.DesktopUiEventEnum.A11Y_APP_WINDOW_MAXIMIZE_RESTORE_BUTTON
import com.android.wm.shell.desktopmode.DesktopModeUiEventLogger.DesktopUiEventEnum.A11Y_APP_WINDOW_MINIMIZE_BUTTON
import com.android.wm.shell.desktopmode.DesktopModeUiEventLogger.DesktopUiEventEnum.A11Y_APP_WINDOW_MINIMIZE_BUTTON
import com.android.wm.shell.desktopmode.common.ToggleTaskSizeInteraction.AmbiguousSource
import com.android.wm.shell.windowdecor.MaximizeButtonView
import com.android.wm.shell.windowdecor.MaximizeButtonView
import com.android.wm.shell.windowdecor.WindowDecorLinearLayout
import com.android.wm.shell.windowdecor.WindowDecorLinearLayout
import com.android.wm.shell.windowdecor.WindowDecorationActions
import com.android.wm.shell.windowdecor.WindowDecorationActions
@@ -260,6 +261,7 @@ class AppHeaderViewHolder(
                            )
                            )
                            windowDecorationActions.onMaximizeOrRestore(
                            windowDecorationActions.onMaximizeOrRestore(
                                currentTaskInfo.taskId,
                                currentTaskInfo.taskId,
                                AmbiguousSource.HEADER_BUTTON,
                                InputMethod.ACCESSIBILITY,
                                InputMethod.ACCESSIBILITY,
                            )
                            )
                        }
                        }
@@ -324,6 +326,7 @@ class AppHeaderViewHolder(
                            )
                            )
                            windowDecorationActions.onMaximizeOrRestore(
                            windowDecorationActions.onMaximizeOrRestore(
                                currentTaskInfo.taskId,
                                currentTaskInfo.taskId,
                                AmbiguousSource.HEADER_BUTTON,
                                InputMethod.ACCESSIBILITY,
                                InputMethod.ACCESSIBILITY,
                            )
                            )
                        }
                        }
+24 −27

File changed.

Preview size limit exceeded, changes collapsed.