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 @@ +