Loading quickstep/res/color/menu_item_hover_state_color.xml 0 → 100644 +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 quickstep/res/drawable/task_menu_item_bg.xml +2 −3 Original line number Diff line number Diff line Loading @@ -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> tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java +11 −1 Original line number Diff line number Diff line Loading @@ -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"); Loading Loading @@ -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; Loading Loading @@ -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); Loading tests/tapl/com/android/launcher3/tapl/OverviewTaskMenu.java +8 −0 Original line number Diff line number Diff line Loading @@ -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))); } } tests/tapl/com/android/launcher3/tapl/OverviewTaskMenuItem.java 0 → 100644 +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); } } } } Loading
quickstep/res/color/menu_item_hover_state_color.xml 0 → 100644 +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
quickstep/res/drawable/task_menu_item_bg.xml +2 −3 Original line number Diff line number Diff line Loading @@ -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>
tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java +11 −1 Original line number Diff line number Diff line Loading @@ -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"); Loading Loading @@ -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; Loading Loading @@ -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); Loading
tests/tapl/com/android/launcher3/tapl/OverviewTaskMenu.java +8 −0 Original line number Diff line number Diff line Loading @@ -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))); } }
tests/tapl/com/android/launcher3/tapl/OverviewTaskMenuItem.java 0 → 100644 +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); } } } }