From 68cc67f2ec92b15d22e6b898bee07cb173be5ba6 Mon Sep 17 00:00:00 2001 From: Ian Hickson Date: Thu, 14 Apr 2016 18:08:05 -0700 Subject: [PATCH] Merge pull request #2597 from Hixie/3177 Fix crashes with LastPass, Now-on-Tap, DashLane --- .../io/flutter/view/AccessibilityBridge.java | 52 ++++++++++++------- 1 file changed, 32 insertions(+), 20 deletions(-) diff --git a/sky/shell/platform/android/io/flutter/view/AccessibilityBridge.java b/sky/shell/platform/android/io/flutter/view/AccessibilityBridge.java index 820d69dc0f..145adb45f2 100644 --- a/sky/shell/platform/android/io/flutter/view/AccessibilityBridge.java +++ b/sky/shell/platform/android/io/flutter/view/AccessibilityBridge.java @@ -28,7 +28,7 @@ class AccessibilityBridge extends AccessibilityNodeProvider implements Semantics private Map mTreeNodes; private FlutterView mOwner; private SemanticsServer.Proxy mSemanticsServer; - private boolean mAccessilibilyEnabled = true; + private boolean mAccessibilityEnabled = false; private PersistentAccessibilityNode mFocusedNode; private PersistentAccessibilityNode mHoveredNode; @@ -42,7 +42,7 @@ class AccessibilityBridge extends AccessibilityNodeProvider implements Semantics } void setAccessibilityEnabled(boolean accessibilityEnabled) { - mAccessilibilyEnabled = accessibilityEnabled; + mAccessibilityEnabled = accessibilityEnabled; } @Override @@ -121,8 +121,10 @@ class AccessibilityBridge extends AccessibilityNodeProvider implements Semantics result.addAction(AccessibilityNodeInfo.AccessibilityAction.ACTION_ACCESSIBILITY_FOCUS); } - for (PersistentAccessibilityNode child : node.children) { - result.addChild(mOwner, child.id); + if (node.children != null) { + for (PersistentAccessibilityNode child : node.children) { + result.addChild(mOwner, child.id); + } } return result; @@ -221,7 +223,7 @@ class AccessibilityBridge extends AccessibilityNodeProvider implements Semantics } private void sendAccessibilityEvent(int virtualViewId, int eventType) { - if (!mAccessilibilyEnabled) { + if (!mAccessibilityEnabled) { return; } if (virtualViewId == 0) { @@ -257,8 +259,10 @@ class AccessibilityBridge extends AccessibilityNodeProvider implements Semantics if (mHoveredNode == node) { mHoveredNode = null; } - for (PersistentAccessibilityNode child : node.children) { - removePersistentNode(child); + if (node.children != null) { + for (PersistentAccessibilityNode child : node.children) { + removePersistentNode(child); + } } } @@ -306,18 +310,22 @@ class AccessibilityBridge extends AccessibilityNodeProvider implements Semantics } if (node.children != null) { List oldChildren = children; - children = new ArrayList(node.children.length); if (oldChildren != null) { for (PersistentAccessibilityNode child : oldChildren) { assert child.parent != null; child.parent = null; } } - for (SemanticsNode childNode : node.children) { - PersistentAccessibilityNode child = AccessibilityBridge.this.updateSemanticsNode(childNode); - assert child != null; - child.parent = this; - children.add(child); + if (node.children.length > 0) { + children = new ArrayList(node.children.length); + for (SemanticsNode childNode : node.children) { + PersistentAccessibilityNode child = AccessibilityBridge.this.updateSemanticsNode(childNode); + assert child != null; + child.parent = this; + children.add(child); + } + } else { + children = null; } if (oldChildren != null) { for (PersistentAccessibilityNode child : oldChildren) { @@ -361,8 +369,10 @@ class AccessibilityBridge extends AccessibilityNodeProvider implements Semantics geometryDirty = true; // TODO(ianh): if we are the AccessibilityBridge.this.mFocusedNode // then we may have to unfocus and refocus ourselves to get Android to update the focus rect - for (PersistentAccessibilityNode child : children) { - child.invalidateGlobalGeometry(); + if (children != null) { + for (PersistentAccessibilityNode child : children) { + child.invalidateGlobalGeometry(); + } } } @@ -429,11 +439,13 @@ class AccessibilityBridge extends AccessibilityNodeProvider implements Semantics Rect rect = getGlobalRect(); if (!rect.contains(x, y)) return null; - for (int index = children.size()-1; index >= 0; index -= 1) { - PersistentAccessibilityNode child = children.get(index); - PersistentAccessibilityNode result = child.hitTest(x, y); - if (result != null) { - return result; + if (children != null) { + for (int index = children.size()-1; index >= 0; index -= 1) { + PersistentAccessibilityNode child = children.get(index); + PersistentAccessibilityNode result = child.hitTest(x, y); + if (result != null) { + return result; + } } } return this; -- GitLab