diff options
| author | 2025-02-28 18:59:59 +0000 | |
|---|---|---|
| committer | 2025-03-01 20:04:15 -0800 | |
| commit | 494ce82367b87c7e3816d5ee18998f500034156f (patch) | |
| tree | 779ac84f6f5c582c76bddeb36723184686b97160 | |
| parent | ccb979d47754ec6dfaa42594becd5bb693bec68e (diff) | |
Fix split tests for devices with left/right split in portrait
- Update tests to reflect left/right split changes for certain
device types
Bug: 398918267
Flag: EXEMPT bugfix
Test: Test with phones/landscape-foldables/portrait-foldables:
Test: atest com.android.wm.shell.SwitchAppByDoubleTapDividerGesturalNavLandscape
Test: atest com.android.wm.shell.SwitchAppByDoubleTapDividerGesturalNavPortrait
Change-Id: Iddd4f39a7a3e673a72f9bee13528a5f43d156d13
3 files changed, 38 insertions, 28 deletions
diff --git a/libs/WindowManager/Shell/tests/e2e/splitscreen/flicker-legacy/src/com/android/wm/shell/flicker/splitscreen/benchmark/SwitchAppByDoubleTapDividerBenchmark.kt b/libs/WindowManager/Shell/tests/e2e/splitscreen/flicker-legacy/src/com/android/wm/shell/flicker/splitscreen/benchmark/SwitchAppByDoubleTapDividerBenchmark.kt index 6a6aa1abc9f3..fa9864b539ee 100644 --- a/libs/WindowManager/Shell/tests/e2e/splitscreen/flicker-legacy/src/com/android/wm/shell/flicker/splitscreen/benchmark/SwitchAppByDoubleTapDividerBenchmark.kt +++ b/libs/WindowManager/Shell/tests/e2e/splitscreen/flicker-legacy/src/com/android/wm/shell/flicker/splitscreen/benchmark/SwitchAppByDoubleTapDividerBenchmark.kt @@ -17,15 +17,15 @@ package com.android.wm.shell.flicker.splitscreen.benchmark import android.tools.NavBar -import android.tools.Rotation import android.tools.flicker.junit.FlickerParametersRunnerFactory import android.tools.flicker.legacy.FlickerBuilder import android.tools.flicker.legacy.LegacyFlickerTest import android.tools.flicker.legacy.LegacyFlickerTestFactory -import android.tools.helpers.WindowUtils import android.tools.traces.parsers.WindowManagerStateHelper import androidx.test.filters.RequiresDevice +import androidx.test.uiautomator.UiDevice import com.android.wm.shell.flicker.utils.SplitScreenUtils +import com.android.wm.shell.flicker.utils.SplitScreenUtils.isLeftRightSplit import org.junit.FixMethodOrder import org.junit.runner.RunWith import org.junit.runners.MethodSorters @@ -37,6 +37,8 @@ import org.junit.runners.Parameterized @FixMethodOrder(MethodSorters.NAME_ASCENDING) abstract class SwitchAppByDoubleTapDividerBenchmark(override val flicker: LegacyFlickerTest) : SplitScreenBase(flicker) { + private val device = UiDevice.getInstance(instrumentation) + protected val thisTransition: FlickerBuilder.() -> Unit get() = { setup { @@ -73,7 +75,8 @@ abstract class SwitchAppByDoubleTapDividerBenchmark(override val flicker: Legacy } ?: return@add false - if (isLandscape(flicker.scenario.endRotation)) { + if (isLeftRightSplit(instrumentation.context, flicker.scenario.endRotation, + device.displaySizeDp)) { return@add if (flicker.scenario.isTablet) { secondaryAppWindow.frame.right <= primaryAppWindow.frame.left } else { @@ -109,7 +112,8 @@ abstract class SwitchAppByDoubleTapDividerBenchmark(override val flicker: Legacy val secondaryVisibleRegion = secondaryAppLayer.visibleRegion?.bounds ?: return@add false - if (isLandscape(flicker.scenario.endRotation)) { + if (isLeftRightSplit(instrumentation.context, flicker.scenario.endRotation, + device.displaySizeDp)) { return@add if (flicker.scenario.isTablet) { secondaryVisibleRegion.right <= primaryVisibleRegion.left } else { @@ -126,11 +130,6 @@ abstract class SwitchAppByDoubleTapDividerBenchmark(override val flicker: Legacy .waitForAndVerify() } - private fun isLandscape(rotation: Rotation): Boolean { - val displayBounds = WindowUtils.getDisplayBounds(rotation) - return displayBounds.width() > displayBounds.height() - } - companion object { @Parameterized.Parameters(name = "{0}") @JvmStatic diff --git a/libs/WindowManager/Shell/tests/e2e/splitscreen/scenarios/src/com/android/wm/shell/scenarios/SwitchAppByDoubleTapDivider.kt b/libs/WindowManager/Shell/tests/e2e/splitscreen/scenarios/src/com/android/wm/shell/scenarios/SwitchAppByDoubleTapDivider.kt index 26203d4afccd..3fd93d3eaf59 100644 --- a/libs/WindowManager/Shell/tests/e2e/splitscreen/scenarios/src/com/android/wm/shell/scenarios/SwitchAppByDoubleTapDivider.kt +++ b/libs/WindowManager/Shell/tests/e2e/splitscreen/scenarios/src/com/android/wm/shell/scenarios/SwitchAppByDoubleTapDivider.kt @@ -17,16 +17,16 @@ package com.android.wm.shell.scenarios import android.app.Instrumentation -import android.graphics.Point import android.tools.NavBar import android.tools.Rotation -import android.tools.helpers.WindowUtils import android.tools.traces.parsers.WindowManagerStateHelper import androidx.test.platform.app.InstrumentationRegistry import androidx.test.uiautomator.UiDevice import com.android.launcher3.tapl.LauncherInstrumentation import com.android.wm.shell.Utils import com.android.wm.shell.flicker.utils.SplitScreenUtils +import com.android.wm.shell.flicker.utils.SplitScreenUtils.isLeftRightSplit +import com.android.wm.shell.flicker.utils.SplitScreenUtils.isTablet import org.junit.After import org.junit.Before import org.junit.Ignore @@ -89,14 +89,14 @@ constructor(val rotation: Rotation = Rotation.ROTATION_0) { } ?: return@add false - if (isLandscape(rotation)) { - return@add if (isTablet()) { + if (isLeftRightSplit(instrumentation.context, rotation, device.displaySizeDp)) { + return@add if (isTablet(device.displaySizeDp)) { secondaryAppWindow.frame.right <= primaryAppWindow.frame.left } else { primaryAppWindow.frame.right <= secondaryAppWindow.frame.left } } else { - return@add if (isTablet()) { + return@add if (isTablet(device.displaySizeDp)) { primaryAppWindow.frame.bottom <= secondaryAppWindow.frame.top } else { primaryAppWindow.frame.bottom <= secondaryAppWindow.frame.top @@ -125,14 +125,14 @@ constructor(val rotation: Rotation = Rotation.ROTATION_0) { val secondaryVisibleRegion = secondaryAppLayer.visibleRegion?.bounds ?: return@add false - if (isLandscape(rotation)) { - return@add if (isTablet()) { + if (isLeftRightSplit(instrumentation.context, rotation, device.displaySizeDp)) { + return@add if (isTablet(device.displaySizeDp)) { secondaryVisibleRegion.right <= primaryVisibleRegion.left } else { primaryVisibleRegion.right <= secondaryVisibleRegion.left } } else { - return@add if (isTablet()) { + return@add if (isTablet(device.displaySizeDp)) { primaryVisibleRegion.bottom <= secondaryVisibleRegion.top } else { primaryVisibleRegion.bottom <= secondaryVisibleRegion.top @@ -141,15 +141,4 @@ constructor(val rotation: Rotation = Rotation.ROTATION_0) { } .waitForAndVerify() } - - private fun isLandscape(rotation: Rotation): Boolean { - val displayBounds = WindowUtils.getDisplayBounds(rotation) - return displayBounds.width() > displayBounds.height() - } - - private fun isTablet(): Boolean { - val sizeDp: Point = device.displaySizeDp - val LARGE_SCREEN_DP_THRESHOLD = 600 - return sizeDp.x >= LARGE_SCREEN_DP_THRESHOLD && sizeDp.y >= LARGE_SCREEN_DP_THRESHOLD - } } diff --git a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/utils/SplitScreenUtils.kt b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/utils/SplitScreenUtils.kt index feb3edc9dab7..49d6877a1654 100644 --- a/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/utils/SplitScreenUtils.kt +++ b/libs/WindowManager/Shell/tests/flicker/src/com/android/wm/shell/flicker/utils/SplitScreenUtils.kt @@ -17,12 +17,14 @@ package com.android.wm.shell.flicker.utils import android.app.Instrumentation +import android.content.Context import android.graphics.Point import android.os.SystemClock import android.tools.Rotation import android.tools.device.apphelpers.IStandardAppHelper import android.tools.device.apphelpers.StandardAppHelper import android.tools.flicker.rules.ChangeDisplayOrientationRule +import android.tools.helpers.WindowUtils import android.tools.traces.component.ComponentNameMatcher import android.tools.traces.component.IComponentMatcher import android.tools.traces.component.IComponentNameMatcher @@ -393,4 +395,24 @@ object SplitScreenUtils { error("Fail to copy content in split") } } + + fun isLeftRightSplit(context: Context, rotation: Rotation, displaySizeDp: Point): Boolean { + val allowLeftRightSplit = context.resources.getBoolean( + com.android.internal.R.bool.config_leftRightSplitInPortrait) + val displayBounds = WindowUtils.getDisplayBounds(rotation) + val isLandscape = displayBounds.width() > displayBounds.height() + if (allowLeftRightSplit && isTablet(displaySizeDp)) { + // Certain devices allow left/right split in portrait, so they end up with top/bottom + // split in landscape + return !isLandscape + } else { + return isLandscape + } + } + + fun isTablet(displaySizeDp: Point): Boolean { + val LARGE_SCREEN_DP_THRESHOLD = 600 + return displaySizeDp.x >= LARGE_SCREEN_DP_THRESHOLD + && displaySizeDp.y >= LARGE_SCREEN_DP_THRESHOLD + } } |