Loading libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DragToDesktopTransitionHandler.kt +7 −2 Original line number Diff line number Diff line Loading @@ -629,15 +629,20 @@ sealed class DragToDesktopTransitionHandler( finishTransaction: SurfaceControl.Transaction? ) { val state = transitionState ?: return if (aborted && state.startTransitionToken == transition) { if (!aborted) { return } if (state.startTransitionToken == transition) { ProtoLog.v( ShellProtoLogGroup.WM_SHELL_DESKTOP_MODE, "DragToDesktop: onTransitionConsumed() start transition aborted" ) state.startAborted = true // Cancel CUJ interaction if the transition is aborted. // The start-transition (DRAG_HOLD) is aborted, cancel its jank interaction. interactionJankMonitor.cancel(CUJ_DESKTOP_MODE_ENTER_APP_HANDLE_DRAG_HOLD) } else if (state.cancelTransitionToken != transition) { // This transition being aborted is neither the start, nor the cancel transition, so // it must be the finish transition (DRAG_RELEASE); cancel its jank interaction. interactionJankMonitor.cancel(CUJ_DESKTOP_MODE_ENTER_APP_HANDLE_DRAG_RELEASE) } } Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DragToDesktopTransitionHandlerTest.kt +38 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,8 @@ import android.window.TransitionInfo.FLAG_IS_WALLPAPER import android.window.WindowContainerTransaction import androidx.test.filters.SmallTest import com.android.dx.mockito.inline.extended.ExtendedMockito import com.android.internal.jank.Cuj.CUJ_DESKTOP_MODE_ENTER_APP_HANDLE_DRAG_HOLD import com.android.internal.jank.Cuj.CUJ_DESKTOP_MODE_ENTER_APP_HANDLE_DRAG_RELEASE import com.android.internal.jank.InteractionJankMonitor import com.android.wm.shell.RootTaskDisplayAreaOrganizer import com.android.wm.shell.ShellTestCase Loading Loading @@ -448,6 +450,42 @@ class DragToDesktopTransitionHandlerTest : ShellTestCase() { ) } @Test fun startDragToDesktop_aborted_logsDragHoldCancelled() { val transition = startDragToDesktopTransition(defaultHandler, createTask(), dragAnimator) defaultHandler.onTransitionConsumed(transition, aborted = true, mock()) verify(mockInteractionJankMonitor).cancel(eq(CUJ_DESKTOP_MODE_ENTER_APP_HANDLE_DRAG_HOLD)) verify(mockInteractionJankMonitor, times(0)).cancel( eq(CUJ_DESKTOP_MODE_ENTER_APP_HANDLE_DRAG_RELEASE)) } @Test fun mergeEndDragToDesktop_aborted_logsDragReleaseCancelled() { val task = createTask() val startTransition = startDrag(defaultHandler, task) val endTransition = mock<IBinder>() defaultHandler.onTaskResizeAnimationListener = mock() defaultHandler.mergeAnimation( transition = endTransition, info = createTransitionInfo( type = TRANSIT_DESKTOP_MODE_END_DRAG_TO_DESKTOP, draggedTask = task ), t = mock<SurfaceControl.Transaction>(), mergeTarget = startTransition, finishCallback = mock<Transitions.TransitionFinishCallback>() ) defaultHandler.onTransitionConsumed(endTransition, aborted = true, mock()) verify(mockInteractionJankMonitor) .cancel(eq(CUJ_DESKTOP_MODE_ENTER_APP_HANDLE_DRAG_RELEASE)) verify(mockInteractionJankMonitor, times(0)) .cancel(eq(CUJ_DESKTOP_MODE_ENTER_APP_HANDLE_DRAG_HOLD)) } private fun startDrag( handler: DragToDesktopTransitionHandler, task: RunningTaskInfo = createTask(), Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/desktopmode/DragToDesktopTransitionHandler.kt +7 −2 Original line number Diff line number Diff line Loading @@ -629,15 +629,20 @@ sealed class DragToDesktopTransitionHandler( finishTransaction: SurfaceControl.Transaction? ) { val state = transitionState ?: return if (aborted && state.startTransitionToken == transition) { if (!aborted) { return } if (state.startTransitionToken == transition) { ProtoLog.v( ShellProtoLogGroup.WM_SHELL_DESKTOP_MODE, "DragToDesktop: onTransitionConsumed() start transition aborted" ) state.startAborted = true // Cancel CUJ interaction if the transition is aborted. // The start-transition (DRAG_HOLD) is aborted, cancel its jank interaction. interactionJankMonitor.cancel(CUJ_DESKTOP_MODE_ENTER_APP_HANDLE_DRAG_HOLD) } else if (state.cancelTransitionToken != transition) { // This transition being aborted is neither the start, nor the cancel transition, so // it must be the finish transition (DRAG_RELEASE); cancel its jank interaction. interactionJankMonitor.cancel(CUJ_DESKTOP_MODE_ENTER_APP_HANDLE_DRAG_RELEASE) } } Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/desktopmode/DragToDesktopTransitionHandlerTest.kt +38 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,8 @@ import android.window.TransitionInfo.FLAG_IS_WALLPAPER import android.window.WindowContainerTransaction import androidx.test.filters.SmallTest import com.android.dx.mockito.inline.extended.ExtendedMockito import com.android.internal.jank.Cuj.CUJ_DESKTOP_MODE_ENTER_APP_HANDLE_DRAG_HOLD import com.android.internal.jank.Cuj.CUJ_DESKTOP_MODE_ENTER_APP_HANDLE_DRAG_RELEASE import com.android.internal.jank.InteractionJankMonitor import com.android.wm.shell.RootTaskDisplayAreaOrganizer import com.android.wm.shell.ShellTestCase Loading Loading @@ -448,6 +450,42 @@ class DragToDesktopTransitionHandlerTest : ShellTestCase() { ) } @Test fun startDragToDesktop_aborted_logsDragHoldCancelled() { val transition = startDragToDesktopTransition(defaultHandler, createTask(), dragAnimator) defaultHandler.onTransitionConsumed(transition, aborted = true, mock()) verify(mockInteractionJankMonitor).cancel(eq(CUJ_DESKTOP_MODE_ENTER_APP_HANDLE_DRAG_HOLD)) verify(mockInteractionJankMonitor, times(0)).cancel( eq(CUJ_DESKTOP_MODE_ENTER_APP_HANDLE_DRAG_RELEASE)) } @Test fun mergeEndDragToDesktop_aborted_logsDragReleaseCancelled() { val task = createTask() val startTransition = startDrag(defaultHandler, task) val endTransition = mock<IBinder>() defaultHandler.onTaskResizeAnimationListener = mock() defaultHandler.mergeAnimation( transition = endTransition, info = createTransitionInfo( type = TRANSIT_DESKTOP_MODE_END_DRAG_TO_DESKTOP, draggedTask = task ), t = mock<SurfaceControl.Transaction>(), mergeTarget = startTransition, finishCallback = mock<Transitions.TransitionFinishCallback>() ) defaultHandler.onTransitionConsumed(endTransition, aborted = true, mock()) verify(mockInteractionJankMonitor) .cancel(eq(CUJ_DESKTOP_MODE_ENTER_APP_HANDLE_DRAG_RELEASE)) verify(mockInteractionJankMonitor, times(0)) .cancel(eq(CUJ_DESKTOP_MODE_ENTER_APP_HANDLE_DRAG_HOLD)) } private fun startDrag( handler: DragToDesktopTransitionHandler, task: RunningTaskInfo = createTask(), Loading