diff options
Diffstat (limited to 'tests/tapl/com/android/launcher3/tapl/OverviewTask.java')
-rw-r--r-- | tests/tapl/com/android/launcher3/tapl/OverviewTask.java | 104 |
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)); } } |