Merge "Fix bug: text is sometimes garbled in All Apps" into honeycomb
diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java
index e5d2299..2281c84 100644
--- a/src/com/android/launcher2/Launcher.java
+++ b/src/com/android/launcher2/Launcher.java
@@ -106,6 +106,7 @@
 import java.io.DataOutputStream;
 import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.lang.ref.WeakReference;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -1313,6 +1314,7 @@
                             (System.currentTimeMillis() - mAutoAdvanceSentTime));
                 }
                 mHandler.removeMessages(ADVANCE_MSG);
+                mHandler.removeMessages(0); // Remove messages sent using postDelayed()
             }
         }
     }
@@ -1493,6 +1495,9 @@
         } catch (NullPointerException ex) {
             Log.w(TAG, "problem while stopping AppWidgetHost during Launcher destruction", ex);
         }
+        mAppWidgetHost = null;
+
+        mWidgetsToAdvance.clear();
 
         TextKeyListener.getInstance().release();
 
@@ -1511,6 +1516,11 @@
         }
 
         unregisterReceiver(mCloseSystemDialogsReceiver);
+
+        ((ViewGroup) mWorkspace.getParent()).removeAllViews();
+        mWorkspace.removeAllViews();
+        mWorkspace = null;
+        mDragController = null;
     }
 
     @Override
@@ -1977,6 +1987,7 @@
         for (ItemInfo item: mDesktopItems) {
             item.unbind();
         }
+        mDesktopItems.clear();
     }
 
     /**
diff --git a/src/com/android/launcher2/LauncherAppWidgetHost.java b/src/com/android/launcher2/LauncherAppWidgetHost.java
index 46e66e7..68d4903 100644
--- a/src/com/android/launcher2/LauncherAppWidgetHost.java
+++ b/src/com/android/launcher2/LauncherAppWidgetHost.java
@@ -36,4 +36,10 @@
             AppWidgetProviderInfo appWidget) {
         return new LauncherAppWidgetHostView(context);
     }
+
+    @Override
+    public void stopListening() {
+        super.stopListening();
+        clearViews();
+    }
 }
diff --git a/src/com/android/launcher2/LauncherModel.java b/src/com/android/launcher2/LauncherModel.java
index 713268a..7e72610 100644
--- a/src/com/android/launcher2/LauncherModel.java
+++ b/src/com/android/launcher2/LauncherModel.java
@@ -492,6 +492,9 @@
                 mLoaderTask.stopLocked();
             }
         }
+        mItems.clear();
+        mAppWidgets.clear();
+        mFolders.clear();
     }
 
     /**
diff --git a/src/com/android/launcher2/PagedViewWithDraggableItems.java b/src/com/android/launcher2/PagedViewWithDraggableItems.java
index f24d7e0..3f72292 100644
--- a/src/com/android/launcher2/PagedViewWithDraggableItems.java
+++ b/src/com/android/launcher2/PagedViewWithDraggableItems.java
@@ -150,4 +150,10 @@
     public void setDragSlopeThreshold(float dragSlopeThreshold) {
         mDragSlopeThreshold = dragSlopeThreshold;
     }
+
+    @Override
+    protected void onDetachedFromWindow() {
+        mLastTouchedItem = null;
+        super.onDetachedFromWindow();
+    }
 }