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

Commit d38e6f18 authored by Evan Rosky's avatar Evan Rosky Committed by Android (Google) Code Review
Browse files

Merge "Hook up to-float menu-item in desktop" into main

parents ba706d4d 2e32b378
Loading
Loading
Loading
Loading
+9 −0
Original line number Diff line number Diff line
@@ -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.
+4 −2
Original line number Diff line number Diff line
@@ -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,
@@ -768,7 +769,8 @@ public abstract class WMShellModule {
                desktopModeEventLogger,
                desktopModeUiEventLogger,
                desktopTilingDecorViewModel,
                desktopWallpaperActivityTokenProvider);
                desktopWallpaperActivityTokenProvider,
                bubbleController);
    }

    @WMSingleton
+15 −0
Original line number Diff line number Diff line
@@ -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
@@ -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,
@@ -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
    }
+16 −0
Original line number Diff line number Diff line
@@ -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) {
@@ -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);
        });
+7 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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.
     *
@@ -1372,6 +1378,7 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin
                },
                /* onToFullscreenClickListener= */ mOnToFullscreenClickListener,
                /* onToSplitScreenClickListener= */ mOnToSplitscreenClickListener,
                /* onToFloatClickListener= */ mOnToFloatClickListener,
                /* onNewWindowClickListener= */ mOnNewWindowClickListener,
                /* onManageWindowsClickListener= */ mOnManageWindowsClickListener,
                /* onAspectRatioSettingsClickListener= */ mOnChangeAspectRatioClickListener,
Loading