Add AccessibilityAction ACTION_SHOW_SUGGESTIONS

And implement it for editable text to show the popup
window for typo correction.

Bug: b/143378480

Test: tested with modified talkback.
Change-Id: I8bb1ec87f6bb2177fb4b8fb9a88bfbe10b374173
This commit is contained in:
yingleiw
2021-11-09 15:47:03 -08:00
parent 32cb668a40
commit fbfd734049
6 changed files with 30 additions and 1 deletions

View File

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

View File

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

View File

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

View File

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

View File

@@ -275,6 +275,9 @@
<!-- Accessibility action identifier for {@link android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction#ACTION_SWIPE_DOWN}. -->
<item type="id" name="accessibilityActionSwipeDown" />
<!-- Accessibility action identifier for {@link android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction#ACTION_SHOW_SUGGESTIONS}. -->
<item type="id" name="accessibilityActionShowSuggestions" />
<!-- View tag for remote views to store the index of the next child when adding nested remote views dynamically. -->
<item type="id" name="remote_views_next_child" />

View File

@@ -3256,6 +3256,7 @@
<public name="accessibilityActionSwipeRight" />
<public name="accessibilityActionSwipeUp" />
<public name="accessibilityActionSwipeDown" />
<public name="accessibilityActionShowSuggestions" />
</staging-public-group>
<staging-public-group type="style" first-id="0x01dd0000">