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

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

Merge "Introduce provider for drag resize handle sizes." into main

parents 251c839b 8ac93740
Loading
Loading
Loading
Loading
+15 −4
Original line number Diff line number Diff line
@@ -100,6 +100,7 @@ import com.android.wm.shell.unfold.qualifier.UnfoldShellTransition;
import com.android.wm.shell.unfold.qualifier.UnfoldTransition;
import com.android.wm.shell.windowdecor.CaptionWindowDecorViewModel;
import com.android.wm.shell.windowdecor.DesktopModeWindowDecorViewModel;
import com.android.wm.shell.windowdecor.ResizeHandleSizeRepository;
import com.android.wm.shell.windowdecor.WindowDecorViewModel;

import dagger.Binds;
@@ -220,7 +221,8 @@ public abstract class WMShellModule {
            SyncTransactionQueue syncQueue,
            Transitions transitions,
            Optional<DesktopTasksController> desktopTasksController,
            RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer) {
            RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer,
            ResizeHandleSizeRepository resizeHandleSizeRepository) {
        if (DesktopModeStatus.canEnterDesktopMode(context)) {
            return new DesktopModeWindowDecorViewModel(
                    context,
@@ -237,7 +239,8 @@ public abstract class WMShellModule {
                    syncQueue,
                    transitions,
                    desktopTasksController,
                    rootTaskDisplayAreaOrganizer);
                    rootTaskDisplayAreaOrganizer,
                    resizeHandleSizeRepository);
        }
        return new CaptionWindowDecorViewModel(
                context,
@@ -247,7 +250,8 @@ public abstract class WMShellModule {
                displayController,
                rootTaskDisplayAreaOrganizer,
                syncQueue,
                transitions);
                transitions,
                resizeHandleSizeRepository);
    }

    //
@@ -529,7 +533,8 @@ public abstract class WMShellModule {
                exitDesktopTransitionHandler, toggleResizeDesktopTaskTransitionHandler,
                dragToDesktopTransitionHandler, desktopModeTaskRepository,
                desktopModeLoggerTransitionObserver, launchAdjacentController,
                recentsTransitionHandler, multiInstanceHelper, mainExecutor, desktopTasksLimiter);
                recentsTransitionHandler, multiInstanceHelper,
                mainExecutor, desktopTasksLimiter);
    }

    @WMSingleton
@@ -622,6 +627,12 @@ public abstract class WMShellModule {
        return new DesktopModeEventLogger();
    }

    @WMSingleton
    @Provides
    static ResizeHandleSizeRepository provideResizeHandleSizeRepository() {
        return new ResizeHandleSizeRepository();
    }

    //
    // Drag and drop
    //
