summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaurice Lam <yukl@google.com>2016-08-01 13:16:05 -0700
committerMaurice Lam <yukl@google.com>2016-08-23 00:52:27 +0000
commitcf90658b5c16018c9f3db7fd1d872025cff5d1dc (patch)
tree6f4ea8a92abbe3ae689fdc06ba4dc8ddf11ca02c
parent8695624ce6c379ec2873a0b9bbee6e34515659ac (diff)
downloadsetupwizard-cf90658b5c16018c9f3db7fd1d872025cff5d1dc.tar.gz
Check for null layout in LinkAccessibilityHelper
Return an empty rect for getBoundsForSpan if the text layout is null. Bug: 30554641 Change-Id: Ia5affea014bf994170291978f10690083d786577 (cherry picked from commit 07df2a743e3708ba57e601258053e1d52daac82e)
-rw-r--r--library/eclair-mr1/src/com/android/setupwizardlib/util/LinkAccessibilityHelper.java38
-rw-r--r--library/eclair-mr1/test/src/com/android/setupwizardlib/test/LinkAccessibilityHelperTest.java16
2 files changed, 35 insertions, 19 deletions
diff --git a/library/eclair-mr1/src/com/android/setupwizardlib/util/LinkAccessibilityHelper.java b/library/eclair-mr1/src/com/android/setupwizardlib/util/LinkAccessibilityHelper.java
index 2c53ee7..3e4b7e2 100644
--- a/library/eclair-mr1/src/com/android/setupwizardlib/util/LinkAccessibilityHelper.java
+++ b/library/eclair-mr1/src/com/android/setupwizardlib/util/LinkAccessibilityHelper.java
@@ -118,13 +118,11 @@ public class LinkAccessibilityHelper extends ExploreByTouchHelper {
info.setFocusable(true);
info.setClickable(true);
getBoundsForSpan(span, mTempRect);
- if (!mTempRect.isEmpty()) {
- info.setBoundsInParent(getBoundsForSpan(span, mTempRect));
- } else {
+ if (mTempRect.isEmpty()) {
Log.e(TAG, "LinkSpan bounds is empty for: " + virtualViewId);
mTempRect.set(0, 0, 1, 1);
- info.setBoundsInParent(mTempRect);
}
+ info.setBoundsInParent(mTempRect);
info.addAction(AccessibilityNodeInfoCompat.ACTION_CLICK);
}
@@ -171,22 +169,24 @@ public class LinkAccessibilityHelper extends ExploreByTouchHelper {
CharSequence text = mView.getText();
outRect.setEmpty();
if (text instanceof Spanned) {
- Spanned spannedText = (Spanned) text;
- final int spanStart = spannedText.getSpanStart(span);
- final int spanEnd = spannedText.getSpanEnd(span);
final Layout layout = mView.getLayout();
- final float xStart = layout.getPrimaryHorizontal(spanStart);
- final float xEnd = layout.getPrimaryHorizontal(spanEnd);
- final int lineStart = layout.getLineForOffset(spanStart);
- final int lineEnd = layout.getLineForOffset(spanEnd);
- layout.getLineBounds(lineStart, outRect);
- outRect.left = (int) xStart;
- if (lineEnd == lineStart) {
- outRect.right = (int) xEnd;
- } // otherwise just leave it at the end of the start line
-
- // Offset for padding
- outRect.offset(mView.getTotalPaddingLeft(), mView.getTotalPaddingTop());
+ if (layout != null) {
+ Spanned spannedText = (Spanned) text;
+ final int spanStart = spannedText.getSpanStart(span);
+ final int spanEnd = spannedText.getSpanEnd(span);
+ final float xStart = layout.getPrimaryHorizontal(spanStart);
+ final float xEnd = layout.getPrimaryHorizontal(spanEnd);
+ final int lineStart = layout.getLineForOffset(spanStart);
+ final int lineEnd = layout.getLineForOffset(spanEnd);
+ layout.getLineBounds(lineStart, outRect);
+ outRect.left = (int) xStart;
+ if (lineEnd == lineStart) {
+ outRect.right = (int) xEnd;
+ } // otherwise just leave it at the end of the start line
+
+ // Offset for padding
+ outRect.offset(mView.getTotalPaddingLeft(), mView.getTotalPaddingTop());
+ }
}
return outRect;
}
diff --git a/library/eclair-mr1/test/src/com/android/setupwizardlib/test/LinkAccessibilityHelperTest.java b/library/eclair-mr1/test/src/com/android/setupwizardlib/test/LinkAccessibilityHelperTest.java
index 8d42fa3..a129f65 100644
--- a/library/eclair-mr1/test/src/com/android/setupwizardlib/test/LinkAccessibilityHelperTest.java
+++ b/library/eclair-mr1/test/src/com/android/setupwizardlib/test/LinkAccessibilityHelperTest.java
@@ -121,6 +121,22 @@ public class LinkAccessibilityHelperTest extends AndroidTestCase {
info.recycle();
}
+ @SmallTest
+ public void testNullLayout() {
+ // Setting the padding will cause the layout to be null-ed out.
+ mTextView.setPadding(1, 1, 1, 1);
+
+ AccessibilityNodeInfoCompat info = AccessibilityNodeInfoCompat.obtain();
+ mHelper.onPopulateNodeForVirtualView(0, info);
+
+ Rect bounds = new Rect();
+ info.getBoundsInParent(bounds);
+ assertEquals("LinkSpan bounds should be (0, 0, 1, 1)",
+ new Rect(0, 0, 1, 1), bounds);
+
+ info.recycle();
+ }
+
private int dp2Px(float dp) {
if (mDisplayMetrics == null) {
mDisplayMetrics = getContext().getResources().getDisplayMetrics();