From 28d841534db4e11fbd215d78d399ce4ac75aff1d Mon Sep 17 00:00:00 2001
From: "Tadashi G. Takaoka" <takaoka@google.com>
Date: Fri, 14 Oct 2011 18:42:10 +0900
Subject: [PATCH] Release bitmap buffer when KeyboardView is detached from
 Window

Bug: 5450387
Change-Id: I3e60edd8c0ea70aff9e484f6e00dadcc8f8981f6
---
 .../inputmethod/keyboard/KeyboardView.java       |  4 ++++
 .../inputmethod/keyboard/LatinKeyboard.java      | 16 ++++++++--------
 2 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardView.java b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
index 6af4123c90..e69dc581b0 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
@@ -974,5 +974,9 @@ public class KeyboardView extends View implements PointerTracker.DrawingProxy {
         if (mPreviewPlacer != null) {
             mPreviewPlacer.removeAllViews();
         }
+        if (mBuffer != null) {
+            mBuffer.recycle();
+            mBuffer = null;
+        }
     }
 }
diff --git a/java/src/com/android/inputmethod/keyboard/LatinKeyboard.java b/java/src/com/android/inputmethod/keyboard/LatinKeyboard.java
index 3452720445..c51f1849bb 100644
--- a/java/src/com/android/inputmethod/keyboard/LatinKeyboard.java
+++ b/java/src/com/android/inputmethod/keyboard/LatinKeyboard.java
@@ -59,8 +59,8 @@ public class LatinKeyboard extends Keyboard {
     private final int mSpacebarTextColor;
     private final int mSpacebarTextShadowColor;
     private float mSpacebarTextFadeFactor = 0.0f;
-    private final HashMap<Integer, SoftReference<BitmapDrawable>> mSpaceDrawableCache =
-            new HashMap<Integer, SoftReference<BitmapDrawable>>();
+    private final HashMap<Integer, BitmapDrawable> mSpaceDrawableCache =
+            new HashMap<Integer, BitmapDrawable>();
     private final boolean mIsSpacebarTriggeringPopupByLongPress;
 
     /* Shortcut key and its icons if available */
@@ -249,13 +249,13 @@ public class LatinKeyboard extends Keyboard {
     private BitmapDrawable getSpaceDrawable(Locale locale, boolean isAutoCorrection) {
         final Integer hashCode = Arrays.hashCode(
                 new Object[] { locale, isAutoCorrection, mSpacebarTextFadeFactor });
-        final SoftReference<BitmapDrawable> ref = mSpaceDrawableCache.get(hashCode);
-        BitmapDrawable drawable = (ref == null) ? null : ref.get();
-        if (drawable == null) {
-            drawable = new BitmapDrawable(mRes, drawSpacebar(
-                    locale, isAutoCorrection, mSpacebarTextFadeFactor));
-            mSpaceDrawableCache.put(hashCode, new SoftReference<BitmapDrawable>(drawable));
+        final BitmapDrawable cached = mSpaceDrawableCache.get(hashCode);
+        if (cached != null) {
+            return cached;
         }
+        final BitmapDrawable drawable = new BitmapDrawable(mRes, drawSpacebar(
+                locale, isAutoCorrection, mSpacebarTextFadeFactor));
+        mSpaceDrawableCache.put(hashCode, drawable);
         return drawable;
     }
 
-- 
GitLab