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

Commit 632543e8 authored by Alina Zaidi's avatar Alina Zaidi
Browse files

[logging] Correct Enter Desktop windowing by Screen On

Previously Screen On to enter DW got logged as UNKNOWN reason often.

This happened when device gets locked on Screen off and instead of WAKE transition we have a BACK transition from keyguard.

Test: Tested locally on go/atomviewer and added unit tests
Bug: 361082583
Flag: EXEMPT bug fix
Change-Id: I994dbcbcc955aeb687a373113be91b11c2dc3a72
parent cc408f1c
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