Merge "Make sure TAPL waits for Launcher activity to stop each time it stops" into main

This commit is contained in:
Vadim Tryshev
2024-02-03 02:33:53 +00:00
committed by Android (Google) Code Review
6 changed files with 53 additions and 2 deletions

View File

@@ -411,6 +411,8 @@ public class Launcher extends StatefulActivity<LauncherState>
private final SettingsCache.OnChangeListener mNaturalScrollingChangedListener =
enabled -> mIsNaturalScrollingEnabled = enabled;
private int mActivityStopCount; // Used only by tests
public static Launcher getLauncher(Context context) {
return fromContext(context);
}
@@ -1052,10 +1054,18 @@ public class Launcher extends StatefulActivity<LauncherState>
mAppWidgetHolder.setActivityStarted(false);
NotificationListener.removeNotificationsChangedListener(getPopupDataProvider());
FloatingIconView.resetIconLoadResult();
++mActivityStopCount;
AccessibilityManagerCompat.sendTestProtocolEventToTest(
this, LAUNCHER_ACTIVITY_STOPPED_MESSAGE);
}
/** Return activity stop count and reset it. Used only by tests. */
public int getAndResetActivityStopCount() {
final int activityStopCount = mActivityStopCount;
mActivityStopCount = 0;
return activityStopCount;
}
@Override
protected void onStart() {
TraceHelper.INSTANCE.beginSection(ON_START_EVT);

View File

@@ -214,6 +214,16 @@ public class TestInformationHandler implements ResourceBasedOverride {
.forceAllowRotationForTesting(Boolean.parseBoolean(arg)));
return response;
case TestProtocol.REQUEST_GET_AND_RESET_ACTIVITY_STOP_COUNT: {
final Bundle bundle = getLauncherUIProperty(Bundle::putInt,
launcher -> launcher.getAndResetActivityStopCount());
if (bundle != null) return bundle;
// If Launcher activity wasn't created, 'it' was stopped 0 times.
response.putInt(TestProtocol.TEST_INFO_RESPONSE_FIELD, 0);
return response;
}
case TestProtocol.REQUEST_WORKSPACE_CELL_LAYOUT_SIZE:
return getLauncherUIProperty(Bundle::putIntArray, launcher -> {
final Workspace<?> workspace = launcher.getWorkspace();

View File

@@ -178,6 +178,9 @@ public final class TestProtocol {
public static final String REQUEST_UNSTASH_BUBBLE_BAR_IF_STASHED =
"unstash-bubble-bar-if-stashed";
public static final String REQUEST_GET_AND_RESET_ACTIVITY_STOP_COUNT =
"get-and-reset-activity-stops";
/** Logs {@link Log#d(String, String)} if {@link #sDebugTracing} is true. */
public static void testLogD(String tag, String message) {
if (!sDebugTracing) {

View File

@@ -599,6 +599,9 @@ public abstract class AbstractLauncherUiTest {
Wait.atMost("Launcher activity didn't stop",
() -> !launcherInstrumentation.isLauncherActivityStarted(),
DEFAULT_ACTIVITY_TIMEOUT, launcherInstrumentation);
// Reset activity stop count.
launcherInstrumentation.getAndResetActivityStopCount();
}
public static ActivityInfo resolveSystemAppInfo(String category) {

View File

@@ -44,11 +44,15 @@ public class TestIsolationRule implements TestRule {
return new Statement() {
@Override
public void evaluate() throws Throwable {
base.evaluate();
// Make sure that Launcher workspace looks correct.
// Reset activity stop count.
mLauncher.getAndResetActivityStopCount();
base.evaluate();
// Make sure that Launcher workspace looks correct.
UiDevice.getInstance(InstrumentationRegistry.getInstrumentation()).pressHome();
AbstractLauncherUiTest.checkDetectedLeaks(mLauncher, mRequireOneActiveActivity);
mLauncher.assertNoUnexpectedStops();
}
};
}

View File

@@ -207,6 +207,7 @@ public final class LauncherInstrumentation {
private TrackpadGestureType mTrackpadGestureType = TrackpadGestureType.NONE;
private int mPointerCount = 0;
private final boolean mIsLauncherTest;
private static Pattern getKeyEventPattern(String action, String keyCode) {
return Pattern.compile("Key event: KeyEvent.*action=" + action + ".*keyCode=" + keyCode);
@@ -243,6 +244,7 @@ public final class LauncherInstrumentation {
*/
@Deprecated
public LauncherInstrumentation(Instrumentation instrumentation, boolean isLauncherTest) {
mIsLauncherTest = isLauncherTest;
mInstrumentation = instrumentation;
mDevice = UiDevice.getInstance(instrumentation);
@@ -415,6 +417,11 @@ public final class LauncherInstrumentation {
TestProtocol.TEST_INFO_RESPONSE_FIELD);
}
public int getAndResetActivityStopCount() {
return getTestInfo(TestProtocol.REQUEST_GET_AND_RESET_ACTIVITY_STOP_COUNT).getInt(
TestProtocol.TEST_INFO_RESPONSE_FIELD);
}
Rect getGridTaskRectForTablet() {
return ((Rect) getTestInfo(TestProtocol.REQUEST_GET_GRID_TASK_SIZE_RECT_FOR_TABLET)
.getParcelable(TestProtocol.TEST_INFO_RESPONSE_FIELD));
@@ -628,10 +635,19 @@ public final class LauncherInstrumentation {
public void onTestStart() {
mTestStartTime = System.currentTimeMillis();
assertNoUnexpectedStops();
}
public void onTestFinish() {
mTestStartTime = -1;
assertNoUnexpectedStops();
}
/** Verify that the activity stop count is zero. */
public void assertNoUnexpectedStops() {
if (mIsLauncherTest) {
assertEquals("Unexpected activity stops", 0, getAndResetActivityStopCount());
}
}
private String formatSystemHealthMessage(String message) {
@@ -1005,6 +1021,9 @@ public final class LauncherInstrumentation {
event -> TestProtocol.LAUNCHER_ACTIVITY_STOPPED_MESSAGE
.equals(event.getClassName().toString()),
() -> "Launcher activity didn't stop", actionName);
// Reset activity stop count.
getAndResetActivityStopCount();
}
/**
@@ -2257,6 +2276,7 @@ public final class LauncherInstrumentation {
}
public Closable eventsCheck() {
assertNoUnexpectedStops();
Assert.assertTrue("Nested event checking", mEventChecker == null);
disableSensorRotation();
final Integer initialPid = getPid();
@@ -2264,6 +2284,7 @@ public final class LauncherInstrumentation {
if (eventChecker.start()) mEventChecker = eventChecker;
return () -> {
assertNoUnexpectedStops();
if (initialPid != null && initialPid.intValue() != getPid()) {
if (mOnLauncherCrashed != null) mOnLauncherCrashed.run();
checkForAnomaly();