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

Commit 9837bd5a authored by Chilun Huang's avatar Chilun Huang
Browse files

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
parent 1eb8a45e
Loading
Loading
Loading
Loading
+28 −7
Original line number Diff line number Diff line
@@ -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 {
                return@add primaryAppWindow.frame.bottom <= secondaryAppWindow.frame.top
                    primaryAppWindow.frame.right <= secondaryAppWindow.frame.left
                }
            } else {
                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 if (testSpec.isTablet) {
                    primaryVisibleRegion.bottom <= secondaryVisibleRegion.top
                } else {
                return@add primaryVisibleRegion.bottom <= secondaryVisibleRegion.top
                    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