am 8a6ba494: Merge "All runnable are stopped on detach. DO NOT MERGE." into gingerbread

* commit '8a6ba494a28702e68b0a8fbd8bac34335536a8f8':
  All runnable are stopped on detach. DO NOT MERGE.
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index 6b57f87..7c09a90 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -3831,6 +3831,18 @@
             hideError();
         }
 
+        if (mBlink != null) {
+            mBlink.cancel();
+        }
+
+        if (mInsertionPointCursorController != null) {
+            mInsertionPointCursorController.onDetached();
+        }
+
+        if (mSelectionModifierCursorController != null) {
+            mSelectionModifierCursorController.onDetached();
+        }
+
         hideControllers();
     }
 
@@ -7740,6 +7752,13 @@
          * @param event The touch event
          */
         public boolean onTouchEvent(MotionEvent event);
+
+        /**
+         * Called when the view is detached from window. Perform house keeping task, such as
+         * stopping Runnable thread that would otherwise keep a reference on the context, thus
+         * preventing the activity to be recycled.
+         */
+        public void onDetached();
     }
 
     private class HandleView extends View {
@@ -8017,12 +8036,12 @@
 
         public void hide() {
             mHandle.hide();
-            TextView.this.removeCallbacks(mHider);
+            removeCallbacks(mHider);
         }
 
         private void hideDelayed(int msec) {
-            TextView.this.removeCallbacks(mHider);
-            TextView.this.postDelayed(mHider, msec);
+            removeCallbacks(mHider);
+            postDelayed(mHider, msec);
         }
 
         public boolean isShowing() {
@@ -8062,6 +8081,11 @@
                 hide();
             }
         }
+
+        @Override
+        public void onDetached() {
+            removeCallbacks(mHider);
+        }
     }
 
     private class SelectionModifierCursorController implements CursorController {
@@ -8219,6 +8243,11 @@
                 hide();
             }
         }
+
+        @Override
+        public void onDetached() {
+            removeCallbacks(mHider);
+        }
     }
 
     private void hideInsertionPointCursorController() {