summaryrefslogtreecommitdiff
path: root/tests/tapl/com/android/launcher3/tapl/OverviewTask.java
diff options
context:
space:
mode:
Diffstat (limited to 'tests/tapl/com/android/launcher3/tapl/OverviewTask.java')
-rw-r--r--tests/tapl/com/android/launcher3/tapl/OverviewTask.java104
1 files changed, 89 insertions, 15 deletions
diff --git a/tests/tapl/com/android/launcher3/tapl/OverviewTask.java b/tests/tapl/com/android/launcher3/tapl/OverviewTask.java
index e4cfc52a2c..f383e99584 100644
--- a/tests/tapl/com/android/launcher3/tapl/OverviewTask.java
+++ b/tests/tapl/com/android/launcher3/tapl/OverviewTask.java
@@ -16,8 +16,6 @@
package com.android.launcher3.tapl;
-import static android.view.accessibility.AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED;
-
import android.graphics.Rect;
import androidx.annotation.NonNull;
@@ -36,6 +34,8 @@ import java.util.stream.Collectors;
*/
public final class OverviewTask {
private static final String SYSTEMUI_PACKAGE = "com.android.systemui";
+ private static final String TASK_SNAPSHOT_1 = "snapshot";
+ private static final String TASK_SNAPSHOT_2 = "bottomright_snapshot";
static final Pattern TASK_START_EVENT = Pattern.compile("startActivityFromRecentsAsync");
static final Pattern SPLIT_SELECT_EVENT = Pattern.compile("enterSplitSelect");
@@ -55,20 +55,75 @@ public final class OverviewTask {
mOverview.verifyActiveContainer();
}
+ /**
+ * Returns the height of the visible task, or the combined height of two tasks in split with a
+ * divider between.
+ */
int getVisibleHeight() {
+ if (isTaskSplit()) {
+ return getCombinedSplitTaskHeight();
+ }
+
return mTask.getVisibleBounds().height();
}
+ /**
+ * Calculates the visible height for split tasks, containing 2 snapshot tiles and a divider.
+ */
+ private int getCombinedSplitTaskHeight() {
+ UiObject2 taskSnapshot1 = findObjectInTask(TASK_SNAPSHOT_1);
+ UiObject2 taskSnapshot2 = findObjectInTask(TASK_SNAPSHOT_2);
+
+ // If the split task is partly off screen, taskSnapshot1 can be invisible.
+ if (taskSnapshot1 == null) {
+ return taskSnapshot2.getVisibleBounds().height();
+ }
+
+ int top = Math.min(
+ taskSnapshot1.getVisibleBounds().top, taskSnapshot2.getVisibleBounds().top);
+ int bottom = Math.max(
+ taskSnapshot1.getVisibleBounds().bottom, taskSnapshot2.getVisibleBounds().bottom);
+
+ return bottom - top;
+ }
+
+ /**
+ * Returns the width of the visible task, or the combined width of two tasks in split with a
+ * divider between.
+ */
int getVisibleWidth() {
+ if (isTaskSplit()) {
+ return getCombinedSplitTaskWidth();
+ }
+
return mTask.getVisibleBounds().width();
}
+ /**
+ * Calculates the visible width for split tasks, containing 2 snapshot tiles and a divider.
+ */
+ private int getCombinedSplitTaskWidth() {
+ UiObject2 taskSnapshot1 = findObjectInTask(TASK_SNAPSHOT_1);
+ UiObject2 taskSnapshot2 = findObjectInTask(TASK_SNAPSHOT_2);
+
+ int left = Math.min(
+ taskSnapshot1.getVisibleBounds().left, taskSnapshot2.getVisibleBounds().left);
+ int right = Math.max(
+ taskSnapshot1.getVisibleBounds().right, taskSnapshot2.getVisibleBounds().right);
+
+ return right - left;
+ }
+
int getTaskCenterX() {
- return mTask.getVisibleCenter().x;
+ return mTask.getParent().getVisibleCenter().x;
+ }
+
+ int getTaskCenterY() {
+ return mTask.getParent().getVisibleCenter().y;
}
float getExactCenterX() {
- return mTask.getVisibleBounds().exactCenterX();
+ return mTask.getParent().getVisibleBounds().exactCenterX();
}
UiObject2 getUiObject() {
@@ -92,7 +147,8 @@ public final class OverviewTask {
boolean taskWasFocused = mLauncher.isTablet() && getVisibleHeight() == mLauncher
.getFocusedTaskHeightForTablet();
- List<Integer> originalTasksCenterX = getCurrentTasksCenterXList();
+ List<Integer> originalTasksCenterX =
+ getCurrentTasksCenterXList().stream().sorted().toList();
boolean isClearAllVisibleBeforeDismiss = mOverview.isClearAllVisible();
dismissBySwipingUp();
@@ -103,7 +159,8 @@ public final class OverviewTask {
mOverview.getFocusedTaskForTablet());
}
if (!isClearAllVisibleBeforeDismiss) {
- List<Integer> currentTasksCenterX = getCurrentTasksCenterXList();
+ List<Integer> currentTasksCenterX =
+ getCurrentTasksCenterXList().stream().sorted().toList();
if (originalTasksCenterX.size() == currentTasksCenterX.size()) {
// Check for the same number of visible tasks before and after to
// avoid asserting on cases of shifting all tasks to close the distance
@@ -121,7 +178,7 @@ public final class OverviewTask {
// Dismiss the task via flinging it up.
final Rect taskBounds = mLauncher.getVisibleBounds(mTask);
final int centerX = taskBounds.centerX();
- final int centerY = taskBounds.centerY();
+ final int centerY = taskBounds.bottom - 1;
mLauncher.executeAndWaitForLauncherEvent(
() -> mLauncher.linearGesture(centerX, centerY, centerX, 0, 10, false,
LauncherInstrumentation.GestureScope.DONT_EXPECT_PILFER),
@@ -133,8 +190,8 @@ public final class OverviewTask {
private List<Integer> getCurrentTasksCenterXList() {
return mLauncher.isTablet()
? mOverview.getCurrentTasksForTablet().stream()
- .map(OverviewTask::getTaskCenterX)
- .collect(Collectors.toList())
+ .map(OverviewTask::getTaskCenterX)
+ .collect(Collectors.toList())
: List.of(mOverview.getCurrentTask().getTaskCenterX());
}
@@ -144,11 +201,8 @@ public final class OverviewTask {
public LaunchedAppState open() {
try (LauncherInstrumentation.Closable e = mLauncher.eventsCheck()) {
verifyActiveContainer();
- mLauncher.executeAndWaitForEvent(
+ mLauncher.executeAndWaitForLauncherStop(
() -> mLauncher.clickLauncherObject(mTask),
- event -> event.getEventType() == TYPE_WINDOW_STATE_CHANGED,
- () -> "Launching task didn't open a new window: "
- + mTask.getParent().getContentDescription(),
"clicking an overview task");
if (mOverview.getContainerType()
== LauncherInstrumentation.ContainerType.SPLIT_SCREEN_SELECT) {
@@ -168,7 +222,7 @@ public final class OverviewTask {
}
}
- /** Taps the task menu. */
+ /** Taps the task menu. Returns the task menu object. */
@NonNull
public OverviewTaskMenu tapMenu() {
try (LauncherInstrumentation.Closable e = mLauncher.eventsCheck();
@@ -184,7 +238,27 @@ public final class OverviewTask {
}
}
+ /** Taps the task menu of the split task. Returns the split task's menu object. */
+ @NonNull
+ public OverviewTaskMenu tapSplitTaskMenu() {
+ try (LauncherInstrumentation.Closable e = mLauncher.eventsCheck();
+ LauncherInstrumentation.Closable c = mLauncher.addContextLayer(
+ "want to tap the split task's menu")) {
+ mLauncher.clickLauncherObject(
+ mLauncher.waitForObjectInContainer(mTask.getParent(), "bottomRight_icon"));
+
+ try (LauncherInstrumentation.Closable c1 = mLauncher.addContextLayer(
+ "tapped the split task's menu")) {
+ return new OverviewTaskMenu(mLauncher);
+ }
+ }
+ }
+
boolean isTaskSplit() {
- return mLauncher.findObjectInContainer(mTask.getParent(), "bottomright_snapshot") != null;
+ return findObjectInTask(TASK_SNAPSHOT_2) != null;
+ }
+
+ private UiObject2 findObjectInTask(String resName) {
+ return mTask.getParent().findObject(mLauncher.getOverviewObjectSelector(resName));
}
}