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

Commit 7932f9e4 authored by Omar Elmekkawy's avatar Omar Elmekkawy Committed by Android Build Coastguard Worker
Browse files

Early out if the changes list is empty in onTransitionReady

In some corner cases, the change list is empty, we should early out in those cases.

Flag: EXEMPT BUGFIX
Test: on device testing
Bug: 445115698
Cherrypick-From: https://googleplex-android-review.googlesource.com/q/commit:605edd7e2f2c93bdf6112def725ea46c3f2369aa
Merged-In: I69f8a432d059db70bad5e03e83a82dfa8be397ef
Change-Id: I69f8a432d059db70bad5e03e83a82dfa8be397ef
parent 391b568c
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -168,7 +168,9 @@ class DesktopDisplayEventHandler(
        startTransaction: SurfaceControl.Transaction,
        finishTransaction: SurfaceControl.Transaction,
    ) {
        if (info.changes.isEmpty()) return
        val displayId = info.changes[0].endDisplayId
        if (displayId !in displayConfigById) return
        val config = displayConfigById[displayId]
        if (info.type == TRANSIT_CHANGE) {
            resizeTasksIfPreconditionsSatisfied(displayId, config, true)
+28 −0
Original line number Diff line number Diff line
@@ -22,7 +22,9 @@ import android.platform.test.annotations.EnableFlags
import android.testing.AndroidTestingRunner
import android.view.Display
import android.view.Display.DEFAULT_DISPLAY
import android.view.WindowManager.TRANSIT_CHANGE
import android.window.DisplayAreaInfo
import android.window.TransitionInfo
import androidx.test.filters.SmallTest
import com.android.server.display.feature.flags.Flags as DisplayFlags
import com.android.window.flags.Flags
@@ -60,6 +62,7 @@ import org.mockito.Mockito.spy
import org.mockito.Mockito.times
import org.mockito.Mockito.verify
import org.mockito.kotlin.any
import org.mockito.kotlin.anyOrNull
import org.mockito.kotlin.argumentCaptor
import org.mockito.kotlin.clearInvocations
import org.mockito.kotlin.eq
@@ -181,6 +184,31 @@ class DesktopDisplayEventHandlerTest : ShellTestCase() {
                .warmUpDefaultDesk(DEFAULT_DISPLAY, mockDesktopRepository.userId)
        }

    @Test
    fun onTransitionReady_emptyChanges_doesNothing() {
        val info = TransitionInfo(TRANSIT_CHANGE, 0)

        handler.onTransitionReady(mock(), info, mock(), mock())

        verify(mockDesktopTasksController, never())
            .onDisplayDpiChanging(any(), anyOrNull(), anyOrNull())
        verify(transitions, never()).unregisterObserver(any())
    }

    @Test
    fun onTransitionReady_displayIdNotInConfig_doesNothing() {
        val info = TransitionInfo(TRANSIT_CHANGE, 0)
        val mockChange: TransitionInfo.Change = mock()
        info.changes.add(mockChange)
        whenever(mockChange.endDisplayId).thenReturn(externalDisplayId)

        handler.onTransitionReady(mock(), info, mock(), mock())

        verify(mockDesktopTasksController, never())
            .onDisplayDpiChanging(any(), anyOrNull(), anyOrNull())
        verify(transitions, never()).unregisterObserver(any())
    }

    @Test
    @EnableFlags(
        Flags.FLAG_ENABLE_MULTIPLE_DESKTOPS_BACKEND,