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

Commit ffae07c2 authored by Alina Zaidi's avatar Alina Zaidi Committed by Android (Google) Code Review
Browse files

Merge "[logging] Correct Enter Desktop windowing by Screen On" into main

parents 5c586c41 632543e8
Loading
Loading
Loading
Loading
+17 −4
Original line number Diff line number Diff line
@@ -86,6 +86,10 @@ class DesktopModeLoggerTransitionObserver(
    // Caching whether the previous transition was exit to overview.
    private var wasPreviousTransitionExitToOverview: Boolean = false

    // Caching whether the previous transition was exit due to screen off. This helps check if a
    // following enter reason could be Screen On
    private var wasPreviousTransitionExitByScreenOff: Boolean = false

    // The instanceId for the current logging session
    private var loggerInstanceId: InstanceId? = null

@@ -337,9 +341,12 @@ class DesktopModeLoggerTransitionObserver(
    }

    /** Get [EnterReason] for this session enter */
    private fun getEnterReason(transitionInfo: TransitionInfo): EnterReason =
        when {
            transitionInfo.type == WindowManager.TRANSIT_WAKE -> EnterReason.SCREEN_ON
    private fun getEnterReason(transitionInfo: TransitionInfo): EnterReason {
       val enterReason = when {
            transitionInfo.type == WindowManager.TRANSIT_WAKE
                   // If there is a screen lock, desktop window entry is after dismissing keyguard
                   || (transitionInfo.type == WindowManager.TRANSIT_TO_BACK
                   && wasPreviousTransitionExitByScreenOff) -> EnterReason.SCREEN_ON
            transitionInfo.type == Transitions.TRANSIT_DESKTOP_MODE_END_DRAG_TO_DESKTOP ->
                EnterReason.APP_HANDLE_DRAG
            transitionInfo.type == TRANSIT_ENTER_DESKTOP_FROM_APP_HANDLE_MENU_BUTTON ->
@@ -367,11 +374,17 @@ class DesktopModeLoggerTransitionObserver(
                EnterReason.UNKNOWN_ENTER
            }
        }
        wasPreviousTransitionExitByScreenOff = false
        return enterReason
    }

    /** Get [ExitReason] for this session exit */
    private fun getExitReason(transitionInfo: TransitionInfo): ExitReason =
         when {
            transitionInfo.type == WindowManager.TRANSIT_SLEEP -> ExitReason.SCREEN_OFF
            transitionInfo.type == WindowManager.TRANSIT_SLEEP -> {
                wasPreviousTransitionExitByScreenOff = true
                ExitReason.SCREEN_OFF
            }
            transitionInfo.type == WindowManager.TRANSIT_CLOSE -> ExitReason.TASK_FINISHED
            transitionInfo.type == TRANSIT_EXIT_DESKTOP_MODE_TASK_DRAG -> ExitReason.DRAG_TO_EXIT
            transitionInfo.type == TRANSIT_EXIT_DESKTOP_MODE_HANDLE_MENU_BUTTON ->
+41 −0
Original line number Diff line number Diff line
@@ -348,6 +348,47 @@ class DesktopModeLoggerTransitionObserverTest : ShellTestCase() {
    verifyTaskAddedAndEnterLogging(EnterReason.SCREEN_ON, DEFAULT_TASK_UPDATE)
  }

  @Test
  fun transitBack_previousExitReasonScreenOff_logTaskAddedAndEnterReasonScreenOn() {
    val freeformTask = createTaskInfo(WINDOWING_MODE_FREEFORM)
    // Previous Exit reason recorded as Screen Off
    val sessionId = 1
    transitionObserver.addTaskInfosToCachedMap(freeformTask)
    transitionObserver.setLoggerSessionId(sessionId)
    callOnTransitionReady(TransitionInfoBuilder(TRANSIT_SLEEP).build())
    verifyTaskRemovedAndExitLogging(sessionId, ExitReason.SCREEN_OFF, DEFAULT_TASK_UPDATE)
    // Enter desktop through back transition, this happens when user enters after dismissing
    // keyguard
    val change = createChange(TRANSIT_TO_FRONT, freeformTask)
    val transitionInfo = TransitionInfoBuilder(TRANSIT_TO_BACK, 0).addChange(change).build()

    callOnTransitionReady(transitionInfo)

    verifyTaskAddedAndEnterLogging(EnterReason.SCREEN_ON, DEFAULT_TASK_UPDATE)
  }

  @Test
  fun transitEndDragToDesktop_previousExitReasonScreenOff_logTaskAddedAndEnterReasonAppDrag() {
    val freeformTask = createTaskInfo(WINDOWING_MODE_FREEFORM)
    // Previous Exit reason recorded as Screen Off
    val sessionId = 1
    transitionObserver.addTaskInfosToCachedMap(freeformTask)
    transitionObserver.setLoggerSessionId(sessionId)
    callOnTransitionReady(TransitionInfoBuilder(TRANSIT_SLEEP).build())
    verifyTaskRemovedAndExitLogging(sessionId, ExitReason.SCREEN_OFF, DEFAULT_TASK_UPDATE)

    // Enter desktop through app handle drag. This represents cases where instead of moving to
    // desktop right after turning the screen on, we move to fullscreen then move another task
    // to desktop
    val transitionInfo =
        TransitionInfoBuilder(Transitions.TRANSIT_DESKTOP_MODE_END_DRAG_TO_DESKTOP, 0)
            .addChange(createChange(TRANSIT_TO_FRONT, freeformTask))
            .build()
    callOnTransitionReady(transitionInfo)

    verifyTaskAddedAndEnterLogging(EnterReason.APP_HANDLE_DRAG, DEFAULT_TASK_UPDATE)
  }

  @Test
  fun transitSleep_logTaskRemovedAndExitReasonScreenOff_sessionIdNull() {
    val sessionId = 1