From 8566625bfae22d92f5b8d690fb8d7f9c19485e28 Mon Sep 17 00:00:00 2001 From: Greg Spencer Date: Mon, 12 Feb 2018 10:02:25 -0800 Subject: [PATCH] Swap setTraversalBefore to setTraversalAfter, since setTraversalBefore is broken. (flutter/engine#4656) It seems that setTraversalBefore doesn't work as well as setTraversalAfter for some reason, although I'm using them the same way. Some apps would lock up TalkBack when traversing if setTraversalBefore was set, but not with the equivalent setTraversalAfter. It's not entirely clear why this is, but I'm going with this to at least get it fixed for apps we know about. Addresses flutter/flutter#14600 See also flutter/flutter#14607 --- engine/src/flutter/lib/ui/semantics.dart | 6 +++--- engine/src/flutter/lib/ui/semantics/semantics_node.h | 2 +- .../lib/ui/semantics/semantics_update_builder.cc | 4 ++-- .../lib/ui/semantics/semantics_update_builder.h | 2 +- .../android/io/flutter/view/AccessibilityBridge.java | 10 +++++----- .../shell/platform/android/platform_view_android.cc | 2 +- 6 files changed, 13 insertions(+), 13 deletions(-) diff --git a/engine/src/flutter/lib/ui/semantics.dart b/engine/src/flutter/lib/ui/semantics.dart index f5104ed3c1e..39605af70db 100644 --- a/engine/src/flutter/lib/ui/semantics.dart +++ b/engine/src/flutter/lib/ui/semantics.dart @@ -399,7 +399,7 @@ class SemanticsUpdateBuilder extends NativeFieldWrapperClass2 { String increasedValue, String decreasedValue, TextDirection textDirection, - int nextNodeId, + int previousNodeId, Float64List transform, Int32List children, }) { @@ -423,7 +423,7 @@ class SemanticsUpdateBuilder extends NativeFieldWrapperClass2 { increasedValue, decreasedValue, textDirection != null ? textDirection.index + 1 : 0, - nextNodeId ?? -1, + previousNodeId ?? -1, transform, children,); } @@ -446,7 +446,7 @@ class SemanticsUpdateBuilder extends NativeFieldWrapperClass2 { String increasedValue, String decreasedValue, int textDirection, - int nextNodeId, + int previousNodeId, Float64List transform, Int32List children, ) native 'SemanticsUpdateBuilder_updateNode'; diff --git a/engine/src/flutter/lib/ui/semantics/semantics_node.h b/engine/src/flutter/lib/ui/semantics/semantics_node.h index c69fb202680..56156e7a18c 100644 --- a/engine/src/flutter/lib/ui/semantics/semantics_node.h +++ b/engine/src/flutter/lib/ui/semantics/semantics_node.h @@ -76,7 +76,7 @@ struct SemanticsNode { std::string increasedValue; std::string decreasedValue; int32_t textDirection = 0; // 0=unknown, 1=rtl, 2=ltr - int32_t nextNodeId = -1; + int32_t previousNodeId = -1; SkRect rect = SkRect::MakeEmpty(); SkMatrix44 transform = SkMatrix44(SkMatrix44::kIdentity_Constructor); diff --git a/engine/src/flutter/lib/ui/semantics/semantics_update_builder.cc b/engine/src/flutter/lib/ui/semantics/semantics_update_builder.cc index 0fc0cc42aff..be9aae1bda4 100644 --- a/engine/src/flutter/lib/ui/semantics/semantics_update_builder.cc +++ b/engine/src/flutter/lib/ui/semantics/semantics_update_builder.cc @@ -52,7 +52,7 @@ void SemanticsUpdateBuilder::updateNode(int id, std::string increasedValue, std::string decreasedValue, int textDirection, - int nextNodeId, + int previousNodeId, const tonic::Float64List& transform, const tonic::Int32List& children) { SemanticsNode node; @@ -71,7 +71,7 @@ void SemanticsUpdateBuilder::updateNode(int id, node.increasedValue = increasedValue; node.decreasedValue = decreasedValue; node.textDirection = textDirection; - node.nextNodeId = nextNodeId; + node.previousNodeId = previousNodeId; node.transform.setColMajord(transform.data()); node.children = std::vector( children.data(), children.data() + children.num_elements()); diff --git a/engine/src/flutter/lib/ui/semantics/semantics_update_builder.h b/engine/src/flutter/lib/ui/semantics/semantics_update_builder.h index 6ba1e601032..0f716f75280 100644 --- a/engine/src/flutter/lib/ui/semantics/semantics_update_builder.h +++ b/engine/src/flutter/lib/ui/semantics/semantics_update_builder.h @@ -43,7 +43,7 @@ class SemanticsUpdateBuilder std::string increasedValue, std::string decreasedValue, int textDirection, - int nextNodeId, + int previousNodeId, const tonic::Float64List& transform, const tonic::Int32List& children); diff --git a/engine/src/flutter/shell/platform/android/io/flutter/view/AccessibilityBridge.java b/engine/src/flutter/shell/platform/android/io/flutter/view/AccessibilityBridge.java index 079135a34b4..d644cb84934 100644 --- a/engine/src/flutter/shell/platform/android/io/flutter/view/AccessibilityBridge.java +++ b/engine/src/flutter/shell/platform/android/io/flutter/view/AccessibilityBridge.java @@ -241,8 +241,8 @@ class AccessibilityBridge extends AccessibilityNodeProvider implements BasicMess result.setSelected(object.hasFlag(Flag.IS_SELECTED)); result.setText(object.getValueLabelHint()); - result.setTraversalBefore(mOwner, - object.nextNodeId == -1 ? View.NO_ID : object.nextNodeId); + result.setTraversalAfter(mOwner, + object.previousNodeId == -1 ? View.NO_ID : object.previousNodeId); // Accessibility Focus if (mA11yFocusedObject != null && mA11yFocusedObject.id == virtualViewId) { @@ -693,7 +693,7 @@ class AccessibilityBridge extends AccessibilityNodeProvider implements BasicMess String decreasedValue; String hint; TextDirection textDirection; - int nextNodeId; + int previousNodeId; boolean hadPreviousConfig = false; int previousFlags; @@ -746,7 +746,7 @@ class AccessibilityBridge extends AccessibilityNodeProvider implements BasicMess void log(String indent, boolean recursive) { Log.i(TAG, indent + "SemanticsObject id=" + id + " label=" + label + " actions=" + actions + " flags=" + flags + "\n" + indent + " +-- textDirection=" + textDirection + "\n"+ - indent + " +-- nextNodeId=" + nextNodeId + "\n"+ + indent + " +-- previousNodeId=" + previousNodeId + "\n"+ indent + " +-- rect.ltrb=(" + left + ", " + top + ", " + right + ", " + bottom + ")\n" + indent + " +-- transform=" + Arrays.toString(transform) + "\n"); if (children != null && recursive) { @@ -793,7 +793,7 @@ class AccessibilityBridge extends AccessibilityNodeProvider implements BasicMess textDirection = TextDirection.fromInt(buffer.getInt()); - nextNodeId = buffer.getInt(); + previousNodeId = buffer.getInt(); left = buffer.getFloat(); top = buffer.getFloat(); diff --git a/engine/src/flutter/shell/platform/android/platform_view_android.cc b/engine/src/flutter/shell/platform/android/platform_view_android.cc index 7986737be90..5fc7fab00bb 100644 --- a/engine/src/flutter/shell/platform/android/platform_view_android.cc +++ b/engine/src/flutter/shell/platform/android/platform_view_android.cc @@ -526,7 +526,7 @@ void PlatformViewAndroid::UpdateSemantics( strings.push_back(node.hint); } buffer_int32[position++] = node.textDirection; - buffer_int32[position++] = node.nextNodeId; + buffer_int32[position++] = node.previousNodeId; buffer_float32[position++] = node.rect.left(); buffer_float32[position++] = node.rect.top(); buffer_float32[position++] = node.rect.right();