From f42e8f8e6cd4d3b97a850906429b9e5b0b3eaa3b Mon Sep 17 00:00:00 2001 From: Nataniel Borges Date: Thu, 19 Jan 2023 11:42:41 +0000 Subject: [PATCH] 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 --- .../pip/EnterPipOnUserLeaveHintTest.kt | 55 ++++++++++++++----- .../wm/shell/flicker/pip/EnterPipTest.kt | 16 ++++-- .../pip/EnterPipToOtherOrientationTest.kt | 3 +- .../flicker/pip/ExitPipToAppTransition.kt | 14 ++++- .../flicker/pip/ExitPipWithSwipeDownTest.kt | 4 +- 5 files changed, 69 insertions(+), 23 deletions(-) diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipOnUserLeaveHintTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipOnUserLeaveHintTest.kt index 7aa40e7088504..82617dd84dfda 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipOnUserLeaveHintTest.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipOnUserLeaveHintTest.kt @@ -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) } } } diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipTest.kt index 5d7003fa46f46..33a64054e1ac0 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipTest.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipTest.kt @@ -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 */ diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipToOtherOrientationTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipToOtherOrientationTest.kt index 02d50f47288e6..afc41067c83bc 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipToOtherOrientationTest.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/EnterPipToOtherOrientationTest.kt @@ -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() diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipToAppTransition.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipToAppTransition.kt index 7466916a798a6..691b087d5dcb4 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipToAppTransition.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipToAppTransition.kt @@ -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) } } diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipWithSwipeDownTest.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipWithSwipeDownTest.kt index 54ad991dc2d2e..1b48965801e9b 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipWithSwipeDownTest.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/pip/ExitPipWithSwipeDownTest.kt @@ -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