Merge "Rationalize blinking cursor test."
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index a178087..81fc069 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -1202,14 +1202,17 @@
                 imm.hideSoftInputFromWindow(getWindowToken(), 0);
             }
         }
+
         super.setEnabled(enabled);
-        prepareCursorControllers();
+
         if (enabled) {
             // Make sure IME is updated with current editor info.
             InputMethodManager imm = InputMethodManager.peekInstance();
             if (imm != null) imm.restartInput(this);
         }
 
+        prepareCursorControllers();
+
         // start or stop the cursor blinking as appropriate
         makeBlink();
     }
@@ -8581,7 +8584,7 @@
      * @return True when the TextView isFocused and has a valid zero-length selection (cursor).
      */
     private boolean shouldBlink() {
-        if (!isFocused()) return false;
+        if (!isCursorVisible() || !isFocused()) return false;
 
         final int start = getSelectionStart();
         if (start < 0) return false;
@@ -8593,13 +8596,11 @@
     }
 
     private void makeBlink() {
-        if (isCursorVisible()) {
-            if (shouldBlink()) {
-                mShowCursor = SystemClock.uptimeMillis();
-                if (mBlink == null) mBlink = new Blink(this);
-                mBlink.removeCallbacks(mBlink);
-                mBlink.postAtTime(mBlink, mShowCursor + BLINK);
-            }
+        if (shouldBlink()) {
+            mShowCursor = SystemClock.uptimeMillis();
+            if (mBlink == null) mBlink = new Blink(this);
+            mBlink.removeCallbacks(mBlink);
+            mBlink.postAtTime(mBlink, mShowCursor + BLINK);
         } else {
             if (mBlink != null) mBlink.removeCallbacks(mBlink);
         }