diff --git a/quickstep/src/com/android/quickstep/QuickstepTestInformationHandler.java b/quickstep/src/com/android/quickstep/QuickstepTestInformationHandler.java index 221ce480f8..f801b3bce9 100644 --- a/quickstep/src/com/android/quickstep/QuickstepTestInformationHandler.java +++ b/quickstep/src/com/android/quickstep/QuickstepTestInformationHandler.java @@ -106,10 +106,10 @@ public class QuickstepTestInformationHandler extends TestInformationHandler { }); return response; - case TestProtocol.REQUEST_STASHED_TASKBAR_HEIGHT: { + case TestProtocol.REQUEST_TASKBAR_FROM_NAV_THRESHOLD: { final Resources resources = mContext.getResources(); response.putInt(TestProtocol.TEST_INFO_RESPONSE_FIELD, - resources.getDimensionPixelSize(R.dimen.taskbar_stashed_size)); + resources.getDimensionPixelSize(R.dimen.taskbar_from_nav_threshold)); return response; } diff --git a/quickstep/tests/src/com/android/quickstep/AbstractTaplTestsTaskbar.java b/quickstep/tests/src/com/android/quickstep/AbstractTaplTestsTaskbar.java index ba9ae6771d..67af7ec536 100644 --- a/quickstep/tests/src/com/android/quickstep/AbstractTaplTestsTaskbar.java +++ b/quickstep/tests/src/com/android/quickstep/AbstractTaplTestsTaskbar.java @@ -31,6 +31,7 @@ import com.android.launcher3.util.LauncherLayoutBuilder; import com.android.launcher3.util.TestUtil; import org.junit.After; +import org.junit.Assert; import org.junit.Assume; import java.util.List; @@ -86,6 +87,11 @@ public class AbstractTaplTestsTaskbar extends AbstractQuickStepTest { taskbarIconNames, hotseatIconNames); } + if (!isTaskbarInTransientMode(mTargetContext)) { + Assert.assertEquals("Persistent taskbar should fill screen width", + taskbar.getVisibleBounds().width(), mLauncher.getRealDisplaySize().x); + } + return taskbar; } diff --git a/quickstep/tests/src/com/android/quickstep/TaplTestsPersistentTaskbar.java b/quickstep/tests/src/com/android/quickstep/TaplTestsPersistentTaskbar.java index 9a2826d16b..c9e536a737 100644 --- a/quickstep/tests/src/com/android/quickstep/TaplTestsPersistentTaskbar.java +++ b/quickstep/tests/src/com/android/quickstep/TaplTestsPersistentTaskbar.java @@ -20,9 +20,10 @@ import static com.android.quickstep.TaskbarModeSwitchRule.Mode.PERSISTENT; import androidx.test.filters.LargeTest; import androidx.test.runner.AndroidJUnit4; +import com.android.launcher3.ui.PortraitLandscapeRunner.PortraitLandscape; +import com.android.quickstep.NavigationModeSwitchRule.NavigationModeSwitch; import com.android.quickstep.TaskbarModeSwitchRule.TaskbarModeSwitch; -import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; @@ -32,17 +33,10 @@ public class TaplTestsPersistentTaskbar extends AbstractTaplTestsTaskbar { @Test @TaskbarModeSwitch(mode = PERSISTENT) - public void testHideShowTaskbar() { - getTaskbar().hide(); - mLauncher.getLaunchedAppState().showTaskbar(); - } - - @Test - @TaskbarModeSwitch(mode = PERSISTENT) - @Ignore // b/301575789 - public void testHideTaskbarPersistsOnRecreate() { - getTaskbar().hide(); - mLauncher.recreateTaskbar(); - mLauncher.getLaunchedAppState().assertTaskbarHidden(); + @PortraitLandscape + @NavigationModeSwitch + public void testTaskbarFillsWidth() { + // Width check is performed inside TAPL whenever getTaskbar() is called. + getTaskbar(); } } diff --git a/quickstep/tests/src/com/android/quickstep/TaplTestsQuickstep.java b/quickstep/tests/src/com/android/quickstep/TaplTestsQuickstep.java index 18994726a4..1aee794436 100644 --- a/quickstep/tests/src/com/android/quickstep/TaplTestsQuickstep.java +++ b/quickstep/tests/src/com/android/quickstep/TaplTestsQuickstep.java @@ -16,7 +16,6 @@ package com.android.quickstep; -import static com.android.quickstep.TaskbarModeSwitchRule.Mode.PERSISTENT; import static com.android.quickstep.TaskbarModeSwitchRule.Mode.TRANSIENT; import static org.junit.Assert.assertEquals; @@ -298,7 +297,7 @@ public class TaplTestsQuickstep extends AbstractQuickStepTest { @Test @ScreenRecord // b/242163205 @PlatinumTest(focusArea = "launcher") - @TaskbarModeSwitch(mode = PERSISTENT) + @TaskbarModeSwitch public void testQuickSwitchToPreviousAppForTablet() throws Exception { assumeTrue(mLauncher.isTablet()); startTestActivity(2); @@ -307,18 +306,28 @@ public class TaplTestsQuickstep extends AbstractQuickStepTest { // Set ignoreTaskbarVisibility to true to verify the task bar visibility explicitly. mLauncher.setIgnoreTaskbarVisibility(true); - // Expect task bar invisible when the launched app was the IME activity. - LaunchedAppState launchedAppState = getAndAssertLaunchedApp(); - launchedAppState.assertTaskbarHidden(); + try { + // Expect task bar invisible when the launched app was the IME activity. + LaunchedAppState launchedAppState = getAndAssertLaunchedApp(); + launchedAppState.assertTaskbarHidden(); - // Quick-switch to the test app with swiping to right. - quickSwitchToPreviousAppAndAssert(true /* toRight */); + // Quick-switch to the test app with swiping to right. + quickSwitchToPreviousAppAndAssert(true /* toRight */); - assertTestActivityIsRunning(2, - "The first app we should have quick switched to is not running"); - // Expect task bar visible when the launched app was the test activity. - launchedAppState = getAndAssertLaunchedApp(); - launchedAppState.assertTaskbarVisible(); + assertTestActivityIsRunning(2, + "The first app we should have quick switched to is not running"); + launchedAppState = getAndAssertLaunchedApp(); + boolean isTransientTaskbar = mLauncher.isTransientTaskbar(); + if (isTransientTaskbar) { + launchedAppState.assertTaskbarHidden(); + } else { + // Expect taskbar visible when the launched app was the test activity. + launchedAppState.assertTaskbarVisible(); + } + } finally { + // Reset ignoreTaskbarVisibility to ensure other tests still verify it. + mLauncher.setIgnoreTaskbarVisibility(false); + } } @Test @@ -354,7 +363,7 @@ public class TaplTestsQuickstep extends AbstractQuickStepTest { @Test @PortraitLandscape - @TaskbarModeSwitch(mode = PERSISTENT) + @TaskbarModeSwitch() @PlatinumTest(focusArea = "launcher") @ScreenRecord public void testOverviewForTablet() throws Exception { @@ -449,6 +458,7 @@ public class TaplTestsQuickstep extends AbstractQuickStepTest { @Test @PortraitLandscape + @TaskbarModeSwitch public void testTaskbarDeadzonesForTablet() throws Exception { assumeTrue(mLauncher.isTablet()); @@ -461,15 +471,29 @@ public class TaplTestsQuickstep extends AbstractQuickStepTest { launcher -> assertTrue("Should have at least 3 tasks", getTaskCount(launcher) >= 3)); - // On persistent taskbar, it should not dismiss when tapping the taskbar - overview.touchTaskbarBottomCorner(/* tapRight= */ false); - assertTrue("Launcher internal state should be Overview", - isInState(() -> LauncherState.OVERVIEW)); + if (mLauncher.isTransientTaskbar()) { + // On transient taskbar, it should dismiss when tapping outside taskbar bounds. + overview.touchTaskbarBottomCorner(/* tapRight= */ false); + assertTrue("Launcher internal state should be Normal", + isInState(() -> LauncherState.NORMAL)); - // On persistent taskbar, it should not dismiss when tapping the taskbar - overview.touchTaskbarBottomCorner(/* tapRight= */ true); - assertTrue("Launcher internal state should be Overview", - isInState(() -> LauncherState.OVERVIEW)); + overview = mLauncher.getWorkspace().switchToOverview(); + + // On transient taskbar, it should dismiss when tapping outside taskbar bounds. + overview.touchTaskbarBottomCorner(/* tapRight= */ true); + assertTrue("Launcher internal state should be Normal", + isInState(() -> LauncherState.NORMAL)); + } else { + // On persistent taskbar, it should not dismiss when tapping the taskbar + overview.touchTaskbarBottomCorner(/* tapRight= */ false); + assertTrue("Launcher internal state should be Overview", + isInState(() -> LauncherState.OVERVIEW)); + + // On persistent taskbar, it should not dismiss when tapping the taskbar + overview.touchTaskbarBottomCorner(/* tapRight= */ true); + assertTrue("Launcher internal state should be Overview", + isInState(() -> LauncherState.OVERVIEW)); + } } @Test diff --git a/quickstep/tests/src/com/android/quickstep/TaplTestsTransientTaskbar.java b/quickstep/tests/src/com/android/quickstep/TaplTestsTransientTaskbar.java index db23cc04c4..7109bbff54 100644 --- a/quickstep/tests/src/com/android/quickstep/TaplTestsTransientTaskbar.java +++ b/quickstep/tests/src/com/android/quickstep/TaplTestsTransientTaskbar.java @@ -24,6 +24,7 @@ import static org.junit.Assume.assumeTrue; import androidx.test.filters.LargeTest; import androidx.test.runner.AndroidJUnit4; +import com.android.launcher3.ui.PortraitLandscapeRunner.PortraitLandscape; import com.android.quickstep.TaskbarModeSwitchRule.TaskbarModeSwitch; import org.junit.Test; @@ -64,4 +65,12 @@ public class TaplTestsTransientTaskbar extends AbstractTaplTestsTaskbar { getTaskbar().getAppIcon(TEST_APP_NAME).launch(TEST_APP_PACKAGE); mLauncher.getLaunchedAppState().clickStashedTaskbarToGoHome(); } + + @Test + @TaskbarModeSwitch(mode = TRANSIENT) + @PortraitLandscape + public void testSwipeToStashAndUnstash() { + getTaskbar().swipeDownToStash(); + mLauncher.getLaunchedAppState().swipeUpToUnstashTaskbar(); + } } diff --git a/src/com/android/launcher3/testing/TestInformationHandler.java b/src/com/android/launcher3/testing/TestInformationHandler.java index 0438e575c6..d9641ad473 100644 --- a/src/com/android/launcher3/testing/TestInformationHandler.java +++ b/src/com/android/launcher3/testing/TestInformationHandler.java @@ -47,6 +47,7 @@ import com.android.launcher3.dragndrop.DragLayer; import com.android.launcher3.testing.shared.HotseatCellCenterRequest; import com.android.launcher3.testing.shared.TestProtocol; import com.android.launcher3.testing.shared.WorkspaceCellCenterRequest; +import com.android.launcher3.util.DisplayController; import com.android.launcher3.util.ResourceBasedOverride; import com.android.launcher3.widget.picker.WidgetsFullSheet; @@ -170,6 +171,11 @@ public class TestInformationHandler implements ResourceBasedOverride { mDeviceProfile.numShownAllAppsColumns); return response; + case TestProtocol.REQUEST_IS_TRANSIENT_TASKBAR: + response.putBoolean(TestProtocol.TEST_INFO_RESPONSE_FIELD, + DisplayController.isTransientTaskbar(mContext)); + return response; + case TestProtocol.REQUEST_IS_TWO_PANELS: response.putBoolean(TestProtocol.TEST_INFO_RESPONSE_FIELD, FOLDABLE_SINGLE_PAGE.get() ? false : mDeviceProfile.isTwoPanels); diff --git a/src/com/android/launcher3/util/DisplayController.java b/src/com/android/launcher3/util/DisplayController.java index 26ab5b4cb4..788f9cf0d2 100644 --- a/src/com/android/launcher3/util/DisplayController.java +++ b/src/com/android/launcher3/util/DisplayController.java @@ -71,7 +71,7 @@ public class DisplayController implements ComponentCallbacks, SafeCloseable { private static final String TAG = "DisplayController"; private static final boolean DEBUG = false; - private static boolean sTransientTaskbarStatusForTests; + private static boolean sTransientTaskbarStatusForTests = true; // TODO(b/254119092) remove all logs with this tag public static final String TASKBAR_NOT_DESTROYED_TAG = "b/254119092"; diff --git a/src/com/android/launcher3/views/BaseDragLayer.java b/src/com/android/launcher3/views/BaseDragLayer.java index e4df413489..a1cd697eee 100644 --- a/src/com/android/launcher3/views/BaseDragLayer.java +++ b/src/com/android/launcher3/views/BaseDragLayer.java @@ -41,6 +41,7 @@ import com.android.launcher3.AbstractFloatingView; import com.android.launcher3.DeviceProfile; import com.android.launcher3.InsettableFrameLayout; import com.android.launcher3.Utilities; +import com.android.launcher3.testing.shared.ResourceUtils; import com.android.launcher3.util.MultiPropertyFactory.MultiProperty; import com.android.launcher3.util.MultiValueAlpha; import com.android.launcher3.util.TouchController; @@ -559,7 +560,8 @@ public abstract class BaseDragLayer DeviceProfile dp = mActivity.getDeviceProfile(); if (dp.isTaskbarPresent) { // Ignore taskbar gesture insets to avoid interfering with TouchControllers. - gestureInsetBottom = Math.max(0, gestureInsetBottom - dp.taskbarHeight); + gestureInsetBottom = ResourceUtils.getNavbarSize( + ResourceUtils.NAVBAR_BOTTOM_GESTURE_SIZE, getResources()); } mSystemGestureRegion.set( Math.max(gestureInsets.left, imeInset.left), diff --git a/tests/shared/com/android/launcher3/testing/shared/TestProtocol.java b/tests/shared/com/android/launcher3/testing/shared/TestProtocol.java index 3e80e6b91a..fd8a95acf2 100644 --- a/tests/shared/com/android/launcher3/testing/shared/TestProtocol.java +++ b/tests/shared/com/android/launcher3/testing/shared/TestProtocol.java @@ -93,8 +93,9 @@ public final class TestProtocol { public static final String REQUEST_DISABLE_BLOCK_TIMEOUT = "disable-block-timeout"; public static final String REQUEST_ENABLE_TRANSIENT_TASKBAR = "enable-transient-taskbar"; public static final String REQUEST_DISABLE_TRANSIENT_TASKBAR = "disable-transient-taskbar"; + public static final String REQUEST_IS_TRANSIENT_TASKBAR = "is-transient-taskbar"; public static final String REQUEST_UNSTASH_TASKBAR_IF_STASHED = "unstash-taskbar-if-stashed"; - public static final String REQUEST_STASHED_TASKBAR_HEIGHT = "stashed-taskbar-height"; + public static final String REQUEST_TASKBAR_FROM_NAV_THRESHOLD = "taskbar-from-nav-threshold"; public static final String REQUEST_STASHED_TASKBAR_SCALE = "taskbar-stash-handle-scale"; public static final String REQUEST_RECREATE_TASKBAR = "recreate-taskbar"; public static final String REQUEST_APP_LIST_FREEZE_FLAGS = "app-list-freeze-flags"; diff --git a/tests/tapl/com/android/launcher3/tapl/BaseOverview.java b/tests/tapl/com/android/launcher3/tapl/BaseOverview.java index f874cc5402..cfe04b9f75 100644 --- a/tests/tapl/com/android/launcher3/tapl/BaseOverview.java +++ b/tests/tapl/com/android/launcher3/tapl/BaseOverview.java @@ -183,7 +183,14 @@ public class BaseOverview extends LauncherInstrumentation.VisibleContainer { try (LauncherInstrumentation.Closable e = mLauncher.eventsCheck()) { Taskbar taskbar = new Taskbar(mLauncher); taskbar.touchBottomCorner(tapRight); - verifyActiveContainer(); + if (mLauncher.isTransientTaskbar()) { + // Tapping outside Transient Taskbar returns to Workspace, wait for that state. + new Workspace(mLauncher); + } else { + // Should stay in Overview. + verifyActiveContainer(); + verifyActionsViewVisibility(); + } } } diff --git a/tests/tapl/com/android/launcher3/tapl/LaunchedAppState.java b/tests/tapl/com/android/launcher3/tapl/LaunchedAppState.java index efeb5f6666..6d58a3562f 100644 --- a/tests/tapl/com/android/launcher3/tapl/LaunchedAppState.java +++ b/tests/tapl/com/android/launcher3/tapl/LaunchedAppState.java @@ -20,12 +20,11 @@ import static com.android.launcher3.tapl.LauncherInstrumentation.DEFAULT_POLL_IN import static com.android.launcher3.tapl.LauncherInstrumentation.TASKBAR_RES_ID; import static com.android.launcher3.tapl.LauncherInstrumentation.WAIT_TIME_MS; import static com.android.launcher3.testing.shared.TestProtocol.REQUEST_DISABLE_BLOCK_TIMEOUT; -import static com.android.launcher3.testing.shared.TestProtocol.REQUEST_DISABLE_MANUAL_TASKBAR_STASHING; import static com.android.launcher3.testing.shared.TestProtocol.REQUEST_ENABLE_BLOCK_TIMEOUT; -import static com.android.launcher3.testing.shared.TestProtocol.REQUEST_ENABLE_MANUAL_TASKBAR_STASHING; import static com.android.launcher3.testing.shared.TestProtocol.REQUEST_SHELL_DRAG_READY; -import static com.android.launcher3.testing.shared.TestProtocol.REQUEST_STASHED_TASKBAR_HEIGHT; import static com.android.launcher3.testing.shared.TestProtocol.REQUEST_STASHED_TASKBAR_SCALE; +import static com.android.launcher3.testing.shared.TestProtocol.REQUEST_TASKBAR_FROM_NAV_THRESHOLD; +import static com.android.launcher3.testing.shared.TestProtocol.TEST_INFO_RESPONSE_FIELD; import android.graphics.Point; import android.graphics.Rect; @@ -84,8 +83,6 @@ public final class LaunchedAppState extends Background { public Taskbar getTaskbar() { try (LauncherInstrumentation.Closable c = mLauncher.addContextLayer( "want to get the taskbar")) { - mLauncher.waitForSystemLauncherObject(TASKBAR_RES_ID); - return new Taskbar(mLauncher); } } @@ -113,37 +110,32 @@ public final class LaunchedAppState extends Background { /** * Returns the Taskbar in a visible state. * - * The taskbar must already be hidden when calling this method. + * The taskbar must already be hidden and in transient mode when calling this method. */ - public Taskbar showTaskbar() { - mLauncher.getTestInfo(REQUEST_ENABLE_MANUAL_TASKBAR_STASHING); + public Taskbar swipeUpToUnstashTaskbar() { + mLauncher.assertTrue("Taskbar is not transient, swipe up not supported", + mLauncher.isTransientTaskbar()); + mLauncher.getTestInfo(REQUEST_ENABLE_BLOCK_TIMEOUT); try (LauncherInstrumentation.Closable e = mLauncher.eventsCheck(); LauncherInstrumentation.Closable c1 = mLauncher.addContextLayer( - "want to show the taskbar")) { + "want to swipe up to unstash the taskbar")) { mLauncher.waitUntilSystemLauncherObjectGone(TASKBAR_RES_ID); - final long downTime = SystemClock.uptimeMillis(); - final int unstashTargetY = mLauncher.getRealDisplaySize().y - - (mLauncher.getTestInfo(REQUEST_STASHED_TASKBAR_HEIGHT) - .getInt(TestProtocol.TEST_INFO_RESPONSE_FIELD) / 2); - final Point unstashTarget = new Point( - mLauncher.getRealDisplaySize().x / 2, unstashTargetY); + int taskbarFromNavThreshold = mLauncher.getTestInfo(REQUEST_TASKBAR_FROM_NAV_THRESHOLD) + .getInt(TEST_INFO_RESPONSE_FIELD); + int startX = mLauncher.getRealDisplaySize().x / 2; + int startY = mLauncher.getRealDisplaySize().y - 1; + int endX = startX; + int endY = startY - taskbarFromNavThreshold; - mLauncher.sendPointer(downTime, downTime, MotionEvent.ACTION_DOWN, unstashTarget, + mLauncher.linearGesture(startX, startY, endX, endY, 10, /* slowDown= */ true, LauncherInstrumentation.GestureScope.EXPECT_PILFER); - LauncherInstrumentation.log("showTaskbar: sent down"); + LauncherInstrumentation.log("swipeUpToUnstashTaskbar: sent linear swipe up gesture"); - try (LauncherInstrumentation.Closable c2 = mLauncher.addContextLayer("pressed down")) { - mLauncher.waitForSystemLauncherObject(TASKBAR_RES_ID); - mLauncher.sendPointer(downTime, downTime, MotionEvent.ACTION_UP, unstashTarget, - LauncherInstrumentation.GestureScope.EXPECT_PILFER); - - return new Taskbar(mLauncher); - } + return new Taskbar(mLauncher); } finally { - mLauncher.getTestInfo(REQUEST_DISABLE_MANUAL_TASKBAR_STASHING); mLauncher.getTestInfo(REQUEST_DISABLE_BLOCK_TIMEOUT); } } diff --git a/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java b/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java index 9998f52c5b..7bd331257a 100644 --- a/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java +++ b/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java @@ -799,12 +799,7 @@ public final class LauncherInstrumentation { waitUntilSystemLauncherObjectGone(OVERVIEW_RES_ID); waitUntilSystemLauncherObjectGone(SPLIT_PLACEHOLDER_RES_ID); waitUntilLauncherObjectGone(KEYBOARD_QUICK_SWITCH_RES_ID); - - if (is3PLauncher() && isTablet()) { - waitForSystemLauncherObject(TASKBAR_RES_ID); - } else { - waitUntilSystemLauncherObjectGone(TASKBAR_RES_ID); - } + waitUntilSystemLauncherObjectGone(TASKBAR_RES_ID); return waitForLauncherObject(WORKSPACE_RES_ID); } @@ -814,12 +809,7 @@ public final class LauncherInstrumentation { waitUntilSystemLauncherObjectGone(OVERVIEW_RES_ID); waitUntilSystemLauncherObjectGone(SPLIT_PLACEHOLDER_RES_ID); waitUntilLauncherObjectGone(KEYBOARD_QUICK_SWITCH_RES_ID); - - if (is3PLauncher() && isTablet()) { - waitForSystemLauncherObject(TASKBAR_RES_ID); - } else { - waitUntilSystemLauncherObjectGone(TASKBAR_RES_ID); - } + waitUntilSystemLauncherObjectGone(TASKBAR_RES_ID); return waitForLauncherObject(WIDGETS_RES_ID); } @@ -840,7 +830,7 @@ public final class LauncherInstrumentation { waitUntilSystemLauncherObjectGone(SPLIT_PLACEHOLDER_RES_ID); waitUntilLauncherObjectGone(KEYBOARD_QUICK_SWITCH_RES_ID); - if (is3PLauncher() && isTablet()) { + if (is3PLauncher() && isTablet() && !isTransientTaskbar()) { waitForSystemLauncherObject(TASKBAR_RES_ID); } else { waitUntilSystemLauncherObjectGone(TASKBAR_RES_ID); @@ -853,7 +843,7 @@ public final class LauncherInstrumentation { waitUntilLauncherObjectGone(APPS_RES_ID); waitUntilLauncherObjectGone(WORKSPACE_RES_ID); waitUntilLauncherObjectGone(WIDGETS_RES_ID); - if (isTablet()) { + if (isTablet() && !is3PLauncher()) { waitForSystemLauncherObject(TASKBAR_RES_ID); } else { waitUntilSystemLauncherObjectGone(TASKBAR_RES_ID); @@ -890,7 +880,11 @@ public final class LauncherInstrumentation { } if (isTablet()) { - waitForSystemLauncherObject(TASKBAR_RES_ID); + // Only check that Persistent Taskbar is visible, since Transient Taskbar + // may or may not be visible by design. + if (!isTransientTaskbar()) { + waitForSystemLauncherObject(TASKBAR_RES_ID); + } } else { waitUntilSystemLauncherObjectGone(TASKBAR_RES_ID); } @@ -964,7 +958,7 @@ public final class LauncherInstrumentation { /** * Using swiping up gesture to dismiss closable floating views, such as Menu or Folder Content. */ - private void swipeUpToCloseFloatingView(boolean gestureStartFromLauncher) { + private void swipeUpToCloseFloatingView() { final Point displaySize = getRealDisplaySize(); final Optional floatingRes = getFloatingResId(); @@ -973,16 +967,11 @@ public final class LauncherInstrumentation { return; } - GestureScope gestureScope = gestureStartFromLauncher - // Without the navigation bar layer, the gesture scope on tablets remains inside the - // launcher process. - ? (isTablet() ? GestureScope.DONT_EXPECT_PILFER : GestureScope.EXPECT_PILFER) - : GestureScope.EXPECT_PILFER; linearGesture( displaySize.x / 2, displaySize.y - 1, displaySize.x / 2, 0, ZERO_BUTTON_STEPS_FROM_BACKGROUND_TO_HOME, - false, gestureScope); + false, GestureScope.EXPECT_PILFER); try (LauncherInstrumentation.Closable c1 = addContextLayer( String.format("Swiped up from floating view %s to home", floatingRes.get()))) { @@ -1050,11 +1039,8 @@ public final class LauncherInstrumentation { final Point displaySize = getRealDisplaySize(); - boolean gestureStartFromLauncher = - isTablet() ? !isLauncher3() : isLauncherVisible(); - // CLose floating views before going back to home. - swipeUpToCloseFloatingView(gestureStartFromLauncher); + swipeUpToCloseFloatingView(); if (hasLauncherObject(WORKSPACE_RES_ID)) { log(action = "already at home"); @@ -1984,7 +1970,8 @@ public final class LauncherInstrumentation { } } - Point getRealDisplaySize() { + /** Returns the bounds of the display as a Point where x is width and y is height. */ + public Point getRealDisplaySize() { final Rect displayBounds = getContext().getSystemService(WindowManager.class) .getMaximumWindowMetrics() .getBounds(); @@ -2046,6 +2033,11 @@ public final class LauncherInstrumentation { : TestProtocol.REQUEST_DISABLE_BLOCK_TIMEOUT); } + public boolean isTransientTaskbar() { + return getTestInfo(TestProtocol.REQUEST_IS_TRANSIENT_TASKBAR) + .getBoolean(TestProtocol.TEST_INFO_RESPONSE_FIELD); + } + /** Enables transient taskbar for testing purposes only. */ public void enableTransientTaskbar(boolean enable) { getTestInfo(enable diff --git a/tests/tapl/com/android/launcher3/tapl/Taskbar.java b/tests/tapl/com/android/launcher3/tapl/Taskbar.java index da26694aae..f92ad9dd73 100644 --- a/tests/tapl/com/android/launcher3/tapl/Taskbar.java +++ b/tests/tapl/com/android/launcher3/tapl/Taskbar.java @@ -18,8 +18,6 @@ package com.android.launcher3.tapl; import static android.view.KeyEvent.KEYCODE_META_RIGHT; import static com.android.launcher3.tapl.LauncherInstrumentation.TASKBAR_RES_ID; -import static com.android.launcher3.testing.shared.TestProtocol.REQUEST_DISABLE_MANUAL_TASKBAR_STASHING; -import static com.android.launcher3.testing.shared.TestProtocol.REQUEST_ENABLE_MANUAL_TASKBAR_STASHING; import android.graphics.Point; import android.graphics.Rect; @@ -45,6 +43,10 @@ public final class Taskbar { Taskbar(LauncherInstrumentation launcher) { mLauncher = launcher; + try (LauncherInstrumentation.Closable c = mLauncher.addContextLayer( + "expect new taskbar to be visible")) { + mLauncher.waitForSystemLauncherObject(TASKBAR_RES_ID); + } } /** @@ -61,33 +63,32 @@ public final class Taskbar { } /** - * Hides this taskbar. - * - * The taskbar must already be visible when calling this method. + * Stashes this taskbar. + *

+ * The taskbar must already be unstashed and in transient mode when calling this method. */ - public void hide() { - mLauncher.getTestInfo(REQUEST_ENABLE_MANUAL_TASKBAR_STASHING); + public void swipeDownToStash() { + mLauncher.assertTrue("Taskbar is not transient, swipe down not supported", + mLauncher.isTransientTaskbar()); try (LauncherInstrumentation.Closable c = mLauncher.addContextLayer( "want to hide the taskbar"); LauncherInstrumentation.Closable e = mLauncher.eventsCheck()) { mLauncher.waitForSystemLauncherObject(TASKBAR_RES_ID); - final long downTime = SystemClock.uptimeMillis(); - Point stashTarget = new Point( - mLauncher.getRealDisplaySize().x - 1, mLauncher.getRealDisplaySize().y - 1); + Rect taskbarBounds = getVisibleBounds(); + int startX = taskbarBounds.centerX(); + int startY = taskbarBounds.centerY(); + int endX = startX; + int endY = mLauncher.getRealDisplaySize().y - 1; - mLauncher.sendPointer(downTime, downTime, MotionEvent.ACTION_DOWN, stashTarget, + mLauncher.linearGesture(startX, startY, endX, endY, 10, false, LauncherInstrumentation.GestureScope.DONT_EXPECT_PILFER); - LauncherInstrumentation.log("hideTaskbar: sent down"); - - try (LauncherInstrumentation.Closable c2 = mLauncher.addContextLayer("pressed down")) { + LauncherInstrumentation.log("swipeDownToStash: sent linear swipe down gesture"); + try (LauncherInstrumentation.Closable c1 = mLauncher.addContextLayer( + "expect transient taskbar to be hidden after swipe down")) { mLauncher.waitUntilSystemLauncherObjectGone(TASKBAR_RES_ID); - mLauncher.sendPointer(downTime, downTime, MotionEvent.ACTION_UP, stashTarget, - LauncherInstrumentation.GestureScope.DONT_EXPECT_PILFER); } - } finally { - mLauncher.getTestInfo(REQUEST_DISABLE_MANUAL_TASKBAR_STASHING); } } @@ -145,7 +146,7 @@ public final class Taskbar { return By.clazz(TextView.class).text(""); } - private Rect getVisibleBounds() { + public Rect getVisibleBounds() { return mLauncher.waitForSystemLauncherObject(TASKBAR_RES_ID).getVisibleBounds(); }