Loading libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java +2 −0 Original line number Diff line number Diff line Loading @@ -703,6 +703,7 @@ public abstract class WMShellModule { InputManager inputManager, FocusTransitionObserver focusTransitionObserver, DesktopModeEventLogger desktopModeEventLogger, DesktopModeUiEventLogger desktopModeUiEventLogger, DesktopTilingDecorViewModel desktopTilingDecorViewModel) { return new DesktopTasksController( context, Loading Loading @@ -733,6 +734,7 @@ public abstract class WMShellModule { interactionJankMonitor, mainHandler, desktopModeEventLogger, desktopModeUiEventLogger, desktopTilingDecorViewModel); } Loading libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeUiEventLogger.kt +13 −1 Original line number Diff line number Diff line Loading @@ -106,7 +106,19 @@ class DesktopModeUiEventLogger( @UiEvent(doc = "Double tap on window header to maximize it in desktop windowing mode") DESKTOP_WINDOW_HEADER_DOUBLE_TAP_TO_MAXIMIZE(1724), @UiEvent(doc = "Tap on the window Handle to open the Handle Menu") DESKTOP_WINDOW_APP_HANDLE_TAP(1998); DESKTOP_WINDOW_APP_HANDLE_TAP(1998), @UiEvent(doc = "Tap on the desktop mode option under app handle menu") DESKTOP_WINDOW_APP_HANDLE_MENU_TAP_TO_DESKTOP_MODE(1999), @UiEvent(doc = "Tap on the split screen option under app handle menu") DESKTOP_WINDOW_APP_HANDLE_MENU_TAP_TO_SPLIT_SCREEN(2000), @UiEvent(doc = "Tap on the full screen option under app handle menu") DESKTOP_WINDOW_APP_HANDLE_MENU_TAP_TO_FULL_SCREEN(2001), @UiEvent(doc = "When user successfully drags the app handle to desktop mode") DESKTOP_WINDOW_APP_HANDLE_DRAG_TO_DESKTOP_MODE(2002), @UiEvent(doc = "When user successfully drags the app handle to split screen") DESKTOP_WINDOW_APP_HANDLE_DRAG_TO_SPLIT_SCREEN(2003), @UiEvent(doc = "When user successfully drags the app handle to full screen") DESKTOP_WINDOW_APP_HANDLE_DRAG_TO_FULL_SCREEN(2004); override fun getId(): Int = mId } Loading libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt +18 −0 Original line number Diff line number Diff line Loading @@ -130,6 +130,7 @@ import java.util.concurrent.Executor import java.util.function.Consumer import com.android.wm.shell.desktopmode.DesktopModeEventLogger.Companion.InputMethod import com.android.wm.shell.desktopmode.DesktopModeEventLogger.Companion.ResizeTrigger import com.android.wm.shell.desktopmode.DesktopModeUiEventLogger.DesktopUiEventEnum import com.android.wm.shell.desktopmode.DragToDesktopTransitionHandler.Companion.DRAG_TO_DESKTOP_FINISH_ANIM_DURATION_MS import com.android.wm.shell.desktopmode.EnterDesktopTaskTransitionHandler.FREEFORM_ANIMATION_DURATION import com.android.wm.shell.desktopmode.ExitDesktopTaskTransitionHandler.FULLSCREEN_ANIMATION_DURATION Loading Loading @@ -166,6 +167,7 @@ class DesktopTasksController( private val interactionJankMonitor: InteractionJankMonitor, @ShellMainThread private val handler: Handler, private val desktopModeEventLogger: DesktopModeEventLogger, private val desktopModeUiEventLogger: DesktopModeUiEventLogger, private val desktopTilingDecorViewModel: DesktopTilingDecorViewModel, ) : RemoteCallable<DesktopTasksController>, Loading Loading @@ -2188,16 +2190,32 @@ class DesktopTasksController( // Start a new jank interaction for the drag release to desktop window animation. interactionJankMonitor.begin(taskSurface, context, handler, CUJ_DESKTOP_MODE_ENTER_APP_HANDLE_DRAG_RELEASE, "to_desktop") desktopModeUiEventLogger.log( taskInfo, DesktopUiEventEnum.DESKTOP_WINDOW_APP_HANDLE_DRAG_TO_DESKTOP_MODE ) finalizeDragToDesktop(taskInfo) } IndicatorType.NO_INDICATOR, IndicatorType.TO_FULLSCREEN_INDICATOR -> { desktopModeUiEventLogger.log( taskInfo, DesktopUiEventEnum.DESKTOP_WINDOW_APP_HANDLE_DRAG_TO_FULL_SCREEN ) cancelDragToDesktop(taskInfo) } IndicatorType.TO_SPLIT_LEFT_INDICATOR -> { desktopModeUiEventLogger.log( taskInfo, DesktopUiEventEnum.DESKTOP_WINDOW_APP_HANDLE_DRAG_TO_SPLIT_SCREEN ) requestSplit(taskInfo, leftOrTop = true) } IndicatorType.TO_SPLIT_RIGHT_INDICATOR -> { desktopModeUiEventLogger.log( taskInfo, DesktopUiEventEnum.DESKTOP_WINDOW_APP_HANDLE_DRAG_TO_SPLIT_SCREEN ) requestSplit(taskInfo, leftOrTop = false) } } Loading libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java +9 −0 Original line number Diff line number Diff line Loading @@ -644,6 +644,11 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel, decoration.addCaptionInset(wct); mDesktopTasksController.moveTaskToDesktop(taskId, wct, source); decoration.closeHandleMenu(); if (source == DesktopModeTransitionSource.APP_HANDLE_MENU_BUTTON) { mDesktopModeUiEventLogger.log(decoration.mTaskInfo, DesktopUiEventEnum.DESKTOP_WINDOW_APP_HANDLE_MENU_TAP_TO_DESKTOP_MODE); } } private void onToFullscreen(int taskId) { Loading @@ -659,6 +664,8 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel, mDesktopTasksController.moveToFullscreen(taskId, DesktopModeTransitionSource.APP_HANDLE_MENU_BUTTON); } mDesktopModeUiEventLogger.log(decoration.mTaskInfo, DesktopUiEventEnum.DESKTOP_WINDOW_APP_HANDLE_MENU_TAP_TO_FULL_SCREEN); } private void onToSplitScreen(int taskId) { Loading @@ -671,6 +678,8 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel, // we shouldn't receive input for it any longer. decoration.disposeStatusBarInputLayer(); mDesktopTasksController.requestSplit(decoration.mTaskInfo, false /* leftOrTop */); mDesktopModeUiEventLogger.log(decoration.mTaskInfo, DesktopUiEventEnum.DESKTOP_WINDOW_APP_HANDLE_MENU_TAP_TO_SPLIT_SCREEN); } private void onNewWindow(int taskId) { Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt +2 −0 Original line number Diff line number Diff line Loading @@ -220,6 +220,7 @@ class DesktopTasksControllerTest : ShellTestCase() { @Mock private lateinit var freeformTaskTransitionStarter: FreeformTaskTransitionStarter @Mock private lateinit var mockHandler: Handler @Mock private lateinit var desktopModeEventLogger: DesktopModeEventLogger @Mock private lateinit var desktopModeUiEventLogger: DesktopModeUiEventLogger @Mock lateinit var persistentRepository: DesktopPersistentRepository @Mock lateinit var motionEvent: MotionEvent @Mock lateinit var repositoryInitializer: DesktopRepositoryInitializer Loading Loading @@ -346,6 +347,7 @@ class DesktopTasksControllerTest : ShellTestCase() { mockInteractionJankMonitor, mockHandler, desktopModeEventLogger, desktopModeUiEventLogger, desktopTilingDecorViewModel, ) } Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/dagger/WMShellModule.java +2 −0 Original line number Diff line number Diff line Loading @@ -703,6 +703,7 @@ public abstract class WMShellModule { InputManager inputManager, FocusTransitionObserver focusTransitionObserver, DesktopModeEventLogger desktopModeEventLogger, DesktopModeUiEventLogger desktopModeUiEventLogger, DesktopTilingDecorViewModel desktopTilingDecorViewModel) { return new DesktopTasksController( context, Loading Loading @@ -733,6 +734,7 @@ public abstract class WMShellModule { interactionJankMonitor, mainHandler, desktopModeEventLogger, desktopModeUiEventLogger, desktopTilingDecorViewModel); } Loading
libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopModeUiEventLogger.kt +13 −1 Original line number Diff line number Diff line Loading @@ -106,7 +106,19 @@ class DesktopModeUiEventLogger( @UiEvent(doc = "Double tap on window header to maximize it in desktop windowing mode") DESKTOP_WINDOW_HEADER_DOUBLE_TAP_TO_MAXIMIZE(1724), @UiEvent(doc = "Tap on the window Handle to open the Handle Menu") DESKTOP_WINDOW_APP_HANDLE_TAP(1998); DESKTOP_WINDOW_APP_HANDLE_TAP(1998), @UiEvent(doc = "Tap on the desktop mode option under app handle menu") DESKTOP_WINDOW_APP_HANDLE_MENU_TAP_TO_DESKTOP_MODE(1999), @UiEvent(doc = "Tap on the split screen option under app handle menu") DESKTOP_WINDOW_APP_HANDLE_MENU_TAP_TO_SPLIT_SCREEN(2000), @UiEvent(doc = "Tap on the full screen option under app handle menu") DESKTOP_WINDOW_APP_HANDLE_MENU_TAP_TO_FULL_SCREEN(2001), @UiEvent(doc = "When user successfully drags the app handle to desktop mode") DESKTOP_WINDOW_APP_HANDLE_DRAG_TO_DESKTOP_MODE(2002), @UiEvent(doc = "When user successfully drags the app handle to split screen") DESKTOP_WINDOW_APP_HANDLE_DRAG_TO_SPLIT_SCREEN(2003), @UiEvent(doc = "When user successfully drags the app handle to full screen") DESKTOP_WINDOW_APP_HANDLE_DRAG_TO_FULL_SCREEN(2004); override fun getId(): Int = mId } Loading
libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DesktopTasksController.kt +18 −0 Original line number Diff line number Diff line Loading @@ -130,6 +130,7 @@ import java.util.concurrent.Executor import java.util.function.Consumer import com.android.wm.shell.desktopmode.DesktopModeEventLogger.Companion.InputMethod import com.android.wm.shell.desktopmode.DesktopModeEventLogger.Companion.ResizeTrigger import com.android.wm.shell.desktopmode.DesktopModeUiEventLogger.DesktopUiEventEnum import com.android.wm.shell.desktopmode.DragToDesktopTransitionHandler.Companion.DRAG_TO_DESKTOP_FINISH_ANIM_DURATION_MS import com.android.wm.shell.desktopmode.EnterDesktopTaskTransitionHandler.FREEFORM_ANIMATION_DURATION import com.android.wm.shell.desktopmode.ExitDesktopTaskTransitionHandler.FULLSCREEN_ANIMATION_DURATION Loading Loading @@ -166,6 +167,7 @@ class DesktopTasksController( private val interactionJankMonitor: InteractionJankMonitor, @ShellMainThread private val handler: Handler, private val desktopModeEventLogger: DesktopModeEventLogger, private val desktopModeUiEventLogger: DesktopModeUiEventLogger, private val desktopTilingDecorViewModel: DesktopTilingDecorViewModel, ) : RemoteCallable<DesktopTasksController>, Loading Loading @@ -2188,16 +2190,32 @@ class DesktopTasksController( // Start a new jank interaction for the drag release to desktop window animation. interactionJankMonitor.begin(taskSurface, context, handler, CUJ_DESKTOP_MODE_ENTER_APP_HANDLE_DRAG_RELEASE, "to_desktop") desktopModeUiEventLogger.log( taskInfo, DesktopUiEventEnum.DESKTOP_WINDOW_APP_HANDLE_DRAG_TO_DESKTOP_MODE ) finalizeDragToDesktop(taskInfo) } IndicatorType.NO_INDICATOR, IndicatorType.TO_FULLSCREEN_INDICATOR -> { desktopModeUiEventLogger.log( taskInfo, DesktopUiEventEnum.DESKTOP_WINDOW_APP_HANDLE_DRAG_TO_FULL_SCREEN ) cancelDragToDesktop(taskInfo) } IndicatorType.TO_SPLIT_LEFT_INDICATOR -> { desktopModeUiEventLogger.log( taskInfo, DesktopUiEventEnum.DESKTOP_WINDOW_APP_HANDLE_DRAG_TO_SPLIT_SCREEN ) requestSplit(taskInfo, leftOrTop = true) } IndicatorType.TO_SPLIT_RIGHT_INDICATOR -> { desktopModeUiEventLogger.log( taskInfo, DesktopUiEventEnum.DESKTOP_WINDOW_APP_HANDLE_DRAG_TO_SPLIT_SCREEN ) requestSplit(taskInfo, leftOrTop = false) } } Loading
libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/DesktopModeWindowDecorViewModel.java +9 −0 Original line number Diff line number Diff line Loading @@ -644,6 +644,11 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel, decoration.addCaptionInset(wct); mDesktopTasksController.moveTaskToDesktop(taskId, wct, source); decoration.closeHandleMenu(); if (source == DesktopModeTransitionSource.APP_HANDLE_MENU_BUTTON) { mDesktopModeUiEventLogger.log(decoration.mTaskInfo, DesktopUiEventEnum.DESKTOP_WINDOW_APP_HANDLE_MENU_TAP_TO_DESKTOP_MODE); } } private void onToFullscreen(int taskId) { Loading @@ -659,6 +664,8 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel, mDesktopTasksController.moveToFullscreen(taskId, DesktopModeTransitionSource.APP_HANDLE_MENU_BUTTON); } mDesktopModeUiEventLogger.log(decoration.mTaskInfo, DesktopUiEventEnum.DESKTOP_WINDOW_APP_HANDLE_MENU_TAP_TO_FULL_SCREEN); } private void onToSplitScreen(int taskId) { Loading @@ -671,6 +678,8 @@ public class DesktopModeWindowDecorViewModel implements WindowDecorViewModel, // we shouldn't receive input for it any longer. decoration.disposeStatusBarInputLayer(); mDesktopTasksController.requestSplit(decoration.mTaskInfo, false /* leftOrTop */); mDesktopModeUiEventLogger.log(decoration.mTaskInfo, DesktopUiEventEnum.DESKTOP_WINDOW_APP_HANDLE_MENU_TAP_TO_SPLIT_SCREEN); } private void onNewWindow(int taskId) { Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DesktopTasksControllerTest.kt +2 −0 Original line number Diff line number Diff line Loading @@ -220,6 +220,7 @@ class DesktopTasksControllerTest : ShellTestCase() { @Mock private lateinit var freeformTaskTransitionStarter: FreeformTaskTransitionStarter @Mock private lateinit var mockHandler: Handler @Mock private lateinit var desktopModeEventLogger: DesktopModeEventLogger @Mock private lateinit var desktopModeUiEventLogger: DesktopModeUiEventLogger @Mock lateinit var persistentRepository: DesktopPersistentRepository @Mock lateinit var motionEvent: MotionEvent @Mock lateinit var repositoryInitializer: DesktopRepositoryInitializer Loading Loading @@ -346,6 +347,7 @@ class DesktopTasksControllerTest : ShellTestCase() { mockInteractionJankMonitor, mockHandler, desktopModeEventLogger, desktopModeUiEventLogger, desktopTilingDecorViewModel, ) } Loading