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

Commit 4848701f authored by Behnam Heydarshahi's avatar Behnam Heydarshahi
Browse files

ShadeHeaderCtrl: only apply new window insets

This removes ~20 `NoRemeasureMotionLayout - measure` calls, improving
performance.

Bug: 389985793
Flag: EXEMPT bugfix
Test: ShadeHeaderControllerTest
Change-Id: Ifa9d7638d9c8f22a0235df21e01f823bdf1f3865
parent 1600fc4b
Loading
Loading
Loading
Loading
+11 −4
Original line number Diff line number Diff line
@@ -222,10 +222,14 @@ constructor(

    private val insetListener =
        View.OnApplyWindowInsetsListener { view, insets ->
            val windowInsets = WindowInsets(insets)
            if (windowInsets != lastInsets) {
                updateConstraintsForInsets(view as MotionLayout, insets)
            lastInsets = WindowInsets(insets)

                lastInsets = windowInsets
                view.onApplyWindowInsets(insets)
            } else {
                insets
            }
        }

    private var singleCarrier = false
@@ -508,6 +512,9 @@ constructor(
            systemIconsHoverContainer.setOnClickListener(null)
            systemIconsHoverContainer.isClickable = false
        }

        lastInsets?.let { updateConstraintsForInsets(header, it) }

        header.jumpToState(header.startState)
        updatePosition()
        updateScrollY()
+37 −0
Original line number Diff line number Diff line
@@ -808,6 +808,43 @@ class ShadeHeaderControllerTest : SysuiTestCase() {
        verify(mockConstraintsChanges.largeScreenConstraintsChanges)!!.invoke(any())
    }

    @Test
    fun sameInsetsTwice_listenerCallsOnApplyWindowInsetsOnlyOnce() {
        val windowInsets = createWindowInsets()

        val captor = ArgumentCaptor.forClass(View.OnApplyWindowInsetsListener::class.java)
        verify(view).setOnApplyWindowInsetsListener(capture(captor))

        val listener = captor.value

        listener.onApplyWindowInsets(view, windowInsets)

        verify(view, times(1)).onApplyWindowInsets(any())

        listener.onApplyWindowInsets(view, windowInsets)

        verify(view, times(1)).onApplyWindowInsets(any())
    }

    @Test
    fun twoDifferentInsets_listenerCallsOnApplyWindowInsetsTwice() {
        val windowInsets1 = WindowInsets(Rect(1, 2, 3, 4))
        val windowInsets2 = WindowInsets(Rect(5, 6, 7, 8))

        val captor = ArgumentCaptor.forClass(View.OnApplyWindowInsetsListener::class.java)
        verify(view).setOnApplyWindowInsetsListener(capture(captor))

        val listener = captor.value

        listener.onApplyWindowInsets(view, windowInsets1)

        verify(view, times(1)).onApplyWindowInsets(any())

        listener.onApplyWindowInsets(view, windowInsets2)

        verify(view, times(2)).onApplyWindowInsets(any())
    }

    @Test
    fun alarmIconNotIgnored() {
        verify(statusIcons, Mockito.never())