From ef955ad32ea3e992add567130a45d40bfe78ed7e Mon Sep 17 00:00:00 2001 From: Phil Weaver Date: Thu, 25 Aug 2016 12:58:15 -0700 Subject: [PATCH] Make deep copies of a11y data. Make sure we don't get exposed to changes make to text after the setter on the node or event is called. Such changes mean, among other things, that we can't move the nodes to different threads. Bug: 31042124 Change-Id: I12921ff7e50a200b8140994a237040d01a31b6f5 --- .../android/view/accessibility/AccessibilityNodeInfo.java | 7 ++++--- .../android/view/accessibility/AccessibilityRecord.java | 6 ++++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/core/java/android/view/accessibility/AccessibilityNodeInfo.java b/core/java/android/view/accessibility/AccessibilityNodeInfo.java index 7880b1a4a27f6..abd1eb11617c7 100644 --- a/core/java/android/view/accessibility/AccessibilityNodeInfo.java +++ b/core/java/android/view/accessibility/AccessibilityNodeInfo.java @@ -2230,7 +2230,7 @@ public class AccessibilityNodeInfo implements Parcelable { */ public void setText(CharSequence text) { enforceNotSealed(); - mText = text; + mText = (text == null) ? null : text.subSequence(0, text.length()); } /** @@ -2247,7 +2247,7 @@ public class AccessibilityNodeInfo implements Parcelable { */ public void setError(CharSequence error) { enforceNotSealed(); - mError = error; + mError = (error == null) ? null : error.subSequence(0, error.length()); } /** @@ -2282,7 +2282,8 @@ public class AccessibilityNodeInfo implements Parcelable { */ public void setContentDescription(CharSequence contentDescription) { enforceNotSealed(); - mContentDescription = contentDescription; + mContentDescription = (contentDescription == null) ? null + : contentDescription.subSequence(0, contentDescription.length()); } /** diff --git a/core/java/android/view/accessibility/AccessibilityRecord.java b/core/java/android/view/accessibility/AccessibilityRecord.java index f99690adcffaa..f2979bb82dcd2 100644 --- a/core/java/android/view/accessibility/AccessibilityRecord.java +++ b/core/java/android/view/accessibility/AccessibilityRecord.java @@ -572,7 +572,8 @@ public class AccessibilityRecord { */ public void setBeforeText(CharSequence beforeText) { enforceNotSealed(); - mBeforeText = beforeText; + mBeforeText = (beforeText == null) ? null + : beforeText.subSequence(0, beforeText.length()); } /** @@ -593,7 +594,8 @@ public class AccessibilityRecord { */ public void setContentDescription(CharSequence contentDescription) { enforceNotSealed(); - mContentDescription = contentDescription; + mContentDescription = (contentDescription == null) ? null + : contentDescription.subSequence(0, contentDescription.length()); } /**