+6 −2
Original line number Diff line number Diff line
@@ -63,6 +63,7 @@ public class CaptionWindowDecorViewModel implements WindowDecorViewModel {
    private final RootTaskDisplayAreaOrganizer mRootTaskDisplayAreaOrganizer;
    private final SyncTransactionQueue mSyncQueue;
    private final Transitions mTransitions;
    private final ResizeHandleSizeRepository mResizeHandleSizeRepository;
    private TaskOperations mTaskOperations;

    private final SparseArray<CaptionWindowDecoration> mWindowDecorByTaskId = new SparseArray<>();
@@ -75,7 +76,8 @@ public class CaptionWindowDecorViewModel implements WindowDecorViewModel {
            DisplayController displayController,
            RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer,
            SyncTransactionQueue syncQueue,
            Transitions transitions) {
            Transitions transitions,
            ResizeHandleSizeRepository resizeHandleSizeRepository) {
        mContext = context;
        mMainHandler = mainHandler;
        mMainChoreographer = mainChoreographer;
@@ -84,6 +86,7 @@ public class CaptionWindowDecorViewModel implements WindowDecorViewModel {
        mRootTaskDisplayAreaOrganizer = rootTaskDisplayAreaOrganizer;
        mSyncQueue = syncQueue;
        mTransitions = transitions;
        mResizeHandleSizeRepository = resizeHandleSizeRepository;
        if (!Transitions.ENABLE_SHELL_TRANSITIONS) {
            mTaskOperations = new TaskOperations(null, mContext, mSyncQueue);
        }
@@ -231,7 +234,8 @@ public class CaptionWindowDecorViewModel implements WindowDecorViewModel {
                        taskSurface,
                        mMainHandler,
                        mMainChoreographer,
                        mSyncQueue);
                        mSyncQueue,
                        mResizeHandleSizeRepository);
        mWindowDecorByTaskId.put(taskInfo.taskId, windowDecoration);

        final FluidResizeTaskPositioner taskPositioner =
+26 −8
Original line number Diff line number Diff line
@@ -16,11 +16,11 @@

package com.android.wm.shell.windowdecor;

import static com.android.wm.shell.windowdecor.DragResizeWindowGeometry.getFineResizeCornerSize;
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.ResizeHandleSizeRepository.getFineResizeCornerPixels;
import static com.android.wm.shell.windowdecor.ResizeHandleSizeRepository.getLargeResizeCornerPixels;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityManager.RunningTaskInfo;
import android.app.WindowConfiguration;
import android.app.WindowConfiguration.WindowingMode;
@@ -45,6 +45,8 @@ import com.android.wm.shell.common.DisplayController;
import com.android.wm.shell.common.DisplayLayout;
import com.android.wm.shell.common.SyncTransactionQueue;

import java.util.function.Consumer;

/**
 * Defines visuals and behaviors of a window decoration of a caption bar and shadows. It works with
 * {@link CaptionWindowDecorViewModel}. The caption bar contains a back button, minimize button,
@@ -58,12 +60,28 @@ public class CaptionWindowDecoration extends WindowDecoration<WindowDecorLinearL
    private View.OnClickListener mOnCaptionButtonClickListener;
    private View.OnTouchListener mOnCaptionTouchListener;
    private DragPositioningCallback mDragPositioningCallback;
    // Listener for handling drag resize events. Will be null if the task cannot be resized.
    @Nullable
    private DragResizeInputListener mDragResizeListener;
    private DragDetector mDragDetector;

    private RelayoutParams mRelayoutParams = new RelayoutParams();
    private final RelayoutResult<WindowDecorLinearLayout> mResult =
            new RelayoutResult<>();
    private final ResizeHandleSizeRepository mResizeHandleSizeRepository;
    private final Consumer<ResizeHandleSizeRepository> mResizeHandleSizeChangedFunction =
            (ResizeHandleSizeRepository sizeRepository) -> {
                if (mDragResizeListener == null) {
                    return;
                }
                final Resources res = mResult.mRootView.getResources();
                mDragResizeListener.setGeometry(
                        new DragResizeWindowGeometry(0 /* taskCornerRadius */,
                                new Size(mResult.mWidth, mResult.mHeight),
                                sizeRepository.getResizeEdgeHandlePixels(res),
                                getFineResizeCornerPixels(res), getLargeResizeCornerPixels(res)),
                        mDragDetector.getTouchSlop());
            };

    CaptionWindowDecoration(
            Context context,
@@ -73,13 +91,16 @@ public class CaptionWindowDecoration extends WindowDecoration<WindowDecorLinearL
            SurfaceControl taskSurface,
            Handler handler,
            Choreographer choreographer,
            SyncTransactionQueue syncQueue) {
            SyncTransactionQueue syncQueue,
            ResizeHandleSizeRepository resizeHandleSizeRepository) {
        super(context, displayController, taskOrganizer, taskInfo, taskSurface,
                taskInfo.getConfiguration());

        mHandler = handler;
        mChoreographer = choreographer;
        mSyncQueue = syncQueue;
        mResizeHandleSizeRepository = resizeHandleSizeRepository;
        mResizeHandleSizeRepository.registerSizeChangeFunction(mResizeHandleSizeChangedFunction);
    }

    void setCaptionListeners(
@@ -238,10 +259,7 @@ public class CaptionWindowDecoration extends WindowDecoration<WindowDecorLinearL
                .getScaledTouchSlop();
        mDragDetector.setTouchSlop(touchSlop);

        final Resources res = mResult.mRootView.getResources();
        mDragResizeListener.setGeometry(new DragResizeWindowGeometry(0 /* taskCornerRadius */,
                new Size(mResult.mWidth, mResult.mHeight), getResizeEdgeHandleSize(res),
                getFineResizeCornerSize(res), getLargeResizeCornerSize(res)), touchSlop);
        mResizeHandleSizeChangedFunction.accept(mResizeHandleSizeRepository);
    }

    /**
+10 −4
Original line number Diff line number Diff line
@@ -149,6 +149,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel {
            new DesktopModeKeyguardChangeListener();
    private final RootTaskDisplayAreaOrganizer mRootTaskDisplayAreaOrganizer;
    private final DisplayInsetsController mDisplayInsetsController;
    private final ResizeHandleSizeRepository mResizeHandleSizeRepository;
    private final Region mExclusionRegion = Region.obtain();
    private boolean mInImmersiveMode;

@@ -181,7 +182,8 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel {
            SyncTransactionQueue syncQueue,
            Transitions transitions,
            Optional<DesktopTasksController> desktopTasksController,
            RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer
            RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer,
            ResizeHandleSizeRepository resizeHandleSizeRepository
    ) {
        this(
                context,
@@ -202,7 +204,8 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel {
                new InputMonitorFactory(),
                SurfaceControl.Transaction::new,
                rootTaskDisplayAreaOrganizer,
                new SparseArray<>());
                new SparseArray<>(),
                resizeHandleSizeRepository);
    }

    @VisibleForTesting
@@ -225,7 +228,8 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel {
            InputMonitorFactory inputMonitorFactory,
            Supplier<SurfaceControl.Transaction> transactionFactory,
            RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer,
            SparseArray<DesktopModeWindowDecoration> windowDecorByTaskId) {
            SparseArray<DesktopModeWindowDecoration> windowDecorByTaskId,
            ResizeHandleSizeRepository resizeHandleSizeRepository) {
        mContext = context;
        mMainExecutor = shellExecutor;
        mMainHandler = mainHandler;
@@ -246,6 +250,7 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel {
        mRootTaskDisplayAreaOrganizer = rootTaskDisplayAreaOrganizer;
        mInputManager = mContext.getSystemService(InputManager.class);
        mWindowDecorByTaskId = windowDecorByTaskId;
        mResizeHandleSizeRepository = resizeHandleSizeRepository;

        shellInit.addInitCallback(this::onInit, this);
    }
@@ -1060,7 +1065,8 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel {
                        mMainHandler,
                        mMainChoreographer,
                        mSyncQueue,
                        mRootTaskDisplayAreaOrganizer);
                        mRootTaskDisplayAreaOrganizer,
                        mResizeHandleSizeRepository);
        mWindowDecorByTaskId.put(taskInfo.taskId, windowDecoration);

        final DragPositioningCallback dragPositioningCallback;
+33 −14
Original line number Diff line number Diff line
@@ -24,11 +24,11 @@ import static android.view.MotionEvent.ACTION_DOWN;
import static android.view.MotionEvent.ACTION_UP;

import static com.android.launcher3.icons.BaseIconFactory.MODE_DEFAULT;
import static com.android.wm.shell.windowdecor.DragResizeWindowGeometry.getFineResizeCornerSize;
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.ResizeHandleSizeRepository.getFineResizeCornerPixels;
import static com.android.wm.shell.windowdecor.ResizeHandleSizeRepository.getLargeResizeCornerPixels;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityManager;
import android.app.WindowConfiguration.WindowingMode;
import android.content.Context;
@@ -76,6 +76,7 @@ import com.android.wm.shell.windowdecor.viewholder.DesktopModeWindowDecorationVi

import kotlin.Unit;

import java.util.function.Function;
import java.util.function.Supplier;

/**
@@ -97,6 +98,8 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin
    private View.OnLongClickListener mOnCaptionLongClickListener;
    private View.OnGenericMotionListener mOnCaptionGenericMotionListener;
    private DragPositioningCallback mDragPositioningCallback;
    // Listener for handling drag resize events. Will be null if the task cannot be resized.
    @Nullable
    private DragResizeInputListener mDragResizeListener;
    private DragDetector mDragDetector;

@@ -119,6 +122,19 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin

    private final RootTaskDisplayAreaOrganizer mRootTaskDisplayAreaOrganizer;

    private final ResizeHandleSizeRepository mResizeHandleSizeRepository;
    private final Function<ResizeHandleSizeRepository, Boolean> mResizeHandleSizeChangedFunction =
            (ResizeHandleSizeRepository sizeRepository) -> {
                final Resources res = mResult.mRootView.getResources();
                return mDragResizeListener == null || mDragResizeListener.setGeometry(
                        new DragResizeWindowGeometry(mRelayoutParams.mCornerRadius,
                                new Size(mResult.mWidth, mResult.mHeight),
                                sizeRepository.getResizeEdgeHandlePixels(res),
                                getFineResizeCornerPixels(res),
                                getLargeResizeCornerPixels(res)),
                        mDragDetector.getTouchSlop());
            };

    DesktopModeWindowDecoration(
            Context context,
            DisplayController displayController,
@@ -129,12 +145,13 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin
            Handler handler,
            Choreographer choreographer,
            SyncTransactionQueue syncQueue,
            RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer) {
            RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer,
            ResizeHandleSizeRepository resizeHandleSizeRepository) {
        this (context, displayController, taskOrganizer, taskInfo, taskSurface, windowDecorConfig,
                handler, choreographer, syncQueue, rootTaskDisplayAreaOrganizer,
                SurfaceControl.Builder::new, SurfaceControl.Transaction::new,
                WindowContainerTransaction::new, SurfaceControl::new,
                new SurfaceControlViewHostFactory() {});
                resizeHandleSizeRepository, SurfaceControl.Builder::new,
                SurfaceControl.Transaction::new, WindowContainerTransaction::new,
                SurfaceControl::new, new SurfaceControlViewHostFactory() {});
    }

    DesktopModeWindowDecoration(
@@ -148,6 +165,7 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin
            Choreographer choreographer,
            SyncTransactionQueue syncQueue,
            RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer,
            ResizeHandleSizeRepository resizeHandleSizeRepository,
            Supplier<SurfaceControl.Builder> surfaceControlBuilderSupplier,
            Supplier<SurfaceControl.Transaction> surfaceControlTransactionSupplier,
            Supplier<WindowContainerTransaction> windowContainerTransactionSupplier,
@@ -161,6 +179,9 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin
        mChoreographer = choreographer;
        mSyncQueue = syncQueue;
        mRootTaskDisplayAreaOrganizer = rootTaskDisplayAreaOrganizer;
        mResizeHandleSizeRepository = resizeHandleSizeRepository;
        mResizeHandleSizeRepository.registerSizeChangeFunction(
                mResizeHandleSizeChangedFunction::apply);
    }

    void setCaptionListeners(
@@ -306,11 +327,7 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin

        // If either task geometry or position have changed, update this task's
        // exclusion region listener
        final Resources res = mResult.mRootView.getResources();
        if (mDragResizeListener.setGeometry(
                new DragResizeWindowGeometry(mRelayoutParams.mCornerRadius,
                        new Size(mResult.mWidth, mResult.mHeight), getResizeEdgeHandleSize(res),
                        getFineResizeCornerSize(res), getLargeResizeCornerSize(res)), touchSlop)
        if (mResizeHandleSizeChangedFunction.apply(mResizeHandleSizeRepository)
                || !mTaskInfo.positionInParent.equals(mPositionInParent)) {
            updateExclusionRegion();
        }
@@ -946,7 +963,8 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin
                Handler handler,
                Choreographer choreographer,
                SyncTransactionQueue syncQueue,
                RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer) {
                RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer,
                ResizeHandleSizeRepository resizeHandleSizeRepository) {
            final Configuration windowDecorConfig =
                    DesktopTasksController.isDesktopDensityOverrideSet()
                    ? context.getResources().getConfiguration() // Use system context
@@ -961,7 +979,8 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin
                    handler,
                    choreographer,
                    syncQueue,
                    rootTaskDisplayAreaOrganizer);
                    rootTaskDisplayAreaOrganizer,
                    resizeHandleSizeRepository);
        }
    }

Loading