Comprehensive memory deallocation

Change-Id: I4673543c96eb342c3c977e00d44772a0d719a23e
diff --git a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
index 07bd7a6..e1c841d 100644
--- a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
@@ -1228,6 +1228,6 @@
     @Override
     public void deallocateMemory() {
         super.deallocateMemory();
-        mGestureTrailsDrawingPreview.deallocateMemory();
+        mDrawingPreviewPlacerView.deallocateMemory();
     }
 }
diff --git a/java/src/com/android/inputmethod/keyboard/internal/AbstractDrawingPreview.java b/java/src/com/android/inputmethod/keyboard/internal/AbstractDrawingPreview.java
index 32352ce..cd7dd6f 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/AbstractDrawingPreview.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/AbstractDrawingPreview.java
@@ -50,9 +50,7 @@
         // Default implementation is empty.
     }
 
-    public void onDetachFromWindow() {
-        // Default implementation is empty.
-    }
+    public abstract void onDeallocateMemory();
 
     /**
      * Draws the preview
diff --git a/java/src/com/android/inputmethod/keyboard/internal/DrawingPreviewPlacerView.java b/java/src/com/android/inputmethod/keyboard/internal/DrawingPreviewPlacerView.java
index 14baf35..606addc 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/DrawingPreviewPlacerView.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/DrawingPreviewPlacerView.java
@@ -59,13 +59,17 @@
         }
     }
 
+    public void deallocateMemory() {
+        final int count = mPreviews.size();
+        for (int i = 0; i < count; i++) {
+            mPreviews.get(i).onDeallocateMemory();
+        }
+    }
+
     @Override
     protected void onDetachedFromWindow() {
         super.onDetachedFromWindow();
-        final int count = mPreviews.size();
-        for (int i = 0; i < count; i++) {
-            mPreviews.get(i).onDetachFromWindow();
-        }
+        deallocateMemory();
     }
 
     @Override
diff --git a/java/src/com/android/inputmethod/keyboard/internal/GestureFloatingTextDrawingPreview.java b/java/src/com/android/inputmethod/keyboard/internal/GestureFloatingTextDrawingPreview.java
index 1790313..2fa7030 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/GestureFloatingTextDrawingPreview.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/GestureFloatingTextDrawingPreview.java
@@ -105,6 +105,11 @@
         mParams = new GesturePreviewTextParams(typedArray);
     }
 
+    @Override
+    public void onDeallocateMemory() {
+        // Nothing to do here.
+    }
+
     public void setSuggetedWords(final SuggestedWords suggestedWords) {
         if (!isPreviewEnabled()) {
             return;
diff --git a/java/src/com/android/inputmethod/keyboard/internal/GestureTrailsDrawingPreview.java b/java/src/com/android/inputmethod/keyboard/internal/GestureTrailsDrawingPreview.java
index 2d23ddb..13f2b60 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/GestureTrailsDrawingPreview.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/GestureTrailsDrawingPreview.java
@@ -103,11 +103,7 @@
     }
 
     @Override
-    public void onDetachFromWindow() {
-        freeOffscreenBuffer();
-    }
-
-    public void deallocateMemory() {
+    public void onDeallocateMemory() {
         freeOffscreenBuffer();
     }
 
diff --git a/java/src/com/android/inputmethod/keyboard/internal/SlidingKeyInputDrawingPreview.java b/java/src/com/android/inputmethod/keyboard/internal/SlidingKeyInputDrawingPreview.java
index aaa4072..76cb891 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/SlidingKeyInputDrawingPreview.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/SlidingKeyInputDrawingPreview.java
@@ -62,6 +62,11 @@
         mPaint.setColor(previewColor);
     }
 
+    @Override
+    public void onDeallocateMemory() {
+        // Nothing to do here.
+    }
+
     public void dismissSlidingKeyInputPreview() {
         mShowsSlidingKeyInputPreview = false;
         getDrawingView().invalidate();