Loading quickstep/tests/src/com/android/quickstep/FallbackRecentsTest.java +4 −0 Original line number Diff line number Diff line Loading @@ -59,6 +59,7 @@ import com.android.launcher3.tapl.TestHelpers; import com.android.launcher3.testcomponent.TestCommandReceiver; import com.android.launcher3.ui.AbstractLauncherUiTest; import com.android.launcher3.util.Wait; import com.android.launcher3.util.rule.ExtendedLongPressTimeoutRule; import com.android.launcher3.util.rule.FailureWatcher; import com.android.launcher3.util.rule.SamplerRule; import com.android.launcher3.util.rule.ScreenRecordRule; Loading Loading @@ -105,6 +106,9 @@ public class FallbackRecentsTest { @Rule public ScreenRecordRule mScreenRecordRule = new ScreenRecordRule(); @Rule public ExtendedLongPressTimeoutRule mLongPressTimeoutRule = new ExtendedLongPressTimeoutRule(); public FallbackRecentsTest() throws RemoteException { Instrumentation instrumentation = getInstrumentation(); Context context = instrumentation.getContext(); Loading tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java +4 −0 Original line number Diff line number Diff line Loading @@ -66,6 +66,7 @@ import com.android.launcher3.util.LooperExecutor; import com.android.launcher3.util.SimpleBroadcastReceiver; import com.android.launcher3.util.TestUtil; import com.android.launcher3.util.Wait; import com.android.launcher3.util.rule.ExtendedLongPressTimeoutRule; import com.android.launcher3.util.rule.FailureWatcher; import com.android.launcher3.util.rule.SamplerRule; import com.android.launcher3.util.rule.ScreenRecordRule; Loading Loading @@ -219,6 +220,9 @@ public abstract class AbstractLauncherUiTest { @Rule public SetFlagsRule mSetFlagsRule = new SetFlagsRule(DEVICE_DEFAULT); @Rule public ExtendedLongPressTimeoutRule mLongPressTimeoutRule = new ExtendedLongPressTimeoutRule(); public static void initialize(AbstractLauncherUiTest test) throws Exception { test.reinitializeLauncherData(); test.mDevice.pressHome(); Loading tests/src/com/android/launcher3/util/rule/ExtendedLongPressTimeoutRule.java 0 → 100644 +74 −0 Original line number Diff line number Diff line /* * Copyright (C) 2024 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.util.rule; import android.content.ContentResolver; import android.provider.Settings; import android.util.Log; import android.view.ViewConfiguration; import androidx.test.InstrumentationRegistry; import org.junit.rules.TestRule; import org.junit.runner.Description; import org.junit.runners.model.Statement; public class ExtendedLongPressTimeoutRule implements TestRule { private static final String TAG = "ExtendedLongPressTimeoutRule"; private static final float LONG_PRESS_TIMEOUT_MULTIPLIER = 10f; @Override public Statement apply(Statement base, Description description) { return new Statement() { @Override public void evaluate() throws Throwable { ContentResolver contentResolver = InstrumentationRegistry.getInstrumentation() .getContext() .getContentResolver(); int prevLongPressTimeout = Settings.Secure.getInt( contentResolver, Settings.Secure.LONG_PRESS_TIMEOUT, ViewConfiguration.getLongPressTimeout()); int newLongPressTimeout = (int) (prevLongPressTimeout * LONG_PRESS_TIMEOUT_MULTIPLIER); try { Log.d(TAG, "In try-block: Setting long press timeout from " + prevLongPressTimeout + "ms to " + newLongPressTimeout + "ms"); Settings.Secure.putInt( contentResolver, Settings.Secure.LONG_PRESS_TIMEOUT, (int) (prevLongPressTimeout * LONG_PRESS_TIMEOUT_MULTIPLIER)); base.evaluate(); } catch (Exception e) { Log.e(TAG, "Error", e); throw e; } finally { Log.d(TAG, "In finally-block: resetting long press timeout to " + prevLongPressTimeout + "ms"); Settings.Secure.putInt( contentResolver, Settings.Secure.LONG_PRESS_TIMEOUT, prevLongPressTimeout); } } }; } } tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java +28 −7 Original line number Diff line number Diff line Loading @@ -1919,17 +1919,21 @@ public final class LauncherInstrumentation { } private static MotionEvent getMotionEvent(long downTime, long eventTime, int action, float x, float y, int source) { float x, float y, int source, int toolType) { return MotionEvent.obtain(downTime, eventTime, action, 1, new MotionEvent.PointerProperties[]{getPointerProperties(0)}, new MotionEvent.PointerProperties[]{getPointerProperties(0, toolType)}, new MotionEvent.PointerCoords[]{getPointerCoords(x, y)}, 0, 0, 1.0f, 1.0f, 0, 0, source, 0); } private static MotionEvent.PointerProperties getPointerProperties(int pointerId) { return getPointerProperties(pointerId, Configurator.getInstance().getToolType()); } private static MotionEvent.PointerProperties getPointerProperties(int pointerId, int toolType) { MotionEvent.PointerProperties properties = new MotionEvent.PointerProperties(); properties.id = pointerId; properties.toolType = Configurator.getInstance().getToolType(); properties.toolType = toolType; return properties; } Loading Loading @@ -1975,6 +1979,19 @@ public final class LauncherInstrumentation { public void sendPointer(long downTime, long currentTime, int action, Point point, GestureScope gestureScope, int source, boolean isRightClick) { sendPointer( downTime, currentTime, action, point, gestureScope, source, isRightClick, Configurator.getInstance().getToolType()); } public void sendPointer(long downTime, long currentTime, int action, Point point, GestureScope gestureScope, int source, boolean isRightClick, int toolType) { final boolean hasTIS = hasTIS(); int pointerCount = mPointerCount; Loading Loading @@ -2009,13 +2026,13 @@ public final class LauncherInstrumentation { ? getTrackpadMotionEvent( downTime, currentTime, action, point.x, point.y, pointerCount, mTrackpadGestureType) : getMotionEvent(downTime, currentTime, action, point.x, point.y, source); : getMotionEvent(downTime, currentTime, action, point.x, point.y, source, toolType); if (action == MotionEvent.ACTION_BUTTON_PRESS || action == MotionEvent.ACTION_BUTTON_RELEASE) { event.setActionButton(MotionEvent.BUTTON_PRIMARY); } if (isRightClick) { event.setButtonState(event.getButtonState() & MotionEvent.BUTTON_SECONDARY); event.setButtonState(event.getButtonState() | MotionEvent.BUTTON_SECONDARY); } injectEvent(event); } Loading Loading @@ -2114,15 +2131,19 @@ public final class LauncherInstrumentation { @NonNull final UiObject2 target, @NonNull String resName, Pattern longClickEvent) { final Point targetCenter = target.getVisibleCenter(); final long downTime = SystemClock.uptimeMillis(); // Use stylus secondary button press to prevent using the exteded long press timeout rule // unnecessarily sendPointer(downTime, downTime, MotionEvent.ACTION_DOWN, targetCenter, GestureScope.DONT_EXPECT_PILFER); GestureScope.DONT_EXPECT_PILFER, InputDevice.SOURCE_TOUCHSCREEN, /* isRightClick= */ true, MotionEvent.TOOL_TYPE_STYLUS); try { expectEvent(TestProtocol.SEQUENCE_MAIN, longClickEvent); final UiObject2 result = waitForLauncherObject(resName); return result; } finally { sendPointer(downTime, SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, targetCenter, GestureScope.DONT_EXPECT_PILFER); GestureScope.DONT_EXPECT_PILFER, InputDevice.SOURCE_TOUCHSCREEN, /* isRightClick= */ true, MotionEvent.TOOL_TYPE_STYLUS); } } Loading Loading
quickstep/tests/src/com/android/quickstep/FallbackRecentsTest.java +4 −0 Original line number Diff line number Diff line Loading @@ -59,6 +59,7 @@ import com.android.launcher3.tapl.TestHelpers; import com.android.launcher3.testcomponent.TestCommandReceiver; import com.android.launcher3.ui.AbstractLauncherUiTest; import com.android.launcher3.util.Wait; import com.android.launcher3.util.rule.ExtendedLongPressTimeoutRule; import com.android.launcher3.util.rule.FailureWatcher; import com.android.launcher3.util.rule.SamplerRule; import com.android.launcher3.util.rule.ScreenRecordRule; Loading Loading @@ -105,6 +106,9 @@ public class FallbackRecentsTest { @Rule public ScreenRecordRule mScreenRecordRule = new ScreenRecordRule(); @Rule public ExtendedLongPressTimeoutRule mLongPressTimeoutRule = new ExtendedLongPressTimeoutRule(); public FallbackRecentsTest() throws RemoteException { Instrumentation instrumentation = getInstrumentation(); Context context = instrumentation.getContext(); Loading
tests/src/com/android/launcher3/ui/AbstractLauncherUiTest.java +4 −0 Original line number Diff line number Diff line Loading @@ -66,6 +66,7 @@ import com.android.launcher3.util.LooperExecutor; import com.android.launcher3.util.SimpleBroadcastReceiver; import com.android.launcher3.util.TestUtil; import com.android.launcher3.util.Wait; import com.android.launcher3.util.rule.ExtendedLongPressTimeoutRule; import com.android.launcher3.util.rule.FailureWatcher; import com.android.launcher3.util.rule.SamplerRule; import com.android.launcher3.util.rule.ScreenRecordRule; Loading Loading @@ -219,6 +220,9 @@ public abstract class AbstractLauncherUiTest { @Rule public SetFlagsRule mSetFlagsRule = new SetFlagsRule(DEVICE_DEFAULT); @Rule public ExtendedLongPressTimeoutRule mLongPressTimeoutRule = new ExtendedLongPressTimeoutRule(); public static void initialize(AbstractLauncherUiTest test) throws Exception { test.reinitializeLauncherData(); test.mDevice.pressHome(); Loading
tests/src/com/android/launcher3/util/rule/ExtendedLongPressTimeoutRule.java 0 → 100644 +74 −0 Original line number Diff line number Diff line /* * Copyright (C) 2024 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.util.rule; import android.content.ContentResolver; import android.provider.Settings; import android.util.Log; import android.view.ViewConfiguration; import androidx.test.InstrumentationRegistry; import org.junit.rules.TestRule; import org.junit.runner.Description; import org.junit.runners.model.Statement; public class ExtendedLongPressTimeoutRule implements TestRule { private static final String TAG = "ExtendedLongPressTimeoutRule"; private static final float LONG_PRESS_TIMEOUT_MULTIPLIER = 10f; @Override public Statement apply(Statement base, Description description) { return new Statement() { @Override public void evaluate() throws Throwable { ContentResolver contentResolver = InstrumentationRegistry.getInstrumentation() .getContext() .getContentResolver(); int prevLongPressTimeout = Settings.Secure.getInt( contentResolver, Settings.Secure.LONG_PRESS_TIMEOUT, ViewConfiguration.getLongPressTimeout()); int newLongPressTimeout = (int) (prevLongPressTimeout * LONG_PRESS_TIMEOUT_MULTIPLIER); try { Log.d(TAG, "In try-block: Setting long press timeout from " + prevLongPressTimeout + "ms to " + newLongPressTimeout + "ms"); Settings.Secure.putInt( contentResolver, Settings.Secure.LONG_PRESS_TIMEOUT, (int) (prevLongPressTimeout * LONG_PRESS_TIMEOUT_MULTIPLIER)); base.evaluate(); } catch (Exception e) { Log.e(TAG, "Error", e); throw e; } finally { Log.d(TAG, "In finally-block: resetting long press timeout to " + prevLongPressTimeout + "ms"); Settings.Secure.putInt( contentResolver, Settings.Secure.LONG_PRESS_TIMEOUT, prevLongPressTimeout); } } }; } }
tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java +28 −7 Original line number Diff line number Diff line Loading @@ -1919,17 +1919,21 @@ public final class LauncherInstrumentation { } private static MotionEvent getMotionEvent(long downTime, long eventTime, int action, float x, float y, int source) { float x, float y, int source, int toolType) { return MotionEvent.obtain(downTime, eventTime, action, 1, new MotionEvent.PointerProperties[]{getPointerProperties(0)}, new MotionEvent.PointerProperties[]{getPointerProperties(0, toolType)}, new MotionEvent.PointerCoords[]{getPointerCoords(x, y)}, 0, 0, 1.0f, 1.0f, 0, 0, source, 0); } private static MotionEvent.PointerProperties getPointerProperties(int pointerId) { return getPointerProperties(pointerId, Configurator.getInstance().getToolType()); } private static MotionEvent.PointerProperties getPointerProperties(int pointerId, int toolType) { MotionEvent.PointerProperties properties = new MotionEvent.PointerProperties(); properties.id = pointerId; properties.toolType = Configurator.getInstance().getToolType(); properties.toolType = toolType; return properties; } Loading Loading @@ -1975,6 +1979,19 @@ public final class LauncherInstrumentation { public void sendPointer(long downTime, long currentTime, int action, Point point, GestureScope gestureScope, int source, boolean isRightClick) { sendPointer( downTime, currentTime, action, point, gestureScope, source, isRightClick, Configurator.getInstance().getToolType()); } public void sendPointer(long downTime, long currentTime, int action, Point point, GestureScope gestureScope, int source, boolean isRightClick, int toolType) { final boolean hasTIS = hasTIS(); int pointerCount = mPointerCount; Loading Loading @@ -2009,13 +2026,13 @@ public final class LauncherInstrumentation { ? getTrackpadMotionEvent( downTime, currentTime, action, point.x, point.y, pointerCount, mTrackpadGestureType) : getMotionEvent(downTime, currentTime, action, point.x, point.y, source); : getMotionEvent(downTime, currentTime, action, point.x, point.y, source, toolType); if (action == MotionEvent.ACTION_BUTTON_PRESS || action == MotionEvent.ACTION_BUTTON_RELEASE) { event.setActionButton(MotionEvent.BUTTON_PRIMARY); } if (isRightClick) { event.setButtonState(event.getButtonState() & MotionEvent.BUTTON_SECONDARY); event.setButtonState(event.getButtonState() | MotionEvent.BUTTON_SECONDARY); } injectEvent(event); } Loading Loading @@ -2114,15 +2131,19 @@ public final class LauncherInstrumentation { @NonNull final UiObject2 target, @NonNull String resName, Pattern longClickEvent) { final Point targetCenter = target.getVisibleCenter(); final long downTime = SystemClock.uptimeMillis(); // Use stylus secondary button press to prevent using the exteded long press timeout rule // unnecessarily sendPointer(downTime, downTime, MotionEvent.ACTION_DOWN, targetCenter, GestureScope.DONT_EXPECT_PILFER); GestureScope.DONT_EXPECT_PILFER, InputDevice.SOURCE_TOUCHSCREEN, /* isRightClick= */ true, MotionEvent.TOOL_TYPE_STYLUS); try { expectEvent(TestProtocol.SEQUENCE_MAIN, longClickEvent); final UiObject2 result = waitForLauncherObject(resName); return result; } finally { sendPointer(downTime, SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, targetCenter, GestureScope.DONT_EXPECT_PILFER); GestureScope.DONT_EXPECT_PILFER, InputDevice.SOURCE_TOUCHSCREEN, /* isRightClick= */ true, MotionEvent.TOOL_TYPE_STYLUS); } } Loading