From 8771dfe3dd3bdae6a179df91ded9fb349fe85f70 Mon Sep 17 00:00:00 2001 From: dakinola Date: Mon, 22 Apr 2024 10:11:35 +0000 Subject: [PATCH] Force calculator to launch in fullscreen for taskbar tests Taskbar tests are flaking when desktop windowing is enabled due to calculator app being launched in splitscreen unexpectedly during test setup (due to unexpected effect of DesktopModeLaunchParamsModifier on activity launch.) While looking into root cause, this temporary fix to address the test failures ensures that calculator app is always launched in fullscreen, by enforcing it with ActivityOptions. Bug: 333446588 Bug: 333446588 Flag: None Test: atest NexusLauncherTests:com.android.quickstep.TaplTestsTaskbar Test: forrest build with CL (https://android-build.corp.google.com/builds/abtd/run/L47500030003265061) Change-Id: If12e8490214aa1dd5de89ff8535495c2a0c1fe82 --- .../quickstep/AbstractTaplTestsTaskbar.java | 2 +- .../launcher3/ui/AbstractLauncherUiTest.java | 33 +++++++++++++++++-- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/quickstep/tests/src/com/android/quickstep/AbstractTaplTestsTaskbar.java b/quickstep/tests/src/com/android/quickstep/AbstractTaplTestsTaskbar.java index fc757b44c9..ca5fb70bea 100644 --- a/quickstep/tests/src/com/android/quickstep/AbstractTaplTestsTaskbar.java +++ b/quickstep/tests/src/com/android/quickstep/AbstractTaplTestsTaskbar.java @@ -55,7 +55,7 @@ public class AbstractTaplTestsTaskbar extends AbstractQuickStepTest { "com.android.launcher3.testcomponent.BaseTestingActivity"); mLauncherLayout = TestUtil.setLauncherDefaultLayout(mTargetContext, layoutBuilder); AbstractLauncherUiTest.initialize(this); - startAppFast(CALCULATOR_APP_PACKAGE); + startAppFastInFullscreen(CALCULATOR_APP_PACKAGE); mLauncher.enableBlockTimeout(true); mLauncher.showTaskbarIfHidden(); } diff --git a/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java b/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java index 99e15ba8aa..9c289d6f8c 100644 --- a/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java +++ b/tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java @@ -15,7 +15,10 @@ */ package com.android.launcher3.ui; +import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD; +import static android.app.WindowConfiguration.WINDOWING_MODE_FULLSCREEN; import static android.platform.test.flag.junit.SetFlagsRule.DefaultInitValueType.DEVICE_DEFAULT; +import static android.view.Display.DEFAULT_DISPLAY; import static androidx.test.InstrumentationRegistry.getInstrumentation; @@ -26,6 +29,7 @@ import static com.android.launcher3.util.Executors.MAIN_EXECUTOR; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; +import android.app.ActivityOptions; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; @@ -571,6 +575,21 @@ public abstract class AbstractLauncherUiTest { true /* newTask */); } + /** alternative of startAppFast where app is guaranteed to launch in fullscreen mode */ + public static void startAppFastInFullscreen(String packageName) { + ActivityOptions options = ActivityOptions.makeBasic(); + options.setLaunchWindowingMode(WINDOWING_MODE_FULLSCREEN); + options.setLaunchDisplayId(DEFAULT_DISPLAY); + options.setLaunchActivityType(ACTIVITY_TYPE_STANDARD); + + startIntent( + getInstrumentation().getContext().getPackageManager().getLaunchIntentForPackage( + packageName), + By.pkg(packageName).depth(0), + true /* newTask */, + options); + } + public static void startTestActivity(String activityName, String activityLabel) { final String packageName = getAppPackageName(); final Intent intent = getInstrumentation().getContext().getPackageManager(). @@ -606,7 +625,8 @@ public abstract class AbstractLauncherUiTest { false /* newTask */); } - private static void startIntent(Intent intent, BySelector selector, boolean newTask) { + private static void startIntent( + Intent intent, BySelector selector, boolean newTask, ActivityOptions options) { intent.addCategory(Intent.CATEGORY_LAUNCHER); if (newTask) { intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); @@ -614,7 +634,12 @@ public abstract class AbstractLauncherUiTest { intent.addFlags( Intent.FLAG_ACTIVITY_MULTIPLE_TASK | Intent.FLAG_ACTIVITY_NEW_DOCUMENT); } - getInstrumentation().getTargetContext().startActivity(intent); + + if (options != null) { + getInstrumentation().getTargetContext().startActivity(intent, options.toBundle()); + } else { + getInstrumentation().getTargetContext().startActivity(intent); + } assertTrue("App didn't start: " + selector, TestHelpers.wait(Until.hasObject(selector), DEFAULT_UI_TIMEOUT)); @@ -625,6 +650,10 @@ public abstract class AbstractLauncherUiTest { DEFAULT_ACTIVITY_TIMEOUT, launcherInstrumentation); } + private static void startIntent(Intent intent, BySelector selector, boolean newTask) { + startIntent(intent, selector, newTask, null); + } + public static ActivityInfo resolveSystemAppInfo(String category) { return getInstrumentation().getContext().getPackageManager().resolveActivity( new Intent(Intent.ACTION_MAIN).addCategory(category),