diff --git a/quickstep/tests/src/com/android/quickstep/TaplTestsTrackpad.java b/quickstep/tests/src/com/android/quickstep/TaplTestsTrackpad.java index 4c6874e47b..7ae3f29770 100644 --- a/quickstep/tests/src/com/android/quickstep/TaplTestsTrackpad.java +++ b/quickstep/tests/src/com/android/quickstep/TaplTestsTrackpad.java @@ -16,12 +16,19 @@ package com.android.quickstep; +import static com.android.quickstep.NavigationModeSwitchRule.Mode.ZERO_BUTTON; + import static org.junit.Assert.assertNotNull; +import static org.junit.Assume.assumeFalse; import static org.junit.Assume.assumeTrue; +import android.app.Instrumentation; + import androidx.test.filters.LargeTest; +import androidx.test.platform.app.InstrumentationRegistry; import androidx.test.runner.AndroidJUnit4; +import com.android.launcher3.config.FeatureFlags; import com.android.launcher3.tapl.LauncherInstrumentation.TrackpadGestureType; import com.android.launcher3.ui.PortraitLandscapeRunner.PortraitLandscape; import com.android.launcher3.ui.TaplTestsLauncher3; @@ -36,6 +43,9 @@ import org.junit.runner.RunWith; @RunWith(AndroidJUnit4.class) public class TaplTestsTrackpad extends AbstractQuickStepTest { + private static final String READ_DEVICE_CONFIG_PERMISSION = + "android.permission.READ_DEVICE_CONFIG"; + @Before public void setUp() throws Exception { super.setUp(); @@ -58,6 +68,29 @@ public class TaplTestsTrackpad extends AbstractQuickStepTest { mLauncher.goHome(); } + @Test + @PortraitLandscape + // TODO(b/291944684): Support back in 3-button mode. It requires triggering the logic to enable + // trackpad gesture back in SysUI. Normally it's triggered by the attachment of a trackpad. We + // need to figure out a way to emulate that in the test, or bypass the logic altogether. + @NavigationModeSwitch(mode = ZERO_BUTTON) + public void pressBack() throws Exception { + assumeTrue(mLauncher.isTablet()); + assumeFalse(FeatureFlags.ENABLE_BACK_SWIPE_LAUNCHER_ANIMATION.get()); + Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation(); + + try { + instrumentation.getUiAutomation().adoptShellPermissionIdentity( + READ_DEVICE_CONFIG_PERMISSION); + mLauncher.setTrackpadGestureType(TrackpadGestureType.THREE_FINGER); + + startTestActivity(2); + mLauncher.pressBack(); + } finally { + instrumentation.getUiAutomation().dropShellPermissionIdentity(); + } + } + @Test @PortraitLandscape @NavigationModeSwitch diff --git a/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java b/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java index 3395bbf83c..b929293fa7 100644 --- a/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java +++ b/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java @@ -99,15 +99,17 @@ public final class LauncherInstrumentation { private static final int ZERO_BUTTON_STEPS_FROM_BACKGROUND_TO_HOME = 15; private static final int GESTURE_STEP_MS = 16; - static final Pattern EVENT_TOUCH_DOWN = getTouchEventPattern("ACTION_DOWN"); - static final Pattern EVENT_TOUCH_UP = getTouchEventPattern("ACTION_UP"); - private static final Pattern EVENT_TOUCH_CANCEL = getTouchEventPattern("ACTION_CANCEL"); + static final Pattern EVENT_TOUCH_DOWN = getTouchEventPatternWithPointerCount("ACTION_DOWN"); + static final Pattern EVENT_TOUCH_UP = getTouchEventPatternWithPointerCount("ACTION_UP"); + private static final Pattern EVENT_TOUCH_CANCEL = getTouchEventPatternWithPointerCount( + "ACTION_CANCEL"); static final Pattern EVENT_PILFER_POINTERS = Pattern.compile("pilferPointers"); static final Pattern EVENT_START = Pattern.compile("start:"); static final Pattern EVENT_TOUCH_DOWN_TIS = getTouchEventPatternTIS("ACTION_DOWN"); static final Pattern EVENT_TOUCH_UP_TIS = getTouchEventPatternTIS("ACTION_UP"); - static final Pattern EVENT_TOUCH_CANCEL_TIS = getTouchEventPatternTIS("ACTION_CANCEL"); + static final Pattern EVENT_TOUCH_CANCEL_TIS = getTouchEventPattern( + "TouchInteractionService.onInputEvent", "ACTION_CANCEL"); static final Pattern EVENT_HOVER_ENTER_TIS = getTouchEventPatternTIS("ACTION_HOVER_ENTER"); static final Pattern EVENT_HOVER_EXIT_TIS = getTouchEventPatternTIS("ACTION_HOVER_EXIT"); static final Pattern EVENT_BUTTON_PRESS_TIS = getTouchEventPatternTIS("ACTION_BUTTON_PRESS"); @@ -212,30 +214,35 @@ public final class LauncherInstrumentation { private int mPointerCount = 0; private static Pattern getTouchEventPattern(String prefix, String action) { - return getTouchEventPattern(prefix, action, 1); + return Pattern.compile( + prefix + ": MotionEvent.*?action=" + action + ".*?id\\[0\\]=0" + + ".*?toolType\\[0\\]=TOOL_TYPE_FINGER.*?buttonState=0.*?"); } - private static Pattern getTouchEventPattern(String prefix, String action, int pointerCount) { + private static Pattern getTouchEventPatternWithPointerCount(String prefix, String action, + int pointerCount) { return Pattern.compile( prefix + ": MotionEvent.*?action=" + action + ".*?id\\[0\\]=0" + ".*?toolType\\[0\\]=TOOL_TYPE_FINGER.*?buttonState=0.*?pointerCount=" + pointerCount); } - private static Pattern getTouchEventPattern(String action) { - return getTouchEventPattern("Touch event", action); + private static Pattern getTouchEventPatternWithPointerCount(String action) { + return getTouchEventPatternWithPointerCount("Touch event", action, 1); } - private static Pattern getTouchEventPattern(String action, int pointerCount) { - return getTouchEventPattern("Touch event", action, pointerCount); + private static Pattern getTouchEventPatternWithPointerCount(String action, int pointerCount) { + return getTouchEventPatternWithPointerCount("Touch event", action, pointerCount); } private static Pattern getTouchEventPatternTIS(String action) { - return getTouchEventPattern("TouchInteractionService.onInputEvent", action); + return getTouchEventPatternWithPointerCount("TouchInteractionService.onInputEvent", action, + 1); } private static Pattern getTouchEventPatternTIS(String action, int pointerCount) { - return getTouchEventPattern("TouchInteractionService.onInputEvent", action, pointerCount); + return getTouchEventPatternWithPointerCount("TouchInteractionService.onInputEvent", action, + pointerCount); } private static Pattern getKeyEventPattern(String action, String keyCode) { @@ -1814,11 +1821,14 @@ public final class LauncherInstrumentation { && gestureScope != GestureScope.OUTSIDE_WITHOUT_PILFER && gestureScope != GestureScope.OUTSIDE_WITH_KEYCODE && (!isTrackpadGesture || isTwoFingerTrackpadGesture)) { - expectEvent(TestProtocol.SEQUENCE_MAIN, - getTouchEventPattern("ACTION_POINTER_DOWN", mPointerCount)); + expectEvent(TestProtocol.SEQUENCE_MAIN, getTouchEventPatternWithPointerCount( + "ACTION_POINTER_DOWN", mPointerCount)); + } + if (hasTIS && (isTrackpadGestureEnabled() + || getNavigationModel() != NavigationModel.THREE_BUTTON)) { + expectEvent(TestProtocol.SEQUENCE_TIS, getTouchEventPatternTIS( + "ACTION_POINTER_DOWN", mPointerCount)); } - expectEvent(TestProtocol.SEQUENCE_TIS, getTouchEventPatternTIS( - "ACTION_POINTER_DOWN", mPointerCount)); pointerCount = mPointerCount; break; case MotionEvent.ACTION_POINTER_UP: @@ -1826,14 +1836,17 @@ public final class LauncherInstrumentation { && gestureScope != GestureScope.OUTSIDE_WITHOUT_PILFER && gestureScope != GestureScope.OUTSIDE_WITH_KEYCODE && (!isTrackpadGesture || isTwoFingerTrackpadGesture)) { - expectEvent(TestProtocol.SEQUENCE_MAIN, - getTouchEventPattern("ACTION_POINTER_UP", mPointerCount)); + expectEvent(TestProtocol.SEQUENCE_MAIN, getTouchEventPatternWithPointerCount( + "ACTION_POINTER_UP", mPointerCount)); } // When the gesture is handled outside, it's cancelled within launcher. - if (gestureScope != GestureScope.INSIDE_TO_OUTSIDE_WITH_KEYCODE - && gestureScope != GestureScope.OUTSIDE_WITH_KEYCODE) { - expectEvent(TestProtocol.SEQUENCE_TIS, getTouchEventPatternTIS( - "ACTION_POINTER_UP", mPointerCount)); + if (hasTIS && (isTrackpadGestureEnabled() + || getNavigationModel() != NavigationModel.THREE_BUTTON)) { + if (gestureScope != GestureScope.INSIDE_TO_OUTSIDE_WITH_KEYCODE + && gestureScope != GestureScope.OUTSIDE_WITH_KEYCODE) { + expectEvent(TestProtocol.SEQUENCE_TIS, getTouchEventPatternTIS( + "ACTION_POINTER_UP", mPointerCount)); + } } mPointerCount--; break;