public class LinkAccessibilityHelper extends ExploreByTouchHelper
ClickableSpan
to be focused and
clicked by accessibility services.
Sample usage:
LinkAccessibilityHelper mAccessibilityHelper; private void init() { mAccessibilityHelper = new LinkAccessibilityHelper(myTextView); ViewCompat.setAccessibilityDelegate(myTextView, mLinkHelper); } @Override protected boolean dispatchHoverEvent( @NonNull MotionEvent event) { if (mAccessibilityHelper != null && mAccessibilityHelper.dispatchHoverEvent(event)) { return true; } return super.dispatchHoverEvent(event); }
RichTextView
,
ExploreByTouchHelper
HOST_ID, INVALID_ID
Constructor and Description |
---|
LinkAccessibilityHelper(TextView view) |
Modifier and Type | Method and Description |
---|---|
protected int |
getVirtualViewAt(float x,
float y)
Provides a mapping between view-relative coordinates and logical
items.
|
protected void |
getVisibleVirtualViews(List<Integer> virtualViewIds)
Populates a list with the view's visible items.
|
protected boolean |
onPerformActionForVirtualView(int virtualViewId,
int action,
Bundle arguments)
Performs the specified accessibility action on the item associated
with the virtual view identifier.
|
protected void |
onPopulateEventForVirtualView(int virtualViewId,
AccessibilityEvent event)
Populates an
AccessibilityEvent with information about the
specified item. |
protected void |
onPopulateNodeForVirtualView(int virtualViewId,
AccessibilityNodeInfoCompat info)
Populates an
AccessibilityNodeInfoCompat with information
about the specified item. |
clearKeyboardFocusForVirtualView, dispatchHoverEvent, dispatchKeyEvent, getAccessibilityFocusedVirtualViewId, getAccessibilityNodeProvider, getFocusedVirtualView, getKeyboardFocusedVirtualViewId, invalidateRoot, invalidateVirtualView, invalidateVirtualView, onFocusChanged, onInitializeAccessibilityEvent, onInitializeAccessibilityNodeInfo, onPopulateEventForHost, onPopulateNodeForHost, onVirtualViewKeyboardFocusChanged, requestKeyboardFocusForVirtualView, sendEventForVirtualView
dispatchPopulateAccessibilityEvent, onPopulateAccessibilityEvent, onRequestSendAccessibilityEvent, performAccessibilityAction, sendAccessibilityEvent, sendAccessibilityEventUnchecked
public LinkAccessibilityHelper(TextView view)
protected int getVirtualViewAt(float x, float y)
ExploreByTouchHelper
getVirtualViewAt
in class ExploreByTouchHelper
x
- The view-relative x coordinatey
- The view-relative y coordinateExploreByTouchHelper.HOST_ID
if there is no item at
the given coordinatesprotected void getVisibleVirtualViews(List<Integer> virtualViewIds)
ExploreByTouchHelper
virtualViewIds
specifies order of accessibility focus
traversal.getVisibleVirtualViews
in class ExploreByTouchHelper
virtualViewIds
- The list to populate with visible itemsprotected void onPopulateEventForVirtualView(int virtualViewId, AccessibilityEvent event)
ExploreByTouchHelper
AccessibilityEvent
with information about the
specified item.
The helper class automatically populates the following fields based on
the values set by
ExploreByTouchHelper.onPopulateNodeForVirtualView(int, AccessibilityNodeInfoCompat)
,
but implementations may optionally override them:
AccessibilityRecord.getText()
AccessibilityRecord.setContentDescription(CharSequence)
AccessibilityRecord.setScrollable(boolean)
AccessibilityRecord.setPassword(boolean)
AccessibilityRecord.setEnabled(boolean)
AccessibilityRecord.setChecked(boolean)
The following required fields are automatically populated by the helper class and may not be overridden:
ExploreByTouchHelper.onPopulateNodeForVirtualView(int, AccessibilityNodeInfoCompat)
Context
, see AccessibilityEvent.setPackageName(java.lang.CharSequence)
AccessibilityRecordCompat.setSource(View, int)
onPopulateEventForVirtualView
in class ExploreByTouchHelper
virtualViewId
- The virtual view id for the item for which to
populate the eventevent
- The event to populateprotected void onPopulateNodeForVirtualView(int virtualViewId, AccessibilityNodeInfoCompat info)
ExploreByTouchHelper
AccessibilityNodeInfoCompat
with information
about the specified item.
Implementations must populate the following required fields:
AccessibilityNodeInfoCompat.setText(CharSequence)
or
AccessibilityNodeInfoCompat.setContentDescription(CharSequence)
AccessibilityNodeInfoCompat.setBoundsInParent(Rect)
The helper class automatically populates the following fields with default values, but implementations may optionally override them:
true
, see
AccessibilityNodeInfoCompat.setEnabled(boolean)
true
, see
AccessibilityNodeInfoCompat.setFocusable(boolean)
android.view.View
, see
AccessibilityNodeInfoCompat.setClassName(CharSequence)
The following required fields are automatically populated by the helper class and may not be overridden:
ExploreByTouchHelper.onPopulateEventForVirtualView(int, AccessibilityEvent)
, see
AccessibilityNodeInfoCompat.setPackageName(java.lang.CharSequence)
ExploreByTouchHelper.onPopulateEventForVirtualView(int, AccessibilityEvent)
, see
AccessibilityNodeInfoCompat.setSource(View, int)
AccessibilityNodeInfoCompat.setParent(View)
AccessibilityNodeInfoCompat.setVisibleToUser(boolean)
AccessibilityNodeInfoCompat.setAccessibilityFocused(boolean)
AccessibilityNodeInfoCompat.setFocused(boolean)
AccessibilityNodeInfoCompat.setBoundsInScreen(Rect)
Additionally, the helper class automatically handles keyboard focus and
accessibility focus management by adding the appropriate
AccessibilityNodeInfoCompat.ACTION_FOCUS
,
AccessibilityNodeInfoCompat.ACTION_CLEAR_FOCUS
,
AccessibilityNodeInfoCompat.ACTION_ACCESSIBILITY_FOCUS
, or
AccessibilityNodeInfoCompat.ACTION_CLEAR_ACCESSIBILITY_FOCUS
actions. Implementations must never manually add these
actions.
The helper class also automatically modifies parent- and screen-relative bounds to reflect the portion of the item visible within its parent.
onPopulateNodeForVirtualView
in class ExploreByTouchHelper
virtualViewId
- The virtual view identifier of the item for
which to populate the nodeinfo
- The node to populateprotected boolean onPerformActionForVirtualView(int virtualViewId, int action, Bundle arguments)
ExploreByTouchHelper
AccessibilityNodeInfoCompat.performAction(int, Bundle)
for
more information.
Implementations must handle any actions added manually
in
ExploreByTouchHelper.onPopulateNodeForVirtualView(int, AccessibilityNodeInfoCompat)
.
The helper class automatically handles focus management resulting
from AccessibilityNodeInfoCompat.ACTION_ACCESSIBILITY_FOCUS
and
AccessibilityNodeInfoCompat.ACTION_CLEAR_ACCESSIBILITY_FOCUS
actions.
onPerformActionForVirtualView
in class ExploreByTouchHelper
virtualViewId
- The virtual view identifier of the item on which
to perform the actionaction
- The accessibility action to performarguments
- (Optional) A bundle with additional arguments, or
null