Loading quickstep/tests/src/com/android/quickstep/TaplTestsQuickstep.java +15 −0 Original line number Diff line number Diff line Loading @@ -179,6 +179,21 @@ public class TaplTestsQuickstep extends AbstractQuickStepTest { actionsView.clickAndDismissScreenshot(); } @Test @PortraitLandscape public void testSplitFromOverview() { assumeTrue(!mLauncher.isTablet()); startTestActivity(2); startTestActivity(3); mLauncher.goHome().switchToOverview().getCurrentTask() .tapMenu() .tapSplitMenuItem() .getTestActivityTask(2) .open(); } @Test @PortraitLandscape public void testSplitFromOverviewForTablet() { Loading tests/tapl/com/android/launcher3/tapl/BaseOverview.java +14 −8 Original line number Diff line number Diff line Loading @@ -247,8 +247,16 @@ public class BaseOverview extends LauncherInstrumentation.VisibleContainer { return mLauncher.hasLauncherObject(mLauncher.getOverviewObjectSelector("clear_all")); } protected boolean isActionsViewVisible() { OverviewTask task = mLauncher.isTablet() ? getFocusedTaskForTablet() : getCurrentTask(); if (task == null) { return false; } return !task.isTaskSplit(); } private void verifyActionsViewVisibility() { if (!hasTasks()) { if (!hasTasks() || !isActionsViewVisible()) { return; } try (LauncherInstrumentation.Closable c = mLauncher.addContextLayer( Loading @@ -265,13 +273,11 @@ public class BaseOverview extends LauncherInstrumentation.VisibleContainer { * Returns if focused task is currently snapped task in tablet grid overview. */ private boolean isOverviewSnappedToFocusedTaskForTablet() { UiObject2 focusedTask = getFocusedTaskForTablet(); OverviewTask focusedTask = getFocusedTaskForTablet(); if (focusedTask == null) { return false; } return Math.abs( focusedTask.getVisibleBounds().exactCenterX() - mLauncher.getExactScreenCenterX()) < 1; return Math.abs(focusedTask.getExactCenterX() - mLauncher.getExactScreenCenterX()) < 1; } /** Loading @@ -279,7 +285,7 @@ public class BaseOverview extends LauncherInstrumentation.VisibleContainer { * * @throws IllegalStateException if not run on a tablet device. */ UiObject2 getFocusedTaskForTablet() { OverviewTask getFocusedTaskForTablet() { if (!mLauncher.isTablet()) { throw new IllegalStateException("Must be run on tablet device."); } Loading @@ -290,7 +296,7 @@ public class BaseOverview extends LauncherInstrumentation.VisibleContainer { int focusedTaskHeight = mLauncher.getFocusedTaskHeightForTablet(); for (UiObject2 task : taskViews) { if (task.getVisibleBounds().height() == focusedTaskHeight) { return task; return new OverviewTask(mLauncher, task, this); } } return null; Loading tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java +16 −1 Original line number Diff line number Diff line Loading @@ -169,6 +169,7 @@ public final class LauncherInstrumentation { private static final String WIDGETS_RES_ID = "primary_widgets_list_view"; private static final String CONTEXT_MENU_RES_ID = "popup_container"; private static final String TASKBAR_RES_ID = "taskbar_view"; private static final String SPLIT_PLACEHOLDER_RES_ID = "split_placeholder"; public static final int WAIT_TIME_MS = 30000; private static final String SYSTEMUI_PACKAGE = "com.android.systemui"; private static final String ANDROID_PACKAGE = "android"; Loading Loading @@ -724,6 +725,7 @@ public final class LauncherInstrumentation { waitUntilLauncherObjectGone(OVERVIEW_RES_ID); waitUntilLauncherObjectGone(WIDGETS_RES_ID); waitUntilLauncherObjectGone(TASKBAR_RES_ID); waitUntilLauncherObjectGone(SPLIT_PLACEHOLDER_RES_ID); return waitForLauncherObject(WORKSPACE_RES_ID); } Loading @@ -732,6 +734,7 @@ public final class LauncherInstrumentation { waitUntilLauncherObjectGone(APPS_RES_ID); waitUntilLauncherObjectGone(OVERVIEW_RES_ID); waitUntilLauncherObjectGone(TASKBAR_RES_ID); waitUntilLauncherObjectGone(SPLIT_PLACEHOLDER_RES_ID); return waitForLauncherObject(WIDGETS_RES_ID); } Loading @@ -741,16 +744,26 @@ public final class LauncherInstrumentation { waitUntilLauncherObjectGone(OVERVIEW_RES_ID); waitUntilLauncherObjectGone(WIDGETS_RES_ID); waitUntilLauncherObjectGone(TASKBAR_RES_ID); waitUntilLauncherObjectGone(SPLIT_PLACEHOLDER_RES_ID); return waitForLauncherObject(APPS_RES_ID); } case OVERVIEW: case OVERVIEW: { waitUntilLauncherObjectGone(APPS_RES_ID); waitUntilLauncherObjectGone(WORKSPACE_RES_ID); waitUntilLauncherObjectGone(WIDGETS_RES_ID); waitUntilLauncherObjectGone(TASKBAR_RES_ID); waitUntilLauncherObjectGone(SPLIT_PLACEHOLDER_RES_ID); return waitForLauncherObject(OVERVIEW_RES_ID); } case SPLIT_SCREEN_SELECT: { waitUntilLauncherObjectGone(APPS_RES_ID); waitUntilLauncherObjectGone(WORKSPACE_RES_ID); waitUntilLauncherObjectGone(WIDGETS_RES_ID); waitUntilLauncherObjectGone(TASKBAR_RES_ID); waitForLauncherObject(SPLIT_PLACEHOLDER_RES_ID); return waitForLauncherObject(OVERVIEW_RES_ID); } case FALLBACK_OVERVIEW: { Loading @@ -758,6 +771,7 @@ public final class LauncherInstrumentation { waitUntilLauncherObjectGone(WORKSPACE_RES_ID); waitUntilLauncherObjectGone(WIDGETS_RES_ID); waitUntilLauncherObjectGone(TASKBAR_RES_ID); waitUntilLauncherObjectGone(SPLIT_PLACEHOLDER_RES_ID); return waitForFallbackLauncherObject(OVERVIEW_RES_ID); } Loading @@ -766,6 +780,7 @@ public final class LauncherInstrumentation { waitUntilLauncherObjectGone(APPS_RES_ID); waitUntilLauncherObjectGone(OVERVIEW_RES_ID); waitUntilLauncherObjectGone(WIDGETS_RES_ID); waitUntilLauncherObjectGone(SPLIT_PLACEHOLDER_RES_ID); if (isTablet() && !isFallbackOverview()) { waitForLauncherObject(TASKBAR_RES_ID); Loading tests/tapl/com/android/launcher3/tapl/OverviewTask.java +25 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import static android.view.accessibility.AccessibilityEvent.TYPE_WINDOW_STATE_CH import android.graphics.Rect; import androidx.annotation.NonNull; import androidx.test.uiautomator.By; import androidx.test.uiautomator.BySelector; import androidx.test.uiautomator.UiObject2; Loading Loading @@ -67,6 +68,10 @@ public final class OverviewTask { return mTask.getVisibleCenter().x; } float getExactCenterX() { return mTask.getVisibleBounds().exactCenterX(); } /** * Dismisses the task by swiping up. */ Loading Loading @@ -159,4 +164,24 @@ public final class OverviewTask { } } } /** Taps the task menu. */ @NonNull public OverviewTaskMenu tapMenu() { try (LauncherInstrumentation.Closable e = mLauncher.eventsCheck(); LauncherInstrumentation.Closable c = mLauncher.addContextLayer( "want to tap the task menu")) { mLauncher.clickLauncherObject( mLauncher.waitForObjectInContainer(mTask.getParent(), "icon")); try (LauncherInstrumentation.Closable c1 = mLauncher.addContextLayer( "tapped the task menu")) { return new OverviewTaskMenu(mLauncher); } } } boolean isTaskSplit() { return mTask.hasObject(By.res("bottomright_snapshot")); } } tests/tapl/com/android/launcher3/tapl/OverviewTaskMenu.java 0 → 100644 +52 −0 Original line number Diff line number Diff line /* * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.launcher3.tapl; import androidx.annotation.NonNull; import androidx.test.uiautomator.By; import androidx.test.uiautomator.UiObject2; /** Represents the menu of an overview task. */ public class OverviewTaskMenu { private final LauncherInstrumentation mLauncher; private final UiObject2 mMenu; OverviewTaskMenu(LauncherInstrumentation launcher) { mLauncher = launcher; mMenu = mLauncher.waitForLauncherObject("menu_option_layout"); mLauncher.assertTrue("The overview task menus is not visible", !mMenu.getVisibleBounds().isEmpty()); } /** Taps the split menu item from the overview task menu. */ @NonNull public SplitScreenSelect tapSplitMenuItem() { try (LauncherInstrumentation.Closable e = mLauncher.eventsCheck(); LauncherInstrumentation.Closable c = mLauncher.addContextLayer( "tap split menu item")) { mLauncher.clickLauncherObject( mLauncher.findObjectInContainer(mMenu, By.textStartsWith("Split"))); try (LauncherInstrumentation.Closable c1 = mLauncher.addContextLayer( "tapped split menu item")) { return new SplitScreenSelect(mLauncher); } } } } Loading
quickstep/tests/src/com/android/quickstep/TaplTestsQuickstep.java +15 −0 Original line number Diff line number Diff line Loading @@ -179,6 +179,21 @@ public class TaplTestsQuickstep extends AbstractQuickStepTest { actionsView.clickAndDismissScreenshot(); } @Test @PortraitLandscape public void testSplitFromOverview() { assumeTrue(!mLauncher.isTablet()); startTestActivity(2); startTestActivity(3); mLauncher.goHome().switchToOverview().getCurrentTask() .tapMenu() .tapSplitMenuItem() .getTestActivityTask(2) .open(); } @Test @PortraitLandscape public void testSplitFromOverviewForTablet() { Loading
tests/tapl/com/android/launcher3/tapl/BaseOverview.java +14 −8 Original line number Diff line number Diff line Loading @@ -247,8 +247,16 @@ public class BaseOverview extends LauncherInstrumentation.VisibleContainer { return mLauncher.hasLauncherObject(mLauncher.getOverviewObjectSelector("clear_all")); } protected boolean isActionsViewVisible() { OverviewTask task = mLauncher.isTablet() ? getFocusedTaskForTablet() : getCurrentTask(); if (task == null) { return false; } return !task.isTaskSplit(); } private void verifyActionsViewVisibility() { if (!hasTasks()) { if (!hasTasks() || !isActionsViewVisible()) { return; } try (LauncherInstrumentation.Closable c = mLauncher.addContextLayer( Loading @@ -265,13 +273,11 @@ public class BaseOverview extends LauncherInstrumentation.VisibleContainer { * Returns if focused task is currently snapped task in tablet grid overview. */ private boolean isOverviewSnappedToFocusedTaskForTablet() { UiObject2 focusedTask = getFocusedTaskForTablet(); OverviewTask focusedTask = getFocusedTaskForTablet(); if (focusedTask == null) { return false; } return Math.abs( focusedTask.getVisibleBounds().exactCenterX() - mLauncher.getExactScreenCenterX()) < 1; return Math.abs(focusedTask.getExactCenterX() - mLauncher.getExactScreenCenterX()) < 1; } /** Loading @@ -279,7 +285,7 @@ public class BaseOverview extends LauncherInstrumentation.VisibleContainer { * * @throws IllegalStateException if not run on a tablet device. */ UiObject2 getFocusedTaskForTablet() { OverviewTask getFocusedTaskForTablet() { if (!mLauncher.isTablet()) { throw new IllegalStateException("Must be run on tablet device."); } Loading @@ -290,7 +296,7 @@ public class BaseOverview extends LauncherInstrumentation.VisibleContainer { int focusedTaskHeight = mLauncher.getFocusedTaskHeightForTablet(); for (UiObject2 task : taskViews) { if (task.getVisibleBounds().height() == focusedTaskHeight) { return task; return new OverviewTask(mLauncher, task, this); } } return null; Loading
tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java +16 −1 Original line number Diff line number Diff line Loading @@ -169,6 +169,7 @@ public final class LauncherInstrumentation { private static final String WIDGETS_RES_ID = "primary_widgets_list_view"; private static final String CONTEXT_MENU_RES_ID = "popup_container"; private static final String TASKBAR_RES_ID = "taskbar_view"; private static final String SPLIT_PLACEHOLDER_RES_ID = "split_placeholder"; public static final int WAIT_TIME_MS = 30000; private static final String SYSTEMUI_PACKAGE = "com.android.systemui"; private static final String ANDROID_PACKAGE = "android"; Loading Loading @@ -724,6 +725,7 @@ public final class LauncherInstrumentation { waitUntilLauncherObjectGone(OVERVIEW_RES_ID); waitUntilLauncherObjectGone(WIDGETS_RES_ID); waitUntilLauncherObjectGone(TASKBAR_RES_ID); waitUntilLauncherObjectGone(SPLIT_PLACEHOLDER_RES_ID); return waitForLauncherObject(WORKSPACE_RES_ID); } Loading @@ -732,6 +734,7 @@ public final class LauncherInstrumentation { waitUntilLauncherObjectGone(APPS_RES_ID); waitUntilLauncherObjectGone(OVERVIEW_RES_ID); waitUntilLauncherObjectGone(TASKBAR_RES_ID); waitUntilLauncherObjectGone(SPLIT_PLACEHOLDER_RES_ID); return waitForLauncherObject(WIDGETS_RES_ID); } Loading @@ -741,16 +744,26 @@ public final class LauncherInstrumentation { waitUntilLauncherObjectGone(OVERVIEW_RES_ID); waitUntilLauncherObjectGone(WIDGETS_RES_ID); waitUntilLauncherObjectGone(TASKBAR_RES_ID); waitUntilLauncherObjectGone(SPLIT_PLACEHOLDER_RES_ID); return waitForLauncherObject(APPS_RES_ID); } case OVERVIEW: case OVERVIEW: { waitUntilLauncherObjectGone(APPS_RES_ID); waitUntilLauncherObjectGone(WORKSPACE_RES_ID); waitUntilLauncherObjectGone(WIDGETS_RES_ID); waitUntilLauncherObjectGone(TASKBAR_RES_ID); waitUntilLauncherObjectGone(SPLIT_PLACEHOLDER_RES_ID); return waitForLauncherObject(OVERVIEW_RES_ID); } case SPLIT_SCREEN_SELECT: { waitUntilLauncherObjectGone(APPS_RES_ID); waitUntilLauncherObjectGone(WORKSPACE_RES_ID); waitUntilLauncherObjectGone(WIDGETS_RES_ID); waitUntilLauncherObjectGone(TASKBAR_RES_ID); waitForLauncherObject(SPLIT_PLACEHOLDER_RES_ID); return waitForLauncherObject(OVERVIEW_RES_ID); } case FALLBACK_OVERVIEW: { Loading @@ -758,6 +771,7 @@ public final class LauncherInstrumentation { waitUntilLauncherObjectGone(WORKSPACE_RES_ID); waitUntilLauncherObjectGone(WIDGETS_RES_ID); waitUntilLauncherObjectGone(TASKBAR_RES_ID); waitUntilLauncherObjectGone(SPLIT_PLACEHOLDER_RES_ID); return waitForFallbackLauncherObject(OVERVIEW_RES_ID); } Loading @@ -766,6 +780,7 @@ public final class LauncherInstrumentation { waitUntilLauncherObjectGone(APPS_RES_ID); waitUntilLauncherObjectGone(OVERVIEW_RES_ID); waitUntilLauncherObjectGone(WIDGETS_RES_ID); waitUntilLauncherObjectGone(SPLIT_PLACEHOLDER_RES_ID); if (isTablet() && !isFallbackOverview()) { waitForLauncherObject(TASKBAR_RES_ID); Loading
tests/tapl/com/android/launcher3/tapl/OverviewTask.java +25 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import static android.view.accessibility.AccessibilityEvent.TYPE_WINDOW_STATE_CH import android.graphics.Rect; import androidx.annotation.NonNull; import androidx.test.uiautomator.By; import androidx.test.uiautomator.BySelector; import androidx.test.uiautomator.UiObject2; Loading Loading @@ -67,6 +68,10 @@ public final class OverviewTask { return mTask.getVisibleCenter().x; } float getExactCenterX() { return mTask.getVisibleBounds().exactCenterX(); } /** * Dismisses the task by swiping up. */ Loading Loading @@ -159,4 +164,24 @@ public final class OverviewTask { } } } /** Taps the task menu. */ @NonNull public OverviewTaskMenu tapMenu() { try (LauncherInstrumentation.Closable e = mLauncher.eventsCheck(); LauncherInstrumentation.Closable c = mLauncher.addContextLayer( "want to tap the task menu")) { mLauncher.clickLauncherObject( mLauncher.waitForObjectInContainer(mTask.getParent(), "icon")); try (LauncherInstrumentation.Closable c1 = mLauncher.addContextLayer( "tapped the task menu")) { return new OverviewTaskMenu(mLauncher); } } } boolean isTaskSplit() { return mTask.hasObject(By.res("bottomright_snapshot")); } }
tests/tapl/com/android/launcher3/tapl/OverviewTaskMenu.java 0 → 100644 +52 −0 Original line number Diff line number Diff line /* * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.launcher3.tapl; import androidx.annotation.NonNull; import androidx.test.uiautomator.By; import androidx.test.uiautomator.UiObject2; /** Represents the menu of an overview task. */ public class OverviewTaskMenu { private final LauncherInstrumentation mLauncher; private final UiObject2 mMenu; OverviewTaskMenu(LauncherInstrumentation launcher) { mLauncher = launcher; mMenu = mLauncher.waitForLauncherObject("menu_option_layout"); mLauncher.assertTrue("The overview task menus is not visible", !mMenu.getVisibleBounds().isEmpty()); } /** Taps the split menu item from the overview task menu. */ @NonNull public SplitScreenSelect tapSplitMenuItem() { try (LauncherInstrumentation.Closable e = mLauncher.eventsCheck(); LauncherInstrumentation.Closable c = mLauncher.addContextLayer( "tap split menu item")) { mLauncher.clickLauncherObject( mLauncher.findObjectInContainer(mMenu, By.textStartsWith("Split"))); try (LauncherInstrumentation.Closable c1 = mLauncher.addContextLayer( "tapped split menu item")) { return new SplitScreenSelect(mLauncher); } } } }