diff --git a/core/api/current.txt b/core/api/current.txt
index 56b6800fba13b..c5f85d9f78180 100644
--- a/core/api/current.txt
+++ b/core/api/current.txt
@@ -2044,6 +2044,7 @@ package android {
field public static final int accessibilityActionScrollUp = 16908344; // 0x1020038
field public static final int accessibilityActionSetProgress = 16908349; // 0x102003d
field public static final int accessibilityActionShowOnScreen = 16908342; // 0x1020036
+ field public static final int accessibilityActionShowSuggestions;
field public static final int accessibilityActionShowTooltip = 16908356; // 0x1020044
field public static final int accessibilityActionSwipeDown;
field public static final int accessibilityActionSwipeLeft;
@@ -51459,6 +51460,7 @@ package android.view.accessibility {
field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SET_SELECTION;
field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SET_TEXT;
field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SHOW_ON_SCREEN;
+ field @NonNull public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SHOW_SUGGESTIONS;
field public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SHOW_TOOLTIP;
field @NonNull public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SWIPE_DOWN;
field @NonNull public static final android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction ACTION_SWIPE_LEFT;
diff --git a/core/java/android/view/accessibility/AccessibilityNodeInfo.java b/core/java/android/view/accessibility/AccessibilityNodeInfo.java
index 7680aa6c61fd5..370c9600e2229 100644
--- a/core/java/android/view/accessibility/AccessibilityNodeInfo.java
+++ b/core/java/android/view/accessibility/AccessibilityNodeInfo.java
@@ -5104,6 +5104,12 @@ public class AccessibilityNodeInfo implements Parcelable {
@NonNull public static final AccessibilityAction ACTION_SWIPE_DOWN =
new AccessibilityAction(R.id.accessibilityActionSwipeDown);
+ /**
+ * Action to show suggestions for editable text.
+ */
+ @NonNull public static final AccessibilityAction ACTION_SHOW_SUGGESTIONS =
+ new AccessibilityAction(R.id.accessibilityActionShowSuggestions);
+
private final int mActionId;
private final CharSequence mLabel;
diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java
index 62585c1a40d18..29425b5364a6e 100644
--- a/core/java/android/widget/Editor.java
+++ b/core/java/android/widget/Editor.java
@@ -2513,7 +2513,7 @@ public class Editor {
* the current cursor position or selection range. This method is consistent with the
* method to show suggestions {@link SuggestionsPopupWindow#updateSuggestions}.
*/
- private boolean shouldOfferToShowSuggestions() {
+ boolean shouldOfferToShowSuggestions() {
CharSequence text = mTextView.getText();
if (!(text instanceof Spannable)) return false;
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index 496fa67498eb2..014340197393c 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -12105,6 +12105,9 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
if (canCut()) {
info.addAction(AccessibilityNodeInfo.ACTION_CUT);
}
+ if (canReplace()) {
+ info.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_SHOW_SUGGESTIONS);
+ }
if (canShare()) {
info.addAction(new AccessibilityNodeInfo.AccessibilityAction(
ACCESSIBILITY_ACTION_SHARE,
@@ -12419,6 +12422,11 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
}
return false;
default: {
+ // New ids have static blocks to assign values, so they can't be used in a case
+ // block.
+ if (action == R.id.accessibilityActionShowSuggestions) {
+ return isFocused() && canReplace() && onTextContextMenuItem(ID_REPLACE);
+ }
return super.performAccessibilityActionInternal(action, arguments);
}
}
@@ -13005,6 +13013,15 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
return false;
}
+ boolean canReplace() {
+ if (hasPasswordTransformationMethod()) {
+ return false;
+ }
+
+ return (mText.length() > 0) && (mText instanceof Editable) && (mEditor != null)
+ && isSuggestionsEnabled() && mEditor.shouldOfferToShowSuggestions();
+ }
+
boolean canShare() {
if (!getContext().canStartActivityForResult() || !isDeviceProvisioned()) {
return false;
diff --git a/core/res/res/values/ids.xml b/core/res/res/values/ids.xml
index 747a9180bcc6d..db348ed7dc0b2 100644
--- a/core/res/res/values/ids.xml
+++ b/core/res/res/values/ids.xml
@@ -275,6 +275,9 @@
+
+
+
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index deb4d2dbe3d8d..ca80defb7f672 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -3256,6 +3256,7 @@
+