am 7ffadba5: am 1fb90497: Merge "Text blinking cursor hard to see." into ics-mr1

* commit '7ffadba5dfbeeaa93a9559ca3eaf1a7719426a5f':
  Text blinking cursor hard to see.
diff --git a/core/java/android/widget/SpellChecker.java b/core/java/android/widget/SpellChecker.java
index c165bbf..e9a2644 100644
--- a/core/java/android/widget/SpellChecker.java
+++ b/core/java/android/widget/SpellChecker.java
@@ -385,7 +385,7 @@
                 SuggestionSpan.FLAG_EASY_CORRECT | SuggestionSpan.FLAG_MISSPELLED);
         editable.setSpan(suggestionSpan, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
 
-        mTextView.invalidateRegion(start, end);
+        mTextView.invalidateRegion(start, end, false /* No cursor involved */);
     }
 
     private class SpellParser {
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index 90fb106..66fd06d 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -339,7 +339,7 @@
 
     private int mCursorDrawableRes;
     private final Drawable[] mCursorDrawable = new Drawable[2];
-    private int mCursorCount; // Actual current number of used mCursorDrawable: 0, 1 or 2
+    private int mCursorCount; // Actual current number of used mCursorDrawable: 0, 1 or 2 (split)
 
     private Drawable mSelectHandleLeft;
     private Drawable mSelectHandleRight;
@@ -4322,7 +4322,7 @@
         if (a >= 0 || b >= 0 || c >= 0) {
             int start = Math.min(Math.min(a, b), c);
             int end = Math.max(Math.max(a, b), c);
-            invalidateRegion(start, end);
+            invalidateRegion(start, end, true /* Also invalidates blinking cursor */);
         }
     }
 
@@ -4331,7 +4331,7 @@
      *
      * @hide
      */
-    void invalidateRegion(int start, int end) {
+    void invalidateRegion(int start, int end, boolean invalidateCursor) {
         if (mLayout == null) {
             invalidate();
         } else {
@@ -4357,11 +4357,19 @@
 
                 int bottom = mLayout.getLineBottom(lineEnd);
 
+                if (invalidateCursor) {
+                    for (int i = 0; i < mCursorCount; i++) {
+                        Rect bounds = mCursorDrawable[i].getBounds();
+                        top = Math.min(top, bounds.top);
+                        bottom = Math.max(bottom, bounds.bottom);
+                    }
+                }
+
                 final int compoundPaddingLeft = getCompoundPaddingLeft();
                 final int verticalPadding = getExtendedPaddingTop() + getVerticalOffset(true);
 
                 int left, right;
-                if (lineStart == lineEnd) {
+                if (lineStart == lineEnd && !invalidateCursor) {
                     left = (int) mLayout.getPrimaryHorizontal(start);
                     right = (int) (mLayout.getPrimaryHorizontal(end) + 1.0);
                     left += compoundPaddingLeft;