Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2803ccad authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add ExtendedLongPressTimeoutRule to all AbstractLauncherUiTest" into main

parents 086758c8 02e57b3d
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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();
+4 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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();
+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);
                }
            }
        };
    }
}
+28 −7
Original line number Diff line number Diff line
@@ -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;
    }

@@ -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;

@@ -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);
    }
@@ -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);
        }
    }