Fix the validation of layer switch for tablet

The default split direction of tablet is different from phone. We can't
use "isRotated" to determine the split direction.

Bug: 249028038
Test: atest WMShellFlickerTests:SwitchAppByDoubleTapDivider

Change-Id: I11707b2433fe47608c387d8d8583263b725317f3
This commit is contained in:
Chilun Huang
2022-10-13 20:01:52 +08:00
parent 1eb8a45e72
commit 9837bd5a26

View File

@@ -26,7 +26,7 @@ import com.android.server.wm.flicker.FlickerParametersRunnerFactory
import com.android.server.wm.flicker.FlickerTestParameter
import com.android.server.wm.flicker.FlickerTestParameterFactory
import com.android.server.wm.flicker.dsl.FlickerBuilder
import com.android.server.wm.flicker.helpers.isRotated
import com.android.server.wm.flicker.helpers.WindowUtils
import com.android.server.wm.traces.parser.windowmanager.WindowManagerStateHelper
import com.android.wm.shell.flicker.SPLIT_SCREEN_DIVIDER_COMPONENT
import com.android.wm.shell.flicker.appWindowIsVisibleAtEnd
@@ -79,10 +79,18 @@ class SwitchAppByDoubleTapDivider(testSpec: FlickerTestParameter) : SplitScreenB
secondaryApp.windowMatchesAnyOf(window)
} ?: return@add false
if (testSpec.startRotation.isRotated()) {
return@add primaryAppWindow.frame.right <= secondaryAppWindow.frame.left
if (isLandscape(testSpec.endRotation)) {
return@add if (testSpec.isTablet) {
secondaryAppWindow.frame.right <= primaryAppWindow.frame.left
} else {
primaryAppWindow.frame.right <= secondaryAppWindow.frame.left
}
} else {
return@add primaryAppWindow.frame.bottom <= secondaryAppWindow.frame.top
return@add if (testSpec.isTablet) {
primaryAppWindow.frame.bottom <= secondaryAppWindow.frame.top
} else {
primaryAppWindow.frame.bottom <= secondaryAppWindow.frame.top
}
}
}.waitForAndVerify()
}
@@ -101,14 +109,27 @@ class SwitchAppByDoubleTapDivider(testSpec: FlickerTestParameter) : SplitScreenB
val secondaryVisibleRegion = secondaryAppLayer.visibleRegion?.bounds
?: return@add false
if (testSpec.startRotation.isRotated()) {
return@add primaryVisibleRegion.right <= secondaryVisibleRegion.left
if (isLandscape(testSpec.endRotation)) {
return@add if (testSpec.isTablet) {
secondaryVisibleRegion.right <= primaryVisibleRegion.left
} else {
primaryVisibleRegion.right <= secondaryVisibleRegion.left
}
} else {
return@add primaryVisibleRegion.bottom <= secondaryVisibleRegion.top
return@add if (testSpec.isTablet) {
primaryVisibleRegion.bottom <= secondaryVisibleRegion.top
} else {
primaryVisibleRegion.bottom <= secondaryVisibleRegion.top
}
}
}.waitForAndVerify()
}
private fun isLandscape(rotation: Int): Boolean {
val displayBounds = WindowUtils.getDisplayBounds(rotation)
return displayBounds.width > displayBounds.height
}
@IwTest(focusArea = "sysui")
@Presubmit
@Test