Loading libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java +9 −0 Original line number Diff line number Diff line Loading @@ -1448,6 +1448,15 @@ public class BubbleController implements ConfigurationChangeListener, } } /** * Expands and selects a bubble created from a running task in a different mode. * * @param taskInfo the task. */ public void expandStackAndSelectBubble(ActivityManager.RunningTaskInfo taskInfo) { // TODO(384976265): Not implemented yet } /** * Expands and selects a bubble based on the provided {@link BubbleEntry}. If no bubble * exists for this entry, and it is able to bubble, a new bubble will be created. Loading libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java +4 −2 Original line number Diff line number Diff line Loading @@ -736,7 +736,8 @@ public abstract class WMShellModule { DesktopModeEventLogger desktopModeEventLogger, DesktopModeUiEventLogger desktopModeUiEventLogger, DesktopTilingDecorViewModel desktopTilingDecorViewModel, DesktopWallpaperActivityTokenProvider desktopWallpaperActivityTokenProvider) { DesktopWallpaperActivityTokenProvider desktopWallpaperActivityTokenProvider, Optional<BubbleController> bubbleController) { return new DesktopTasksController( context, shellInit, Loading Loading @@ -768,7 +769,8 @@ public abstract class WMShellModule { desktopModeEventLogger, desktopModeUiEventLogger, desktopTilingDecorViewModel, desktopWallpaperActivityTokenProvider); desktopWallpaperActivityTokenProvider, bubbleController); } @WMSingleton Loading libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt +15 −0 Original line number Diff line number Diff line Loading @@ -73,6 +73,7 @@ import com.android.wm.shell.Flags.enableFlexibleSplit import com.android.wm.shell.R import com.android.wm.shell.RootTaskDisplayAreaOrganizer import com.android.wm.shell.ShellTaskOrganizer import com.android.wm.shell.bubbles.BubbleController import com.android.wm.shell.common.DisplayController import com.android.wm.shell.common.DisplayLayout import com.android.wm.shell.common.ExternalInterfaceBinder Loading Loading @@ -172,6 +173,7 @@ class DesktopTasksController( private val desktopModeUiEventLogger: DesktopModeUiEventLogger, private val desktopTilingDecorViewModel: DesktopTilingDecorViewModel, private val desktopWallpaperActivityTokenProvider: DesktopWallpaperActivityTokenProvider, private val bubbleController: Optional<BubbleController>, ) : RemoteCallable<DesktopTasksController>, Transitions.TransitionHandler, Loading Loading @@ -2190,6 +2192,19 @@ class DesktopTasksController( } } /** Requests a task be transitioned from whatever mode it's in to a bubble. */ fun requestFloat(taskInfo: RunningTaskInfo) { val isDragging = dragToDesktopTransitionHandler.inProgress val shouldRequestFloat = taskInfo.isFullscreen || taskInfo.isFreeform || isDragging || taskInfo.isMultiWindow if (!shouldRequestFloat) return if (isDragging) { releaseVisualIndicator() } else { bubbleController.ifPresent { it.expandStackAndSelectBubble(taskInfo) } } } private fun getDefaultDensityDpi(): Int { return context.resources.displayMetrics.densityDpi } Loading libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java +16 −0 Original line number Diff line number Diff line Loading @@ -776,6 +776,18 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel, DesktopUiEventEnum.DESKTOP_WINDOW_APP_HANDLE_MENU_TAP_TO_SPLIT_SCREEN); } private void onToFloat(int taskId) { final DesktopModeWindowDecoration decoration = mWindowDecorByTaskId.get(taskId); if (decoration == null) { return; } decoration.closeHandleMenu(); // When the app enters float, the handle will no longer be visible, meaning // we shouldn't receive input for it any longer. decoration.disposeStatusBarInputLayer(); mDesktopTasksController.requestFloat(decoration.mTaskInfo); } private void onNewWindow(int taskId) { final DesktopModeWindowDecoration decoration = mWindowDecorByTaskId.get(taskId); if (decoration == null) { Loading Loading @@ -1731,6 +1743,10 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel, onToSplitScreen(taskInfo.taskId); return Unit.INSTANCE; }); windowDecoration.setOnToFloatClickListener(() -> { onToFloat(taskInfo.taskId); return Unit.INSTANCE; }); windowDecoration.setOpenInBrowserClickListener((intent) -> { onOpenInBrowser(taskInfo.taskId, intent); }); Loading libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java +7 −0 Original line number Diff line number Diff line Loading @@ -155,6 +155,7 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin private Consumer<DesktopModeTransitionSource> mOnToDesktopClickListener; private Function0<Unit> mOnToFullscreenClickListener; private Function0<Unit> mOnToSplitscreenClickListener; private Function0<Unit> mOnToFloatClickListener; private Function0<Unit> mOnNewWindowClickListener; private Function0<Unit> mOnManageWindowsClickListener; private Function0<Unit> mOnChangeAspectRatioClickListener; Loading Loading @@ -351,6 +352,11 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin mOnToSplitscreenClickListener = listener; } /** Registers a listener to be called when the decoration's to-split action is triggered. */ void setOnToFloatClickListener(Function0<Unit> listener) { mOnToFloatClickListener = listener; } /** * Adds a drag resize observer that gets notified on the task being drag resized. * Loading Loading @@ -1372,6 +1378,7 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin }, /* onToFullscreenClickListener= */ mOnToFullscreenClickListener, /* onToSplitScreenClickListener= */ mOnToSplitscreenClickListener, /* onToFloatClickListener= */ mOnToFloatClickListener, /* onNewWindowClickListener= */ mOnNewWindowClickListener, /* onManageWindowsClickListener= */ mOnManageWindowsClickListener, /* onAspectRatioSettingsClickListener= */ mOnChangeAspectRatioClickListener, Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/bubbles/BubbleController.java +9 −0 Original line number Diff line number Diff line Loading @@ -1448,6 +1448,15 @@ public class BubbleController implements ConfigurationChangeListener, } } /** * Expands and selects a bubble created from a running task in a different mode. * * @param taskInfo the task. */ public void expandStackAndSelectBubble(ActivityManager.RunningTaskInfo taskInfo) { // TODO(384976265): Not implemented yet } /** * Expands and selects a bubble based on the provided {@link BubbleEntry}. If no bubble * exists for this entry, and it is able to bubble, a new bubble will be created. Loading
libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java +4 −2 Original line number Diff line number Diff line Loading @@ -736,7 +736,8 @@ public abstract class WMShellModule { DesktopModeEventLogger desktopModeEventLogger, DesktopModeUiEventLogger desktopModeUiEventLogger, DesktopTilingDecorViewModel desktopTilingDecorViewModel, DesktopWallpaperActivityTokenProvider desktopWallpaperActivityTokenProvider) { DesktopWallpaperActivityTokenProvider desktopWallpaperActivityTokenProvider, Optional<BubbleController> bubbleController) { return new DesktopTasksController( context, shellInit, Loading Loading @@ -768,7 +769,8 @@ public abstract class WMShellModule { desktopModeEventLogger, desktopModeUiEventLogger, desktopTilingDecorViewModel, desktopWallpaperActivityTokenProvider); desktopWallpaperActivityTokenProvider, bubbleController); } @WMSingleton Loading
libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt +15 −0 Original line number Diff line number Diff line Loading @@ -73,6 +73,7 @@ import com.android.wm.shell.Flags.enableFlexibleSplit import com.android.wm.shell.R import com.android.wm.shell.RootTaskDisplayAreaOrganizer import com.android.wm.shell.ShellTaskOrganizer import com.android.wm.shell.bubbles.BubbleController import com.android.wm.shell.common.DisplayController import com.android.wm.shell.common.DisplayLayout import com.android.wm.shell.common.ExternalInterfaceBinder Loading Loading @@ -172,6 +173,7 @@ class DesktopTasksController( private val desktopModeUiEventLogger: DesktopModeUiEventLogger, private val desktopTilingDecorViewModel: DesktopTilingDecorViewModel, private val desktopWallpaperActivityTokenProvider: DesktopWallpaperActivityTokenProvider, private val bubbleController: Optional<BubbleController>, ) : RemoteCallable<DesktopTasksController>, Transitions.TransitionHandler, Loading Loading @@ -2190,6 +2192,19 @@ class DesktopTasksController( } } /** Requests a task be transitioned from whatever mode it's in to a bubble. */ fun requestFloat(taskInfo: RunningTaskInfo) { val isDragging = dragToDesktopTransitionHandler.inProgress val shouldRequestFloat = taskInfo.isFullscreen || taskInfo.isFreeform || isDragging || taskInfo.isMultiWindow if (!shouldRequestFloat) return if (isDragging) { releaseVisualIndicator() } else { bubbleController.ifPresent { it.expandStackAndSelectBubble(taskInfo) } } } private fun getDefaultDensityDpi(): Int { return context.resources.displayMetrics.densityDpi } Loading
libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java +16 −0 Original line number Diff line number Diff line Loading @@ -776,6 +776,18 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel, DesktopUiEventEnum.DESKTOP_WINDOW_APP_HANDLE_MENU_TAP_TO_SPLIT_SCREEN); } private void onToFloat(int taskId) { final DesktopModeWindowDecoration decoration = mWindowDecorByTaskId.get(taskId); if (decoration == null) { return; } decoration.closeHandleMenu(); // When the app enters float, the handle will no longer be visible, meaning // we shouldn't receive input for it any longer. decoration.disposeStatusBarInputLayer(); mDesktopTasksController.requestFloat(decoration.mTaskInfo); } private void onNewWindow(int taskId) { final DesktopModeWindowDecoration decoration = mWindowDecorByTaskId.get(taskId); if (decoration == null) { Loading Loading @@ -1731,6 +1743,10 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel, onToSplitScreen(taskInfo.taskId); return Unit.INSTANCE; }); windowDecoration.setOnToFloatClickListener(() -> { onToFloat(taskInfo.taskId); return Unit.INSTANCE; }); windowDecoration.setOpenInBrowserClickListener((intent) -> { onOpenInBrowser(taskInfo.taskId, intent); }); Loading
libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecoration.java +7 −0 Original line number Diff line number Diff line Loading @@ -155,6 +155,7 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin private Consumer<DesktopModeTransitionSource> mOnToDesktopClickListener; private Function0<Unit> mOnToFullscreenClickListener; private Function0<Unit> mOnToSplitscreenClickListener; private Function0<Unit> mOnToFloatClickListener; private Function0<Unit> mOnNewWindowClickListener; private Function0<Unit> mOnManageWindowsClickListener; private Function0<Unit> mOnChangeAspectRatioClickListener; Loading Loading @@ -351,6 +352,11 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin mOnToSplitscreenClickListener = listener; } /** Registers a listener to be called when the decoration's to-split action is triggered. */ void setOnToFloatClickListener(Function0<Unit> listener) { mOnToFloatClickListener = listener; } /** * Adds a drag resize observer that gets notified on the task being drag resized. * Loading Loading @@ -1372,6 +1378,7 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin }, /* onToFullscreenClickListener= */ mOnToFullscreenClickListener, /* onToSplitScreenClickListener= */ mOnToSplitscreenClickListener, /* onToFloatClickListener= */ mOnToFloatClickListener, /* onNewWindowClickListener= */ mOnNewWindowClickListener, /* onManageWindowsClickListener= */ mOnManageWindowsClickListener, /* onAspectRatioSettingsClickListener= */ mOnChangeAspectRatioClickListener, Loading