Support layer occlusion with rounded corners

Currently, when a layer is covered by another with rounded corners, both are marked only as covered and never as occluded. With the change in flickerlib to support occlusion in this state (SF fix still pending) the test needs to be updated to reflect this scenario

Also, disable flaky flicker test because of recent regression

Test: atest WMShellFlickerTests
Bug: 265007895
Change-Id: I98b97ef3e2d6cbe084811ca7e658fa6d590a8060
This commit is contained in:
Nataniel Borges
2023-01-19 11:42:41 +00:00
parent 7bf48dc5a7
commit f42e8f8e6c
5 changed files with 69 additions and 23 deletions

View File

@@ -82,13 +82,33 @@ open class EnterPipOnUserLeaveHintTest(flicker: FlickerTest) : EnterPipTest(flic
@Presubmit
@Test
override fun pipAppLayerAlwaysVisible() {
if (!flicker.scenario.isGesturalNavigation) super.pipAppLayerAlwaysVisible()
else {
// pip layer in gesture nav will disappear during transition
flicker.assertLayers {
this.isVisible(pipApp).then().isInvisible(pipApp).then().isVisible(pipApp)
}
override fun pipAppLayerOrOverlayAlwaysVisible() {
// pip layer in gesture nav will disappear during transition
Assume.assumeFalse(flicker.scenario.isGesturalNavigation)
super.pipAppLayerOrOverlayAlwaysVisible()
}
@Presubmit
@Test
fun pipAppWindowVisibleChanges() {
// pip layer in gesture nav will disappear during transition
Assume.assumeTrue(flicker.scenario.isGesturalNavigation)
flicker.assertWm {
this.isAppWindowVisible(pipApp)
.then()
.isAppWindowInvisible(pipApp, isOptional = true)
.then()
.isAppWindowVisible(pipApp, isOptional = true)
}
}
@Presubmit
@Test
fun pipAppLayerVisibleChanges() {
Assume.assumeTrue(flicker.scenario.isGesturalNavigation)
// pip layer in gesture nav will disappear during transition
flicker.assertLayers {
this.isVisible(pipApp).then().isInvisible(pipApp).then().isVisible(pipApp)
}
}
@@ -116,12 +136,19 @@ open class EnterPipOnUserLeaveHintTest(flicker: FlickerTest) : EnterPipTest(flic
@Presubmit
@Test
override fun pipLayerRemainInsideVisibleBounds() {
if (!flicker.scenario.isGesturalNavigation) super.pipLayerRemainInsideVisibleBounds()
else {
// pip layer in gesture nav will disappear during transition
flicker.assertLayersStart { this.visibleRegion(pipApp).coversAtMost(displayBounds) }
flicker.assertLayersEnd { this.visibleRegion(pipApp).coversAtMost(displayBounds) }
}
override fun pipLayerOrOverlayRemainInsideVisibleBounds() {
// pip layer in gesture nav will disappear during transition
Assume.assumeFalse(flicker.scenario.isGesturalNavigation)
super.pipLayerOrOverlayRemainInsideVisibleBounds()
}
@Presubmit
@Test
fun pipLayerRemainInsideVisibleBounds() {
// pip layer in gesture nav will disappear during transition
Assume.assumeTrue(flicker.scenario.isGesturalNavigation)
// pip layer in gesture nav will disappear during transition
flicker.assertLayersStart { this.visibleRegion(pipApp).coversAtMost(displayBounds) }
flicker.assertLayersEnd { this.visibleRegion(pipApp).coversAtMost(displayBounds) }
}
}

View File

@@ -74,8 +74,14 @@ open class EnterPipTest(flicker: FlickerTest) : PipTransition(flicker) {
/** Checks [pipApp] layer remains visible throughout the animation */
@Presubmit
@Test
open fun pipAppLayerAlwaysVisible() {
flicker.assertLayers { this.isVisible(pipApp) }
open fun pipAppLayerOrOverlayAlwaysVisible() {
flicker.assertLayers {
this.isVisible(pipApp)
.then()
.isVisible(ComponentNameMatcher.PIP_CONTENT_OVERLAY)
.then()
.isVisible(pipApp)
}
}
/**
@@ -94,8 +100,10 @@ open class EnterPipTest(flicker: FlickerTest) : PipTransition(flicker) {
*/
@Presubmit
@Test
open fun pipLayerRemainInsideVisibleBounds() {
flicker.assertLayersVisibleRegion(pipApp) { coversAtMost(displayBounds) }
open fun pipLayerOrOverlayRemainInsideVisibleBounds() {
flicker.assertLayersVisibleRegion(pipApp.or(ComponentNameMatcher.PIP_CONTENT_OVERLAY) ) {
coversAtMost(displayBounds)
}
}
/** Checks that the visible region of [pipApp] always reduces during the animation */

View File

@@ -17,6 +17,7 @@
package com.android.wm.shell.flicker.pip
import android.app.Activity
import android.platform.test.annotations.FlakyTest
import android.platform.test.annotations.Postsubmit
import android.platform.test.annotations.Presubmit
import androidx.test.filters.RequiresDevice
@@ -197,7 +198,7 @@ open class EnterPipToOtherOrientationTest(flicker: FlickerTest) : PipTransition(
}
/** {@inheritDoc} */
@Presubmit
@FlakyTest(bugId = 267424412)
@Test
override fun visibleLayersShownMoreThanOneConsecutiveEntry() =
super.visibleLayersShownMoreThanOneConsecutiveEntry()

View File

@@ -19,6 +19,7 @@ package com.android.wm.shell.flicker.pip
import android.platform.test.annotations.Presubmit
import com.android.server.wm.flicker.FlickerTest
import com.android.server.wm.flicker.helpers.SimpleAppHelper
import com.android.server.wm.traces.common.ComponentNameMatcher
import org.junit.Test
/** Base class for pip expand tests */
@@ -32,7 +33,9 @@ abstract class ExitPipToAppTransition(flicker: FlickerTest) : PipTransition(flic
@Presubmit
@Test
open fun pipAppWindowRemainInsideVisibleBounds() {
flicker.assertWmVisibleRegion(pipApp) { coversAtMost(displayBounds) }
flicker.assertWmVisibleRegion(pipApp.or(ComponentNameMatcher.TRANSITION_SNAPSHOT)) {
coversAtMost(displayBounds)
}
}
/**
@@ -42,7 +45,9 @@ abstract class ExitPipToAppTransition(flicker: FlickerTest) : PipTransition(flic
@Presubmit
@Test
open fun pipAppLayerRemainInsideVisibleBounds() {
flicker.assertLayersVisibleRegion(pipApp) { coversAtMost(displayBounds) }
flicker.assertLayersVisibleRegion(pipApp.or(ComponentNameMatcher.TRANSITION_SNAPSHOT)) {
coversAtMost(displayBounds)
}
}
/**
@@ -72,7 +77,10 @@ abstract class ExitPipToAppTransition(flicker: FlickerTest) : PipTransition(flic
@Test
open fun showBothAppLayersThenHidePip() {
flicker.assertLayers {
isVisible(testApp).isVisible(pipApp).then().isInvisible(testApp).isVisible(pipApp)
isVisible(testApp)
.isVisible(pipApp.or(ComponentNameMatcher.TRANSITION_SNAPSHOT))
.then()
.isInvisible(testApp).isVisible(pipApp)
}
}

View File

@@ -76,7 +76,9 @@ open class ExitPipWithSwipeDownTest(flicker: FlickerTest) : ExitPipTransition(fl
?.height
?: error("Couldn't find Nav or Task bar layer")
// The dismiss button doesn't appear at the complete bottom of the screen,
val displayY = device.displayHeight - barLayerHeight
// it appears above the hot seat but `hotseatBarSize` is not available outside
// the platform
val displayY = (device.displayHeight * 0.9).toInt() - barLayerHeight
device.swipe(pipCenterX, pipCenterY, displayCenterX, displayY, 50)
// Wait until the other app is no longer visible
wmHelper