From f9d63414580a0fe37641873637d79598374eaf26 Mon Sep 17 00:00:00 2001 From: Toni Barzic Date: Wed, 4 Jun 2025 21:29:04 +0000 Subject: [PATCH] Add tooltip for taskbar overflow button Bug: 402787161 Test: Manual Flag: com.android.window.flags.enable_taskbar_overflow Change-Id: I04704612260f17561b4d18804d792a3fe0d47313 --- quickstep/res/values/strings.xml | 2 +- .../taskbar/TaskbarHoverToolTipController.java | 2 ++ .../launcher3/taskbar/TaskbarOverflowView.java | 12 ++++++++++++ .../com/android/launcher3/taskbar/TaskbarView.java | 3 +++ .../android/launcher3/taskbar/TaskbarOverflowTest.kt | 12 ++++++++++++ 5 files changed, 30 insertions(+), 1 deletion(-) diff --git a/quickstep/res/values/strings.xml b/quickstep/res/values/strings.xml index 05f2397753..231970bb17 100644 --- a/quickstep/res/values/strings.xml +++ b/quickstep/res/values/strings.xml @@ -319,7 +319,7 @@ Taskbar Divider - Taskbar Overflow + Other recent apps diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarHoverToolTipController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarHoverToolTipController.java index 63d98d64a5..42ad5b2aa1 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarHoverToolTipController.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarHoverToolTipController.java @@ -134,6 +134,8 @@ public class TaskbarHoverToolTipController implements View.OnHoverListener { return icon.mInfo.title.toString(); } else if (mHoverView instanceof AppPairIcon icon) { return icon.getTitleTextView().getText().toString(); + } else if (mHoverView instanceof TaskbarOverflowView icon) { + return icon.getTextForTooltipPopup(); } else { return null; } diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarOverflowView.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarOverflowView.java index d909d19fb8..34787641c2 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarOverflowView.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarOverflowView.java @@ -39,6 +39,7 @@ import androidx.annotation.VisibleForTesting; import androidx.core.graphics.ColorUtils; import com.android.app.animation.Interpolators; +import com.android.launcher3.R; import com.android.launcher3.Reorderable; import com.android.launcher3.Utilities; import com.android.launcher3.icons.IconNormalizer; @@ -339,6 +340,17 @@ public class TaskbarOverflowView extends FrameLayout implements Reorderable { } } + /** + * @return Tooltip to be used for the taskbar overflow view - returns null if the view should + * not have a tooltip. + */ + public String getTextForTooltipPopup() { + if (mIsActive) { + return null; + } + return getResources().getString(R.string.taskbar_overflow_a11y_title); + } + /** * Returns the view's state (whether it shows a set of app icons or a leave-behind circle). */ diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java index 3f5e425688..25d320d55f 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarView.java @@ -363,6 +363,9 @@ public class TaskbarView extends FrameLayout implements FolderIcon.FolderIconPar mControllerCallbacks.getOverflowOnClickListener()); mTaskbarOverflowView.setOnLongClickListener( mControllerCallbacks.getOverflowOnLongClickListener()); + if (enableCursorHoverStates()) { + setHoverListenerForIcon(mTaskbarOverflowView); + } } if (ENABLE_TASKBAR_OVERFLOW.isTrue()) { diff --git a/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/TaskbarOverflowTest.kt b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/TaskbarOverflowTest.kt index 0d94a6f869..7485b3080b 100644 --- a/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/TaskbarOverflowTest.kt +++ b/quickstep/tests/multivalentTests/src/com/android/launcher3/taskbar/TaskbarOverflowTest.kt @@ -369,6 +369,8 @@ class TaskbarOverflowTest { createDesktopTask(createdTasks) assertThat(taskbarOverflowIconIndex).isEqualTo(initialIconCount) + assertThat(getOverflowIconTooltipText()).isEqualTo("Other recent apps") + tapOverflowIcon() // Keyboard quick switch view is shown only after list of recent task is asynchronously // retrieved from the recents model. @@ -377,9 +379,11 @@ class TaskbarOverflowTest { assertThat(getOnUiThread { keyboardQuickSwitchController.isShownFromTaskbar }).isTrue() assertThat(getOnUiThread { keyboardQuickSwitchController.shownTaskIds() }) .containsExactlyElementsIn(0..