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:
@@ -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
|
||||
|
||||
@@ -51,7 +51,6 @@ class UnlockKeyguardToSplitScreen(override val flicker: FlickerTest) :
|
||||
/** {@inheritDoc} */
|
||||
override val transition: FlickerBuilder.() -> Unit
|
||||
get() = {
|
||||
defaultSetup(this)
|
||||
defaultTeardown(this)
|
||||
thisTransition(this)
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user