From e2a178f33e62ec44c560afd4b9e0a8fba9404d78 Mon Sep 17 00:00:00 2001 From: jonahwilliams Date: Fri, 28 Sep 2018 10:34:23 -0700 Subject: [PATCH] do not count Hidden nodes at the beginning of the scrollable --- .../android/io/flutter/view/AccessibilityBridge.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/shell/platform/android/io/flutter/view/AccessibilityBridge.java b/shell/platform/android/io/flutter/view/AccessibilityBridge.java index 1ee327f1f56f8..a15410e01aa2e 100644 --- a/shell/platform/android/io/flutter/view/AccessibilityBridge.java +++ b/shell/platform/android/io/flutter/view/AccessibilityBridge.java @@ -720,17 +720,19 @@ void updateSemantics(ByteBuffer buffer, String[] strings) { event.setMaxScrollX((int) max); } if (object.scrollChildren > 0) { + // We don't need to add 1 to the scroll index because TalkBack does this automagically. event.setItemCount(object.scrollChildren); event.setFromIndex(object.scrollIndex); - int visibleChildren = object.childrenInHitTestOrder.size() - 1; - // We assume that only children at the end of the list can be hidden. - assert(!object.childrenInHitTestOrder.get(object.scrollIndex).hasFlag(Flag.IS_HIDDEN)); - for (; visibleChildren >= 0; visibleChildren--) { - SemanticsObject child = object.childrenInHitTestOrder.get(visibleChildren); + int visibleChildren = 0; + // handle hidden children at the beginning and end of the list. + for (SemanticsObject child : object.childrenInHitTestOrder) { if (!child.hasFlag(Flag.IS_HIDDEN)) { break; } + visibleChildren += 1; } + assert(object.scrollIndex + visibleChildren <= object.scrollChildren); + assert(!object.childrenInHitTestOrder.get(object.scrollIndex).hasFlag(Flag.IS_HIDDEN)); event.setToIndex(object.scrollIndex + visibleChildren); } sendAccessibilityEvent(event);