Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b12a57df authored by Phil Weaver's avatar Phil Weaver
Browse files

Make a11y text navigation by page symmetric.

Traversals forward and then backward in text didn't land in consistent
places. This fix makes them land in exactly the same place as long as
a page is an integral number of lines long.

Also updating documentation about AccessibilityEvent reported indices
when traversing.

Bug: 27505504
Bug: 27480027
Change-Id: I2c11b6ae61f79d66e5ec101048584b3442be0b42
parent d53f0df7
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -240,10 +240,12 @@ import java.util.List;
 *   <li>{@link #getMovementGranularity()} - Sets the granularity at which a view's text
 *       was traversed.</li>
 *   <li>{@link #getText()} -  The text of the source's sub-tree.</li>
 *   <li>{@link #getFromIndex()} - The start of the next/previous text at the specified granularity
 *           - inclusive.</li>
 *   <li>{@link #getToIndex()} - The end of the next/previous text at the specified granularity
 *           - exclusive.</li>
 *   <li>{@link #getFromIndex()} - The start the text that was skipped over in this movement.
 *       This is the starting point when moving forward through the text, but not when moving
 *       back.</li>
 *   <li>{@link #getToIndex()} - The end of the text that was skipped over in this movement.
 *       This is the ending point when moving forward through the text, but not when moving
 *       back.</li>
 *   <li>{@link #isPassword()} - Whether the source is password.</li>
 *   <li>{@link #isEnabled()} - Whether the source is enabled.</li>
 *   <li>{@link #getContentDescription()} - The content description of the source.</li>
+11 −6
Original line number Diff line number Diff line
@@ -134,8 +134,8 @@ final class AccessibilityIterators {

        @Override
        public int[] following(int offset) {
            final int textLegth = mText.length();
            if (textLegth <= 0) {
            final int textLength = mText.length();
            if (textLength <= 0) {
                return null;
            }
            if (offset >= mText.length()) {
@@ -163,8 +163,8 @@ final class AccessibilityIterators {

        @Override
        public int[] preceding(int offset) {
            final int textLegth = mText.length();
            if (textLegth <= 0) {
            final int textLength = mText.length();
            if (textLength <= 0) {
                return null;
            }
            if (offset <= 0) {
@@ -181,8 +181,13 @@ final class AccessibilityIterators {
            final int pageHeight = mTempRect.height() - mView.getTotalPaddingTop()
                    - mView.getTotalPaddingBottom();
            final int previousPageEndY = currentLineTop - pageHeight;
            final int currentPageStartLine = (previousPageEndY > 0) ?
                     mLayout.getLineForVertical(previousPageEndY) + 1 : 0;
            int currentPageStartLine = (previousPageEndY > 0) ?
                     mLayout.getLineForVertical(previousPageEndY) : 0;
            // If we're at the end of text, we're at the end of the current line rather than the
            // start of the next line, so we should move up one fewer lines than we would otherwise.
            if (end == mText.length() && (currentPageStartLine < currentLine)) {
                currentPageStartLine += 1;
            }

            final int start = getLineEdgeIndex(currentPageStartLine, DIRECTION_START);