From 625b78ae13b6726e5a3b582b80635ae6beca0091 Mon Sep 17 00:00:00 2001 From: Jagrut Desai Date: Mon, 13 Jan 2025 11:55:38 -0800 Subject: [PATCH] Fix Taskbar icon Accessibilty Focus on hovering The problem: ArrowTipView was TypeAccessible hence taking a focus away from taksbar icon. The hover event was getting consumer by onHover of the listener and not getting passed to view. Upon passing the hover event we see icon scale up. We don't want both icon to scale up and show tootip when hovering. The Solution: pass motion event to onHoverEvent for icon view and mark ArrowTipView to be not included as Accessible View. For disabling hove ring for taskbar icon we introduced new field to track if hovering is enabled for display type for that icon. Test: Manual, Presubmit Bug: 284081291 Flag: EXEMPT bugfix Change-Id: Ie02d17856b26f82887fd178ccf0a7351416cc43e --- .../TaskbarHoverToolTipController.java | 2 +- .../TaskbarHoverToolTipControllerTest.java | 40 +++++++++---------- .../launcher3/AbstractFloatingView.java | 2 +- src/com/android/launcher3/BubbleTextView.java | 1 + 4 files changed, 23 insertions(+), 22 deletions(-) diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarHoverToolTipController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarHoverToolTipController.java index 3bff31f802..b7000dbbb0 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarHoverToolTipController.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarHoverToolTipController.java @@ -108,7 +108,7 @@ public class TaskbarHoverToolTipController implements View.OnHoverListener { revealHoverToolTip(); mActivity.setAutohideSuspendFlag(FLAG_AUTOHIDE_SUSPEND_HOVERING_ICONS, true); } - return true; + return false; } private void revealHoverToolTip() { diff --git a/quickstep/tests/src/com/android/launcher3/taskbar/TaskbarHoverToolTipControllerTest.java b/quickstep/tests/src/com/android/launcher3/taskbar/TaskbarHoverToolTipControllerTest.java index 67a0ee4270..3f7c85c899 100644 --- a/quickstep/tests/src/com/android/launcher3/taskbar/TaskbarHoverToolTipControllerTest.java +++ b/quickstep/tests/src/com/android/launcher3/taskbar/TaskbarHoverToolTipControllerTest.java @@ -127,11 +127,11 @@ public class TaskbarHoverToolTipControllerTest extends TaskbarBaseTestCase { when(mMotionEvent.getAction()).thenReturn(MotionEvent.ACTION_HOVER_ENTER); when(mMotionEvent.getActionMasked()).thenReturn(MotionEvent.ACTION_HOVER_ENTER); - boolean hoverHandled = + boolean hoverConsumed = mTaskbarHoverToolTipController.onHover(mHoverBubbleTextView, mMotionEvent); waitForIdleSync(); - assertThat(hoverHandled).isTrue(); + assertThat(hoverConsumed).isFalse(); verify(taskbarActivityContext).setAutohideSuspendFlag(FLAG_AUTOHIDE_SUSPEND_HOVERING_ICONS, true); } @@ -141,11 +141,11 @@ public class TaskbarHoverToolTipControllerTest extends TaskbarBaseTestCase { when(mMotionEvent.getAction()).thenReturn(MotionEvent.ACTION_HOVER_EXIT); when(mMotionEvent.getActionMasked()).thenReturn(MotionEvent.ACTION_HOVER_EXIT); - boolean hoverHandled = + boolean hoverConsumed = mTaskbarHoverToolTipController.onHover(mHoverBubbleTextView, mMotionEvent); waitForIdleSync(); - assertThat(hoverHandled).isTrue(); + assertThat(hoverConsumed).isFalse(); verify(taskbarActivityContext).setAutohideSuspendFlag(FLAG_AUTOHIDE_SUSPEND_HOVERING_ICONS, false); } @@ -155,11 +155,11 @@ public class TaskbarHoverToolTipControllerTest extends TaskbarBaseTestCase { when(mMotionEvent.getAction()).thenReturn(MotionEvent.ACTION_HOVER_ENTER); when(mMotionEvent.getActionMasked()).thenReturn(MotionEvent.ACTION_HOVER_ENTER); - boolean hoverHandled = + boolean hoverConsumed = mTaskbarHoverToolTipController.onHover(mHoverFolderIcon, mMotionEvent); waitForIdleSync(); - assertThat(hoverHandled).isTrue(); + assertThat(hoverConsumed).isFalse(); verify(taskbarActivityContext).setAutohideSuspendFlag(FLAG_AUTOHIDE_SUSPEND_HOVERING_ICONS, true); } @@ -169,11 +169,11 @@ public class TaskbarHoverToolTipControllerTest extends TaskbarBaseTestCase { when(mMotionEvent.getAction()).thenReturn(MotionEvent.ACTION_HOVER_EXIT); when(mMotionEvent.getActionMasked()).thenReturn(MotionEvent.ACTION_HOVER_EXIT); - boolean hoverHandled = + boolean hoverConsumed = mTaskbarHoverToolTipController.onHover(mHoverFolderIcon, mMotionEvent); waitForIdleSync(); - assertThat(hoverHandled).isTrue(); + assertThat(hoverConsumed).isFalse(); verify(taskbarActivityContext).setAutohideSuspendFlag(FLAG_AUTOHIDE_SUSPEND_HOVERING_ICONS, false); } @@ -184,11 +184,11 @@ public class TaskbarHoverToolTipControllerTest extends TaskbarBaseTestCase { when(mMotionEvent.getActionMasked()).thenReturn(MotionEvent.ACTION_HOVER_EXIT); doReturn(true).when(mSpyFolderView).isOpen(); - boolean hoverHandled = + boolean hoverConsumed = mTaskbarHoverToolTipController.onHover(mHoverFolderIcon, mMotionEvent); waitForIdleSync(); - assertThat(hoverHandled).isTrue(); + assertThat(hoverConsumed).isFalse(); verify(taskbarActivityContext).setAutohideSuspendFlag(FLAG_AUTOHIDE_SUSPEND_HOVERING_ICONS, false); } @@ -199,10 +199,10 @@ public class TaskbarHoverToolTipControllerTest extends TaskbarBaseTestCase { when(mMotionEvent.getActionMasked()).thenReturn(MotionEvent.ACTION_HOVER_ENTER); doReturn(true).when(mSpyFolderView).isOpen(); - boolean hoverHandled = + boolean hoverConsumed = mTaskbarHoverToolTipController.onHover(mHoverFolderIcon, mMotionEvent); - assertThat(hoverHandled).isTrue(); + assertThat(hoverConsumed).isFalse(); } @Test @@ -210,10 +210,10 @@ public class TaskbarHoverToolTipControllerTest extends TaskbarBaseTestCase { when(mMotionEvent.getAction()).thenReturn(MotionEvent.ACTION_HOVER_MOVE); when(mMotionEvent.getActionMasked()).thenReturn(MotionEvent.ACTION_HOVER_MOVE); - boolean hoverHandled = + boolean hoverConsumed = mTaskbarHoverToolTipController.onHover(mHoverFolderIcon, mMotionEvent); - assertThat(hoverHandled).isTrue(); + assertThat(hoverConsumed).isFalse(); } @Test @@ -221,11 +221,11 @@ public class TaskbarHoverToolTipControllerTest extends TaskbarBaseTestCase { when(mMotionEvent.getAction()).thenReturn(MotionEvent.ACTION_HOVER_ENTER); when(mMotionEvent.getActionMasked()).thenReturn(MotionEvent.ACTION_HOVER_ENTER); - boolean hoverHandled = + boolean hoverConsumed = mTaskbarHoverToolTipController.onHover(mAppPairIcon, mMotionEvent); waitForIdleSync(); - assertThat(hoverHandled).isTrue(); + assertThat(hoverConsumed).isFalse(); verify(taskbarActivityContext).setAutohideSuspendFlag(FLAG_AUTOHIDE_SUSPEND_HOVERING_ICONS, true); } @@ -235,11 +235,11 @@ public class TaskbarHoverToolTipControllerTest extends TaskbarBaseTestCase { when(mMotionEvent.getAction()).thenReturn(MotionEvent.ACTION_HOVER_EXIT); when(mMotionEvent.getActionMasked()).thenReturn(MotionEvent.ACTION_HOVER_EXIT); - boolean hoverHandled = + boolean hoverConsumed = mTaskbarHoverToolTipController.onHover(mAppPairIcon, mMotionEvent); waitForIdleSync(); - assertThat(hoverHandled).isTrue(); + assertThat(hoverConsumed).isFalse(); verify(taskbarActivityContext).setAutohideSuspendFlag(FLAG_AUTOHIDE_SUSPEND_HOVERING_ICONS, false); } @@ -250,11 +250,11 @@ public class TaskbarHoverToolTipControllerTest extends TaskbarBaseTestCase { when(mMotionEvent.getActionMasked()).thenReturn(MotionEvent.ACTION_HOVER_ENTER); when(taskbarActivityContext.isIconAlignedWithHotseat()).thenReturn(true); - boolean hoverHandled = + boolean hoverConsumed = mTaskbarHoverToolTipController.onHover(mHoverBubbleTextView, mMotionEvent); waitForIdleSync(); - assertThat(hoverHandled).isTrue(); + assertThat(hoverConsumed).isFalse(); verify(taskbarActivityContext).setAutohideSuspendFlag(FLAG_AUTOHIDE_SUSPEND_HOVERING_ICONS, true); } diff --git a/src/com/android/launcher3/AbstractFloatingView.java b/src/com/android/launcher3/AbstractFloatingView.java index 4e44324678..753b2e2978 100644 --- a/src/com/android/launcher3/AbstractFloatingView.java +++ b/src/com/android/launcher3/AbstractFloatingView.java @@ -126,7 +126,7 @@ public abstract class AbstractFloatingView extends LinearLayout implements Touch /** Type of popups that should get exclusive accessibility focus. */ public static final int TYPE_ACCESSIBLE = TYPE_ALL & ~TYPE_DISCOVERY_BOUNCE & ~TYPE_LISTENER & ~TYPE_ALL_APPS_EDU & ~TYPE_TASKBAR_ALL_APPS & ~TYPE_PIN_IME_POPUP - & ~TYPE_WIDGET_RESIZE_FRAME & ~TYPE_ONE_GRID_MIGRATION_EDU; + & ~TYPE_WIDGET_RESIZE_FRAME & ~TYPE_ONE_GRID_MIGRATION_EDU & ~TYPE_ON_BOARD_POPUP; // These view all have particular operation associated with swipe down interaction. public static final int TYPE_STATUS_BAR_SWIPE_DOWN_DISALLOW = TYPE_WIDGETS_BOTTOM_SHEET | diff --git a/src/com/android/launcher3/BubbleTextView.java b/src/com/android/launcher3/BubbleTextView.java index afc7b2ea94..315096c841 100644 --- a/src/com/android/launcher3/BubbleTextView.java +++ b/src/com/android/launcher3/BubbleTextView.java @@ -1239,6 +1239,7 @@ public class BubbleTextView extends TextView implements ItemInfoUpdateReceiver, mIcon = icon; if (mIcon != null) { mIcon.setVisible(getWindowVisibility() == VISIBLE && isShown(), false); + mIcon.setHoverScaleEnabledForDisplay(mDisplay != DISPLAY_TASKBAR); } }