From 5476da968f079b353f7fa5133f12430d241cef9b Mon Sep 17 00:00:00 2001 From: Phil Weaver Date: Wed, 7 Jun 2017 18:27:18 -0700 Subject: [PATCH] Add accessibility titles to PopupWindow Adding a default title and a hidden API to customize the title. Bug: 30177642 Test: With TalkBack running, navigate to Settings-> Network & Internet. Select the more options button and double-tap to select it. It now announces "Popup Window". Change-Id: I38591a25be0fe1d5bf57c9edee29f09c92e258ea --- core/java/android/widget/PopupWindow.java | 29 +++++++++++++++++++++++ core/res/res/values/strings.xml | 3 +++ core/res/res/values/symbols.xml | 1 + 3 files changed, 33 insertions(+) diff --git a/core/java/android/widget/PopupWindow.java b/core/java/android/widget/PopupWindow.java index 8464c6e47d474..f6653fbfc08cc 100644 --- a/core/java/android/widget/PopupWindow.java +++ b/core/java/android/widget/PopupWindow.java @@ -208,6 +208,9 @@ public class PopupWindow { private int mGravity = Gravity.NO_GRAVITY; + // Title provided to accessibility services + private CharSequence mAccessibilityTitle; + private static final int[] ABOVE_ANCHOR_STATE_SET = new int[] { com.android.internal.R.attr.state_above_anchor }; @@ -1131,6 +1134,31 @@ public class PopupWindow { return mIsShowing; } + /** + * Set the title for this window to be reported to accessibility services. If no title is set, + * a generic default will be reported. + * + * @param accessibilityTitle The new title, or {@code null} to specify that the default should + * be used. + * @hide + */ + public void setAccessibilityTitle(@Nullable CharSequence accessibilityTitle) { + mAccessibilityTitle = accessibilityTitle; + } + + /** + * Get the title for this window to be reported to accessibility services. + * + * @return The current title. + * @hide + */ + public @NonNull CharSequence getAccessibilityTitle() { + if (mAccessibilityTitle == null) { + mAccessibilityTitle = mContext.getString(R.string.popup_window_default_title); + } + return mAccessibilityTitle; + } + /** @hide */ protected final void setShowing(boolean isShowing) { mIsShowing = isShowing; @@ -1496,6 +1524,7 @@ public class PopupWindow { // Used for debugging. p.setTitle("PopupWindow:" + Integer.toHexString(hashCode())); + p.accessibilityTitle = getAccessibilityTitle(); return p; } diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index 97b6940a1d391..f48e037c8e475 100644 --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml @@ -4706,4 +4706,7 @@ SIM not provisioned SIM not allowed Phone not allowed + + + Popup Window diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 241886c97ec17..af3af18725469 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -3047,4 +3047,5 @@ +