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

Commit 72575490 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Nav bar moves independently of the layer" into main

parents a6ea812d 0211241c
Loading
Loading
Loading
Loading
+45 −1
Original line number Diff line number Diff line
@@ -17,8 +17,12 @@
package com.android.server.wm.flicker.activityembedding.rotation

import android.platform.test.annotations.Presubmit
import android.tools.Position
import android.tools.datatypes.Rect
import android.tools.flicker.legacy.FlickerBuilder
import android.tools.flicker.legacy.LegacyFlickerTest
import android.tools.traces.Condition
import android.tools.traces.DeviceStateDump
import android.tools.traces.component.ComponentNameMatcher
import com.android.server.wm.flicker.activityembedding.ActivityEmbeddingTestBase
import com.android.server.wm.flicker.helpers.setRotation
@@ -30,7 +34,14 @@ abstract class RotationTransition(flicker: LegacyFlickerTest) : ActivityEmbeddin
    override val transition: FlickerBuilder.() -> Unit = {
        setup { this.setRotation(flicker.scenario.startRotation) }
        teardown { testApp.exit(wmHelper) }
        transitions { this.setRotation(flicker.scenario.endRotation) }
        transitions {
            this.setRotation(flicker.scenario.endRotation)
            if (!flicker.scenario.isTablet) {
                wmHelper.StateSyncBuilder()
                    .add(navBarInPosition(flicker.scenario.isGesturalNavigation))
                    .waitForAndVerify()
            }
        }
    }

    /** {@inheritDoc} */
@@ -76,4 +87,37 @@ abstract class RotationTransition(flicker: LegacyFlickerTest) : ActivityEmbeddin
        appLayerRotates_StartingPos()
        appLayerRotates_EndingPos()
    }

    private fun navBarInPosition(isGesturalNavigation: Boolean): Condition<DeviceStateDump> {
        return Condition("navBarPosition") { dump ->
            val display =
                dump.layerState.displays.filterNot { it.isOff }.minByOrNull { it.id }
                    ?: error("There is no display!")
            val displayArea = display.layerStackSpace
            val navBarPosition = display.navBarPosition(isGesturalNavigation)
            val navBarRegion = dump.layerState
                .getLayerWithBuffer(ComponentNameMatcher.NAV_BAR)
                ?.visibleRegion?.bounds ?: Rect.EMPTY

            when (navBarPosition) {
                Position.TOP ->
                    navBarRegion.top == displayArea.top &&
                        navBarRegion.left == displayArea.left &&
                        navBarRegion.right == displayArea.right
                Position.BOTTOM ->
                    navBarRegion.bottom == displayArea.bottom &&
                        navBarRegion.left == displayArea.left &&
                        navBarRegion.right == displayArea.right
                Position.LEFT ->
                    navBarRegion.left == displayArea.left &&
                        navBarRegion.top == displayArea.top &&
                        navBarRegion.bottom == displayArea.bottom
                Position.RIGHT ->
                    navBarRegion.right == displayArea.right &&
                        navBarRegion.top == displayArea.top &&
                        navBarRegion.bottom == displayArea.bottom
                else -> error("Unknown position $navBarPosition")
            }
        }
    }
}