Adding a couple memory optimizations to Launcher

-> Always dispose of widget page views when leaving the activity.
   These pages hold onto many bitmaps.
-> Clear database cache when leaving the activity.

Bug: 17967108
Change-Id: I10ebaaed14e7cd86f09a9afcabd73043705f21b8
diff --git a/src/com/android/launcher3/AppsCustomizePagedView.java b/src/com/android/launcher3/AppsCustomizePagedView.java
index 7f3b7fb..0648858 100644
--- a/src/com/android/launcher3/AppsCustomizePagedView.java
+++ b/src/com/android/launcher3/AppsCustomizePagedView.java
@@ -1476,7 +1476,9 @@
         }
     }
 
+    @Override
     public void reset() {
+        super.reset();
         // If we have reset, then we should not continue to restore the previous state
         mSaveInstanceStateItemIndex = -1;
 
diff --git a/src/com/android/launcher3/AppsCustomizeTabHost.java b/src/com/android/launcher3/AppsCustomizeTabHost.java
index 9a516fd..df65cba 100644
--- a/src/com/android/launcher3/AppsCustomizeTabHost.java
+++ b/src/com/android/launcher3/AppsCustomizeTabHost.java
@@ -141,14 +141,6 @@
             mPagedView.loadAssociatedPages(mPagedView.getCurrentPage());
         }
     }
-
-    public void onTrimMemory() {
-        mContent.setVisibility(GONE);
-        // Clear the widget pages of all their subviews - this will trigger the widget previews
-        // to delete their bitmaps
-        mPagedView.clearAllWidgetPages();
-    }
-
     @Override
     public ViewGroup getContent() {
         return mPagedView;
diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java
index bb7265e..7fd8193 100644
--- a/src/com/android/launcher3/Launcher.java
+++ b/src/com/android/launcher3/Launcher.java
@@ -50,6 +50,7 @@
 import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.database.ContentObserver;
+import android.database.sqlite.SQLiteDatabase;
 import android.graphics.Bitmap;
 import android.graphics.Canvas;
 import android.graphics.Color;
@@ -3568,6 +3569,9 @@
                     if (mSearchDropTargetBar != null) {
                         mSearchDropTargetBar.hideSearchBar(false);
                     }
+
+                    // This can hold unnecessary references to views.
+                    mStateAnimation = null;
                 }
 
             });
@@ -3853,6 +3857,9 @@
                     content.setCurrentPage(content.getNextPage());
 
                     mAppsCustomizeContent.updateCurrentPageScroll();
+
+                    // This can hold unnecessary references to views.
+                    mStateAnimation = null;
                 }
             });
 
@@ -3896,8 +3903,16 @@
     @Override
     public void onTrimMemory(int level) {
         super.onTrimMemory(level);
-        if (level >= ComponentCallbacks2.TRIM_MEMORY_MODERATE) {
-            mAppsCustomizeTabHost.onTrimMemory();
+        if (level >= ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN) {
+            // The widget preview db can result in holding onto over
+            // 3MB of memory for caching which isn't necessary.
+            SQLiteDatabase.releaseMemory();
+
+            // We reset the apps customize tray in order to
+            // to free all the memory associated with widget previews
+            if (mAppsCustomizeTabHost != null) {
+                mAppsCustomizeTabHost.reset();
+            }
         }
     }
 
diff --git a/src/com/android/launcher3/PagedViewWithDraggableItems.java b/src/com/android/launcher3/PagedViewWithDraggableItems.java
index 2a29c33..7f4a3a0 100644
--- a/src/com/android/launcher3/PagedViewWithDraggableItems.java
+++ b/src/com/android/launcher3/PagedViewWithDraggableItems.java
@@ -91,6 +91,10 @@
         return super.onTouchEvent(ev);
     }
 
+    public void reset() {
+        mLastTouchedItem = null;
+    }
+
     @Override
     public boolean onTouch(View v, MotionEvent event) {
         mLastTouchedItem = v;