Loading libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java +15 −4 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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, Loading @@ -237,7 +239,8 @@ public abstract class WMShellModule { syncQueue, transitions, desktopTasksController, rootTaskDisplayAreaOrganizer); rootTaskDisplayAreaOrganizer, resizeHandleSizeRepository); } return new CaptionWindowDecorViewModel( context, Loading @@ -247,7 +250,8 @@ public abstract class WMShellModule { displayController, rootTaskDisplayAreaOrganizer, syncQueue, transitions); transitions, resizeHandleSizeRepository); } // Loading Loading @@ -529,7 +533,8 @@ public abstract class WMShellModule { exitDesktopTransitionHandler, toggleResizeDesktopTaskTransitionHandler, dragToDesktopTransitionHandler, desktopModeTaskRepository, desktopModeLoggerTransitionObserver, launchAdjacentController, recentsTransitionHandler, multiInstanceHelper, mainExecutor, desktopTasksLimiter); recentsTransitionHandler, multiInstanceHelper, mainExecutor, desktopTasksLimiter); } @WMSingleton Loading Loading @@ -622,6 +627,12 @@ public abstract class WMShellModule { return new DesktopModeEventLogger(); } @WMSingleton @Provides static ResizeHandleSizeRepository provideResizeHandleSizeRepository() { return new ResizeHandleSizeRepository(); } // // Drag and drop // Loading libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/CaptionWindowDecorViewModel.java +6 −2 Original line number Diff line number Diff line Loading @@ -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<>(); Loading @@ -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; Loading @@ -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); } Loading Loading @@ -231,7 +234,8 @@ public class CaptionWindowDecorViewModel implements WindowDecorViewModel { taskSurface, mMainHandler, mMainChoreographer, mSyncQueue); mSyncQueue, mResizeHandleSizeRepository); mWindowDecorByTaskId.put(taskInfo.taskId, windowDecoration); final FluidResizeTaskPositioner taskPositioner = Loading libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/CaptionWindowDecoration.java +26 −8 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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, Loading @@ -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, Loading @@ -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( Loading Loading @@ -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); } /** Loading libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java +10 −4 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -181,7 +182,8 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel { SyncTransactionQueue syncQueue, Transitions transitions, Optional<DesktopTasksController> desktopTasksController, RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer, ResizeHandleSizeRepository resizeHandleSizeRepository ) { this( context, Loading @@ -202,7 +204,8 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel { new InputMonitorFactory(), SurfaceControl.Transaction::new, rootTaskDisplayAreaOrganizer, new SparseArray<>()); new SparseArray<>(), resizeHandleSizeRepository); } @VisibleForTesting Loading @@ -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; Loading @@ -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); } Loading Loading @@ -1060,7 +1065,8 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel { mMainHandler, mMainChoreographer, mSyncQueue, mRootTaskDisplayAreaOrganizer); mRootTaskDisplayAreaOrganizer, mResizeHandleSizeRepository); mWindowDecorByTaskId.put(taskInfo.taskId, windowDecoration); final DragPositioningCallback dragPositioningCallback; Loading libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java +33 −14 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; /** Loading @@ -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; Loading @@ -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, Loading @@ -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( Loading @@ -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, Loading @@ -161,6 +179,9 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin mChoreographer = choreographer; mSyncQueue = syncQueue; mRootTaskDisplayAreaOrganizer = rootTaskDisplayAreaOrganizer; mResizeHandleSizeRepository = resizeHandleSizeRepository; mResizeHandleSizeRepository.registerSizeChangeFunction( mResizeHandleSizeChangedFunction::apply); } void setCaptionListeners( Loading Loading @@ -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(); } Loading Loading @@ -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 Loading @@ -961,7 +979,8 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin handler, choreographer, syncQueue, rootTaskDisplayAreaOrganizer); rootTaskDisplayAreaOrganizer, resizeHandleSizeRepository); } } Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java +15 −4 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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, Loading @@ -237,7 +239,8 @@ public abstract class WMShellModule { syncQueue, transitions, desktopTasksController, rootTaskDisplayAreaOrganizer); rootTaskDisplayAreaOrganizer, resizeHandleSizeRepository); } return new CaptionWindowDecorViewModel( context, Loading @@ -247,7 +250,8 @@ public abstract class WMShellModule { displayController, rootTaskDisplayAreaOrganizer, syncQueue, transitions); transitions, resizeHandleSizeRepository); } // Loading Loading @@ -529,7 +533,8 @@ public abstract class WMShellModule { exitDesktopTransitionHandler, toggleResizeDesktopTaskTransitionHandler, dragToDesktopTransitionHandler, desktopModeTaskRepository, desktopModeLoggerTransitionObserver, launchAdjacentController, recentsTransitionHandler, multiInstanceHelper, mainExecutor, desktopTasksLimiter); recentsTransitionHandler, multiInstanceHelper, mainExecutor, desktopTasksLimiter); } @WMSingleton Loading Loading @@ -622,6 +627,12 @@ public abstract class WMShellModule { return new DesktopModeEventLogger(); } @WMSingleton @Provides static ResizeHandleSizeRepository provideResizeHandleSizeRepository() { return new ResizeHandleSizeRepository(); } // // Drag and drop // Loading
libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/CaptionWindowDecorViewModel.java +6 −2 Original line number Diff line number Diff line Loading @@ -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<>(); Loading @@ -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; Loading @@ -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); } Loading Loading @@ -231,7 +234,8 @@ public class CaptionWindowDecorViewModel implements WindowDecorViewModel { taskSurface, mMainHandler, mMainChoreographer, mSyncQueue); mSyncQueue, mResizeHandleSizeRepository); mWindowDecorByTaskId.put(taskInfo.taskId, windowDecoration); final FluidResizeTaskPositioner taskPositioner = Loading
libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/CaptionWindowDecoration.java +26 −8 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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, Loading @@ -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, Loading @@ -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( Loading Loading @@ -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); } /** Loading
libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java +10 −4 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -181,7 +182,8 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel { SyncTransactionQueue syncQueue, Transitions transitions, Optional<DesktopTasksController> desktopTasksController, RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer RootTaskDisplayAreaOrganizer rootTaskDisplayAreaOrganizer, ResizeHandleSizeRepository resizeHandleSizeRepository ) { this( context, Loading @@ -202,7 +204,8 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel { new InputMonitorFactory(), SurfaceControl.Transaction::new, rootTaskDisplayAreaOrganizer, new SparseArray<>()); new SparseArray<>(), resizeHandleSizeRepository); } @VisibleForTesting Loading @@ -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; Loading @@ -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); } Loading Loading @@ -1060,7 +1065,8 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel { mMainHandler, mMainChoreographer, mSyncQueue, mRootTaskDisplayAreaOrganizer); mRootTaskDisplayAreaOrganizer, mResizeHandleSizeRepository); mWindowDecorByTaskId.put(taskInfo.taskId, windowDecoration); final DragPositioningCallback dragPositioningCallback; Loading
libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java +33 −14 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; /** Loading @@ -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; Loading @@ -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, Loading @@ -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( Loading @@ -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, Loading @@ -161,6 +179,9 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin mChoreographer = choreographer; mSyncQueue = syncQueue; mRootTaskDisplayAreaOrganizer = rootTaskDisplayAreaOrganizer; mResizeHandleSizeRepository = resizeHandleSizeRepository; mResizeHandleSizeRepository.registerSizeChangeFunction( mResizeHandleSizeChangedFunction::apply); } void setCaptionListeners( Loading Loading @@ -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(); } Loading Loading @@ -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 Loading @@ -961,7 +979,8 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin handler, choreographer, syncQueue, rootTaskDisplayAreaOrganizer); rootTaskDisplayAreaOrganizer, resizeHandleSizeRepository); } } Loading