Closed Bug 1604101 Opened 5 years ago Closed 5 years ago

Make traversing from one text node to the next work with TalkBack

Categories

(Core :: Disability Access APIs, defect, P2)

All
Android
defect

Tracking

()

RESOLVED FIXED
mozilla73
Tracking Status
firefox73 --- fixed

People

(Reporter: MarcoZ, Assigned: Jamie)

Details

Attachments

(1 file)

From bug 1601537 comment #2:

  1. Normally, when you navigate to the end of the text in a node, Talkback moves into the next node. Unfortunately, Talkback doesn't update the origin based on text traversed events, and we don't want to fire a11y focus because it reports the entire node. The way you have to manage this with Talkback is to return false from performAction when there's no more text to navigate, at which point Talkback tries navigating in the next node.
    • This is problematic for us because we can't perform the navigation synchronously in order to know whether there's more text, since we might have to go cross-process to do that. I guess we could use sync IPC, but ug. Or maybe we could cache the length of the text in the Java layer and use that to determine whether further navigation is possible.

Original test case is here.

Assignee: nobody → jteh
Priority: -- → P2

Talkback users expect that when you navigate past the end of the text in a node, Talkback will move into the next node and navigate there.
However, even though text navigation is async (client performs an action on the focused accessible and then waits for a text traversal event), firing a traversal event with a different accessible from the focused accessible is not supported by Talkback.
Firing a11y focus on the new node (as we did previously) doesn't fix this, but instead causes the entire node to be reported, among other weird behaviour.

  1. Don't fire a11y focus for text traversal.
    Aside from Talkback reporting the entire node, this was also confusing Talkback, causing it to try to navigate several times into the new node.
  2. When navigating text, cache whether we're at either edge.
    We do this because we need to be able to synchronously query whether we're at the edge, but we do navigation async.
    Special handling is needed for words at the end because words don't include trailing space.
  3. When performing a text navigation action, check if we're already at the edge using the cache described above.
    If we are, synchronously return false, as Talkback expects.
    Talkback will then move to the next/previous node itself and navigate the text there.
Pushed by mzehe@mozilla.com: https://hg.mozilla.org/integration/autoland/rev/6f33cbb4133f Fix Android a11y text navigation between nodes. r=MarcoZ
Status: NEW → RESOLVED
Closed: 5 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla73
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: