Merge "Wait for taskbar to become visible after closing launcher in tests" into sc-v2-dev
diff --git a/quickstep/src/com/android/quickstep/TouchInteractionService.java b/quickstep/src/com/android/quickstep/TouchInteractionService.java
index 20d7eb1..7bb0b94 100644
--- a/quickstep/src/com/android/quickstep/TouchInteractionService.java
+++ b/quickstep/src/com/android/quickstep/TouchInteractionService.java
@@ -67,6 +67,7 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.UiThread;
+import androidx.annotation.VisibleForTesting;
import androidx.annotation.WorkerThread;
import com.android.launcher3.BaseDraggingActivity;
@@ -301,17 +302,26 @@
private static boolean sConnected = false;
private static boolean sIsInitialized = false;
+ private static TouchInteractionService sInstance;
private RotationTouchHelper mRotationTouchHelper;
public static boolean isConnected() {
return sConnected;
}
-
public static boolean isInitialized() {
return sIsInitialized;
}
+ @VisibleForTesting
+ @Nullable
+ public static TaskbarManager getTaskbarManagerForTesting() {
+ if (sInstance == null) {
+ return null;
+ }
+ return sInstance.mTaskbarManager;
+ }
+
private final AbsSwipeUpHandler.Factory mLauncherSwipeHandlerFactory =
this::createLauncherSwipeHandler;
private final AbsSwipeUpHandler.Factory mFallbackSwipeHandlerFactory =
@@ -355,6 +365,7 @@
mDeviceState.runOnUserUnlocked(mTaskbarManager::onUserUnlocked);
ProtoTracer.INSTANCE.get(this).add(this);
sConnected = true;
+ sInstance = this;
}
private void disposeEventHandlers() {
@@ -512,6 +523,7 @@
mTaskbarManager.destroy();
sConnected = false;
+ sInstance = null;
super.onDestroy();
}
diff --git a/quickstep/tests/src/com/android/quickstep/StartLauncherViaGestureTests.java b/quickstep/tests/src/com/android/quickstep/StartLauncherViaGestureTests.java
index f44a812..fe1bb2e 100644
--- a/quickstep/tests/src/com/android/quickstep/StartLauncherViaGestureTests.java
+++ b/quickstep/tests/src/com/android/quickstep/StartLauncherViaGestureTests.java
@@ -25,7 +25,12 @@
import androidx.test.runner.AndroidJUnit4;
import com.android.launcher3.Launcher;
+import com.android.launcher3.taskbar.TaskbarActivityContext;
+import com.android.launcher3.taskbar.TaskbarDragLayer;
+import com.android.launcher3.taskbar.TaskbarManager;
+import com.android.launcher3.taskbar.TaskbarView;
import com.android.launcher3.ui.TaplTestsLauncher3;
+import com.android.launcher3.ui.TestViewHelpers;
import com.android.launcher3.util.RaceConditionReproducer;
import com.android.quickstep.NavigationModeSwitchRule.Mode;
import com.android.quickstep.NavigationModeSwitchRule.NavigationModeSwitch;
@@ -85,7 +90,7 @@
public void testStressPressHome() {
for (int i = 0; i < STRESS_REPEAT_COUNT; ++i) {
// Destroy Launcher activity.
- closeLauncherActivity();
+ destroyLauncherActivityAndWaitForTaskbarVisible();
// The test action.
mLauncher.pressHome();
@@ -97,12 +102,41 @@
public void testStressSwipeToOverview() {
for (int i = 0; i < STRESS_REPEAT_COUNT; ++i) {
// Destroy Launcher activity.
- closeLauncherActivity();
+ destroyLauncherActivityAndWaitForTaskbarVisible();
// The test action.
mLauncher.getBackground().switchToOverview();
}
- closeLauncherActivity();
+ destroyLauncherActivityAndWaitForTaskbarVisible();
mLauncher.pressHome();
}
+
+ private void destroyLauncherActivityAndWaitForTaskbarVisible() {
+ closeLauncherActivity();
+
+ // After Launcher is destroyed, calculator app started in setup() will be launched, wait for
+ // taskbar to settle before further interaction if it's a tablet.
+ if (!mLauncher.isTablet()) {
+ return;
+ }
+
+ waitForLauncherCondition(
+ "Taskbar not yet visible", launcher -> {
+ TaskbarManager taskbarManager =
+ TouchInteractionService.getTaskbarManagerForTesting();
+ if (taskbarManager == null) {
+ return false;
+ }
+
+ TaskbarActivityContext taskbarActivityContext =
+ taskbarManager.getCurrentActivityContext();
+ if (taskbarActivityContext == null) {
+ return false;
+ }
+
+ TaskbarDragLayer taskbarDragLayer = taskbarActivityContext.getDragLayer();
+ return TestViewHelpers.findChildView(taskbarDragLayer,
+ view -> view instanceof TaskbarView && view.isVisibleToUser()) != null;
+ }, DEFAULT_UI_TIMEOUT);
+ }
}
diff --git a/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java b/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java
index 9da3e71..7f9f1b6 100644
--- a/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java
+++ b/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java
@@ -745,7 +745,6 @@
dumpViewHierarchy();
action = "swiping up to home";
- final boolean launcherIsVisible = isLauncherVisible();
swipeToState(
displaySize.x / 2, displaySize.y - 1,
displaySize.x / 2, 0,
@@ -753,9 +752,6 @@
launcherWasVisible
? GestureScope.INSIDE_TO_OUTSIDE
: GestureScope.OUTSIDE_WITH_PILFER);
- // b/193653850: launcherWasVisible is a flaky indicator.
- log("launcherWasVisible: " + launcherWasVisible + ", launcherIsVisible: "
- + launcherIsVisible);
}
} else {
log("Hierarchy before clicking home:");