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

Commit be5ebc1b authored by Nataniel Borges's avatar Nataniel Borges
Browse files

Fix navbar position assertion

Fixes: 284199070
Test: atest FlickerTestsRotation
Change-Id: I1d4e39959f5e7dddbfd08fab1f5c3ceb1f642267
parent ed03eab1
Loading
Loading
Loading
Loading
+33 −13
Original line number Diff line number Diff line
@@ -19,6 +19,8 @@
package com.android.server.wm.flicker

import android.tools.common.PlatformConsts
import android.tools.common.Position
import android.tools.common.flicker.subject.layers.LayerTraceEntrySubject
import android.tools.common.flicker.subject.region.RegionSubject
import android.tools.common.traces.component.ComponentNameMatcher
import android.tools.common.traces.component.IComponentNameMatcher
@@ -169,12 +171,7 @@ fun LegacyFlickerTest.statusBarLayerIsVisibleAtStartAndEnd() {
 */
fun LegacyFlickerTest.navBarLayerPositionAtStart() {
    assertLayersStart {
        val display =
            this.entry.displays.firstOrNull { !it.isVirtual } ?: error("There is no display!")
        this.visibleRegion(ComponentNameMatcher.NAV_BAR)
            .coversExactly(
                WindowUtils.getNavigationBarPosition(display, scenario.isGesturalNavigation)
            )
        assertNavBarPosition(this, scenario.isGesturalNavigation)
    }
}

@@ -184,13 +181,36 @@ fun LegacyFlickerTest.navBarLayerPositionAtStart() {
 */
fun LegacyFlickerTest.navBarLayerPositionAtEnd() {
    assertLayersEnd {
        assertNavBarPosition(this, scenario.isGesturalNavigation)
    }
}

private fun assertNavBarPosition(sfState: LayerTraceEntrySubject, isGesturalNavigation: Boolean) {
    val display =
            this.entry.displays.minByOrNull { it.id }
                ?: throw RuntimeException("There is no display!")
        this.visibleRegion(ComponentNameMatcher.NAV_BAR)
            .coversExactly(
                WindowUtils.getNavigationBarPosition(display, scenario.isGesturalNavigation)
            )
        sfState.entry.displays.filterNot { it.isOff }.minByOrNull { it.id }
            ?: error("There is no display!")
    val displayArea = display.layerStackSpace
    val navBarPosition = display.navBarPosition(isGesturalNavigation)
    val navBarRegion = sfState.visibleRegion(ComponentNameMatcher.NAV_BAR)

    when (navBarPosition) {
        Position.TOP ->
            navBarRegion.hasSameTopPosition(displayArea)
                .hasSameLeftPosition(displayArea)
                .hasSameRightPosition(displayArea)
        Position.BOTTOM ->
            navBarRegion.hasSameBottomPosition(displayArea)
                .hasSameLeftPosition(displayArea)
                .hasSameRightPosition(displayArea)
        Position.LEFT ->
            navBarRegion.hasSameLeftPosition(displayArea)
                .hasSameTopPosition(displayArea)
                .hasSameBottomPosition(displayArea)
        Position.RIGHT ->
            navBarRegion.hasSameRightPosition(displayArea)
                .hasSameTopPosition(displayArea)
                .hasSameBottomPosition(displayArea)
        else -> error("Unknown position $navBarPosition")
    }
}