Loading libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipDragThenSnapTest.kt +21 −5 Original line number Diff line number Diff line Loading @@ -41,6 +41,9 @@ import org.junit.runners.Parameterized @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) class PipDragThenSnapTest(flicker: FlickerTest) : PipTransition(flicker){ // represents the direction in which the pip window should be snapping private var willSnapRight: Boolean = true override val transition: FlickerBuilder.() -> Unit get() = { val stringExtras: Map<String, String> = Loading @@ -55,9 +58,16 @@ class PipDragThenSnapTest(flicker: FlickerTest) : PipTransition(flicker){ RemoveAllTasksButHomeRule.removeAllTasksButHome() pipApp.launchViaIntentAndWaitForPip(wmHelper, stringExtras = stringExtras) val initRegion = pipApp.dragPipWindowAwayFromEdge(wmHelper, 50) // get the initial region bounds and cache them val initRegion = pipApp.getWindowRect(wmHelper) startBounds .set(initRegion.left, initRegion.top, initRegion.right, initRegion.bottom) // drag the pip window away from the edge pipApp.dragPipWindowAwayFromEdge(wmHelper, 50) // determine the direction in which the snapping should occur willSnapRight = pipApp.isCloserToRightEdge(wmHelper) } transitions { // continue the transition until the PIP snaps Loading @@ -65,14 +75,20 @@ class PipDragThenSnapTest(flicker: FlickerTest) : PipTransition(flicker){ } } /** Checks that the visible region area of [pipApp] always moves right during the animation. */ /** * Checks that the visible region area of [pipApp] moves to closest edge during the animation. */ @Postsubmit @Test fun pipLayerMovesRight() { fun pipLayerMovesToClosestEdge() { flicker.assertLayers { val pipLayerList = layers { pipApp.layerMatchesAnyOf(it) && it.isVisible } pipLayerList.zipWithNext { previous, current -> if (willSnapRight) { current.visibleRegion.isToTheRight(previous.visibleRegion.region) } else { previous.visibleRegion.isToTheRight(current.visibleRegion.region) } } } } Loading tests/FlickerTests/src/com/android/server/wm/flicker/helpers/PipAppHelper.kt +8 −7 Original line number Diff line number Diff line Loading @@ -61,9 +61,8 @@ open class PipAppHelper(instrumentation: Instrumentation) : * Drags the PIP window away from the screen edge while not crossing the display center. * * @throws IllegalStateException if default display bounds are not available * @return initial bounds of the PIP window */ fun dragPipWindowAwayFromEdge(wmHelper: WindowManagerStateHelper, steps: Int): Rect { fun dragPipWindowAwayFromEdge(wmHelper: WindowManagerStateHelper, steps: Int) { val initWindowRect = getWindowRect(wmHelper).clone() // initial pointer at the center of the window Loading @@ -83,8 +82,6 @@ open class PipAppHelper(instrumentation: Instrumentation) : // drag the window to the left but not beyond the center of the display uiDevice.drag(startX, y, endX, y, steps) return initWindowRect } /** Loading @@ -92,7 +89,7 @@ open class PipAppHelper(instrumentation: Instrumentation) : * * @throws IllegalStateException if default display bounds are not available */ private fun isCloserToRightEdge(wmHelper: WindowManagerStateHelper): Boolean { fun isCloserToRightEdge(wmHelper: WindowManagerStateHelper): Boolean { val windowRect = getWindowRect(wmHelper) val displayRect = wmHelper.currentState.wmState.getDefaultDisplay()?.displayRect Loading Loading @@ -267,7 +264,10 @@ open class PipAppHelper(instrumentation: Instrumentation) : closePipWindow(WindowManagerStateHelper(mInstrumentation)) } private fun getWindowRect(wmHelper: WindowManagerStateHelper): Rect { /** * Returns the pip window bounds. */ fun getWindowRect(wmHelper: WindowManagerStateHelper): Rect { val windowRegion = wmHelper.getWindowRegion(this) require(!windowRegion.isEmpty) { "Unable to find a PIP window in the current state" } return windowRegion.bounds Loading Loading @@ -354,7 +354,7 @@ open class PipAppHelper(instrumentation: Instrumentation) : /** * Waits until the PIP window snaps horizontally to the provided bounds. * * @param finalRightX the final x coordinate of the right edge of the pip window * @param finalBounds the bounds to wait for PIP window to snap to */ fun waitForPipToSnapTo(wmHelper: WindowManagerStateHelper, finalBounds: android.graphics.Rect) { wmHelper Loading @@ -369,6 +369,7 @@ open class PipAppHelper(instrumentation: Instrumentation) : return@add pipRegionBounds.left == finalBounds.left && pipRegionBounds.right == finalBounds.right } .add(ConditionsFactory.isWMStateComplete()) .waitForAndVerify() } Loading Loading
libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/PipDragThenSnapTest.kt +21 −5 Original line number Diff line number Diff line Loading @@ -41,6 +41,9 @@ import org.junit.runners.Parameterized @Parameterized.UseParametersRunnerFactory(FlickerParametersRunnerFactory::class) @FixMethodOrder(MethodSorters.NAME_ASCENDING) class PipDragThenSnapTest(flicker: FlickerTest) : PipTransition(flicker){ // represents the direction in which the pip window should be snapping private var willSnapRight: Boolean = true override val transition: FlickerBuilder.() -> Unit get() = { val stringExtras: Map<String, String> = Loading @@ -55,9 +58,16 @@ class PipDragThenSnapTest(flicker: FlickerTest) : PipTransition(flicker){ RemoveAllTasksButHomeRule.removeAllTasksButHome() pipApp.launchViaIntentAndWaitForPip(wmHelper, stringExtras = stringExtras) val initRegion = pipApp.dragPipWindowAwayFromEdge(wmHelper, 50) // get the initial region bounds and cache them val initRegion = pipApp.getWindowRect(wmHelper) startBounds .set(initRegion.left, initRegion.top, initRegion.right, initRegion.bottom) // drag the pip window away from the edge pipApp.dragPipWindowAwayFromEdge(wmHelper, 50) // determine the direction in which the snapping should occur willSnapRight = pipApp.isCloserToRightEdge(wmHelper) } transitions { // continue the transition until the PIP snaps Loading @@ -65,14 +75,20 @@ class PipDragThenSnapTest(flicker: FlickerTest) : PipTransition(flicker){ } } /** Checks that the visible region area of [pipApp] always moves right during the animation. */ /** * Checks that the visible region area of [pipApp] moves to closest edge during the animation. */ @Postsubmit @Test fun pipLayerMovesRight() { fun pipLayerMovesToClosestEdge() { flicker.assertLayers { val pipLayerList = layers { pipApp.layerMatchesAnyOf(it) && it.isVisible } pipLayerList.zipWithNext { previous, current -> if (willSnapRight) { current.visibleRegion.isToTheRight(previous.visibleRegion.region) } else { previous.visibleRegion.isToTheRight(current.visibleRegion.region) } } } } Loading
tests/FlickerTests/src/com/android/server/wm/flicker/helpers/PipAppHelper.kt +8 −7 Original line number Diff line number Diff line Loading @@ -61,9 +61,8 @@ open class PipAppHelper(instrumentation: Instrumentation) : * Drags the PIP window away from the screen edge while not crossing the display center. * * @throws IllegalStateException if default display bounds are not available * @return initial bounds of the PIP window */ fun dragPipWindowAwayFromEdge(wmHelper: WindowManagerStateHelper, steps: Int): Rect { fun dragPipWindowAwayFromEdge(wmHelper: WindowManagerStateHelper, steps: Int) { val initWindowRect = getWindowRect(wmHelper).clone() // initial pointer at the center of the window Loading @@ -83,8 +82,6 @@ open class PipAppHelper(instrumentation: Instrumentation) : // drag the window to the left but not beyond the center of the display uiDevice.drag(startX, y, endX, y, steps) return initWindowRect } /** Loading @@ -92,7 +89,7 @@ open class PipAppHelper(instrumentation: Instrumentation) : * * @throws IllegalStateException if default display bounds are not available */ private fun isCloserToRightEdge(wmHelper: WindowManagerStateHelper): Boolean { fun isCloserToRightEdge(wmHelper: WindowManagerStateHelper): Boolean { val windowRect = getWindowRect(wmHelper) val displayRect = wmHelper.currentState.wmState.getDefaultDisplay()?.displayRect Loading Loading @@ -267,7 +264,10 @@ open class PipAppHelper(instrumentation: Instrumentation) : closePipWindow(WindowManagerStateHelper(mInstrumentation)) } private fun getWindowRect(wmHelper: WindowManagerStateHelper): Rect { /** * Returns the pip window bounds. */ fun getWindowRect(wmHelper: WindowManagerStateHelper): Rect { val windowRegion = wmHelper.getWindowRegion(this) require(!windowRegion.isEmpty) { "Unable to find a PIP window in the current state" } return windowRegion.bounds Loading Loading @@ -354,7 +354,7 @@ open class PipAppHelper(instrumentation: Instrumentation) : /** * Waits until the PIP window snaps horizontally to the provided bounds. * * @param finalRightX the final x coordinate of the right edge of the pip window * @param finalBounds the bounds to wait for PIP window to snap to */ fun waitForPipToSnapTo(wmHelper: WindowManagerStateHelper, finalBounds: android.graphics.Rect) { wmHelper Loading @@ -369,6 +369,7 @@ open class PipAppHelper(instrumentation: Instrumentation) : return@add pipRegionBounds.left == finalBounds.left && pipRegionBounds.right == finalBounds.right } .add(ConditionsFactory.isWMStateComplete()) .waitForAndVerify() } Loading