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

Commit fb9687dd authored by Pat Manning's avatar Pat Manning Committed by Android (Google) Code Review
Browse files

Merge "Change hover state based on color selector" into udc-dev

parents 1aa2383d f8bfdef4
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:androidprv="http://schemas.android.com/apk/prv/res/android">
    <item android:state_hovered="false" android:color="?androidprv:attr/colorSurface" />
    <item android:state_hovered="true" android:color="?androidprv:attr/colorSurfaceVariant" />
</selector>
 No newline at end of file
+2 −3
Original line number Diff line number Diff line
@@ -15,8 +15,7 @@
     limitations under the License.
-->

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:androidprv="http://schemas.android.com/apk/prv/res/android">
    <solid android:color="?androidprv:attr/colorSurface" />
<shape xmlns:android="http://schemas.android.com/apk/res/android">
    <solid android:color="@color/menu_item_hover_state_color" />
    <corners android:radius="@dimen/task_menu_item_corner_radius" />
</shape>
+11 −1
Original line number Diff line number Diff line
@@ -107,6 +107,8 @@ public final class LauncherInstrumentation {
    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_HOVER_ENTER_TIS = getTouchEventPatternTIS("ACTION_HOVER_ENTER");
    static final Pattern EVENT_HOVER_EXIT_TIS = getTouchEventPatternTIS("ACTION_HOVER_EXIT");

    private static final Pattern EVENT_KEY_BACK_DOWN =
            getKeyEventPattern("ACTION_DOWN", "KEYCODE_BACK");
@@ -140,7 +142,9 @@ public final class LauncherInstrumentation {
     * Represents a point in the code at which a callback can run.
     */
    public enum CALLBACK_RUN_POINT {
        CALLBACK_HOLD_BEFORE_DROP
        CALLBACK_HOLD_BEFORE_DROP,
        CALLBACK_HOVER_ENTER,
        CALLBACK_HOVER_EXIT,
    }

    private Consumer<CALLBACK_RUN_POINT> mCallbackAtRunPoint = null;
@@ -1682,6 +1686,12 @@ public final class LauncherInstrumentation {
                                    ? EVENT_TOUCH_CANCEL_TIS : EVENT_TOUCH_UP_TIS);
                }
                break;
            case MotionEvent.ACTION_HOVER_ENTER:
                expectEvent(TestProtocol.SEQUENCE_TIS, EVENT_HOVER_ENTER_TIS);
                break;
            case MotionEvent.ACTION_HOVER_EXIT:
                expectEvent(TestProtocol.SEQUENCE_TIS, EVENT_HOVER_EXIT_TIS);
                break;
        }

        final MotionEvent event = getMotionEvent(downTime, currentTime, action, point.x, point.y);
+8 −0
Original line number Diff line number Diff line
@@ -55,4 +55,12 @@ public class OverviewTaskMenu {
        UiObject2 menuItem = mLauncher.findObjectInContainer(mMenu, By.text(expectedMenuItemText));
        return menuItem != null;
    }

    /**
     * Returns the menu item specified by name if present.
     */
    public OverviewTaskMenuItem getMenuItemByName(String menuItemName) {
        return new OverviewTaskMenuItem(mLauncher,
                mLauncher.waitForObjectInContainer(mMenu, By.text(menuItemName)));
    }
}
+69 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2023 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 static com.android.launcher3.tapl.LauncherInstrumentation.CALLBACK_RUN_POINT.CALLBACK_HOVER_ENTER;
import static com.android.launcher3.tapl.LauncherInstrumentation.CALLBACK_RUN_POINT.CALLBACK_HOVER_EXIT;

import android.graphics.Point;
import android.graphics.Rect;
import android.os.SystemClock;
import android.view.MotionEvent;

import androidx.test.uiautomator.UiObject2;

/** Represents an item in the overview task menu. */
public class OverviewTaskMenuItem {

    private final LauncherInstrumentation mLauncher;
    private final UiObject2 mMenuItem;

    OverviewTaskMenuItem(LauncherInstrumentation launcher, UiObject2 menuItem) {
        mLauncher = launcher;
        mMenuItem = menuItem;
    }

    /**
     * Returns this menu item's visible bounds.
     */
    public Rect getVisibleBounds() {
        return mMenuItem.getVisibleBounds();
    }

    /**
     * Emulate the cursor entering and exiting a hover over this menu item.
     */
    public void hoverCursor() {
        try (LauncherInstrumentation.Closable e = mLauncher.eventsCheck();
             LauncherInstrumentation.Closable c = mLauncher.addContextLayer(
                     "cursor hover entering menu item")) {
            long downTime = SystemClock.uptimeMillis();
            mLauncher.sendPointer(downTime, downTime, MotionEvent.ACTION_HOVER_ENTER,
                    new Point(mMenuItem.getVisibleCenter().x, mMenuItem.getVisibleCenter().y),
                    null);
            mLauncher.runCallbackIfActive(CALLBACK_HOVER_ENTER);

            try (LauncherInstrumentation.Closable c1 = mLauncher.addContextLayer(
                    "cursor hover exiting menu item")) {
                downTime = SystemClock.uptimeMillis();
                mLauncher.sendPointer(downTime, downTime, MotionEvent.ACTION_HOVER_EXIT,
                        new Point(mMenuItem.getVisibleCenter().x, mMenuItem.getVisibleCenter().y),
                        null);
                mLauncher.runCallbackIfActive(CALLBACK_HOVER_EXIT);
            }
        }
    }
}