Add SplitScreenUtils#enterSplitViaIntent for FlickerTests

As SplitScreenUtils#enterSplit uses UiAutomation to enter split-screen
with UI operations, which may flaky if the UI component or position
changed, or the test doesn't requires to verify entering split-screen
with drag-and-drop or clicking the menu on the overview.
(e.g. UnlockKeyguardToSplitScreen)

Added the new helper method to enter split-screen mode with using
EXTRA_LAUNCH_ADJACENT for SplitScreenPrimaryActivity to launch
SplitScreenSecondaryActivity in adjacent side.

Fix: 284175072
Test: atest WMShellFlickerTests:UnlockKeyguardToSplitScreen \
         --rerun-until-failure 10
Change-Id: Ic34007b0fe922bec0cef0a7b2a1bfd80cbea5776
This commit is contained in:
Ming-Shin Lu
2023-06-19 17:12:02 +00:00
parent d75df52b3c
commit 4038be98d0
5 changed files with 33 additions and 2 deletions

View File

@@ -39,6 +39,7 @@ import com.android.server.wm.flicker.helpers.NonResizeableAppHelper
import com.android.server.wm.flicker.helpers.NotificationAppHelper
import com.android.server.wm.flicker.helpers.SimpleAppHelper
import com.android.server.wm.flicker.testapp.ActivityOptions
import com.android.server.wm.flicker.testapp.ActivityOptions.SplitScreen.Primary
import com.android.wm.shell.flicker.LAUNCHER_UI_PACKAGE_NAME
import com.android.wm.shell.flicker.SYSTEM_UI_PACKAGE_NAME
import org.junit.Assert.assertNotNull
@@ -112,6 +113,17 @@ internal object SplitScreenUtils {
waitForSplitComplete(wmHelper, primaryApp, secondaryApp)
}
fun enterSplitViaIntent(
wmHelper: WindowManagerStateHelper,
primaryApp: StandardAppHelper,
secondaryApp: StandardAppHelper
) {
val stringExtras = mapOf(Primary.EXTRA_LAUNCH_ADJACENT to "true")
primaryApp.launchViaIntent(wmHelper, null, null,
stringExtras)
waitForSplitComplete(wmHelper, primaryApp, secondaryApp)
}
fun splitFromOverview(tapl: LauncherInstrumentation, device: UiDevice) {
// Note: The initial split position in landscape is different between tablet and phone.
// In landscape, tablet will let the first app split to right side, and phone will

View File

@@ -51,7 +51,6 @@ class UnlockKeyguardToSplitScreen(override val flicker: FlickerTest) :
/** {@inheritDoc} */
override val transition: FlickerBuilder.() -> Unit
get() = {
defaultSetup(this)
defaultTeardown(this)
thisTransition(this)
}

View File

@@ -37,7 +37,7 @@ open class UnlockKeyguardToSplitScreenBenchmark(override val flicker: FlickerTes
SplitScreenBase(flicker) {
protected val thisTransition: FlickerBuilder.() -> Unit
get() = {
setup { SplitScreenUtils.enterSplit(wmHelper, tapl, device, primaryApp, secondaryApp) }
setup { SplitScreenUtils.enterSplitViaIntent(wmHelper, primaryApp, secondaryApp) }
transitions {
device.sleep()
wmHelper.StateSyncBuilder().withAppTransitionIdle().waitForAndVerify()

View File

@@ -186,6 +186,8 @@ public class ActivityOptions {
public static final String LABEL = "SplitScreenPrimaryActivity";
public static final ComponentName COMPONENT = new ComponentName(FLICKER_APP_PACKAGE,
FLICKER_APP_PACKAGE + ".SplitScreenActivity");
public static final String EXTRA_LAUNCH_ADJACENT = "launch_adjacent";
}
public static class Secondary {

View File

@@ -16,9 +16,14 @@
package com.android.server.wm.flicker.testapp;
import static com.android.server.wm.flicker.testapp.ActivityOptions.SplitScreen.Primary.EXTRA_LAUNCH_ADJACENT;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import androidx.annotation.Nullable;
public class SplitScreenActivity extends Activity {
@Override
@@ -26,4 +31,17 @@ public class SplitScreenActivity extends Activity {
super.onCreate(icicle);
setContentView(R.layout.activity_splitscreen);
}
@Override
protected void onPostCreate(@Nullable Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
final boolean startSecondaryActivity = getIntent().hasExtra(EXTRA_LAUNCH_ADJACENT);
if (startSecondaryActivity) {
final Intent intent = new Intent(this, SplitScreenSecondaryActivity.class);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.addFlags(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT | Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
startActivity(intent);
}
}
}