From 0e01df9baf3d9e2fc7b9a51b683ce6df6ff547dd Mon Sep 17 00:00:00 2001 From: Satoshi Kataoka Date: Tue, 8 Oct 2013 20:11:35 +0900 Subject: [PATCH] Reduce memory of emoji palette Bug: 10902556 Change-Id: I3c8da35a601de2bfb248292c7b59235fc1120988 --- .../keyboard/EmojiPalettesView.java | 21 +++++++++++++++++++ .../keyboard/KeyboardSwitcher.java | 12 +++++++++++ .../android/inputmethod/latin/LatinIME.java | 6 +----- 3 files changed, 34 insertions(+), 5 deletions(-) diff --git a/java/src/com/android/inputmethod/keyboard/EmojiPalettesView.java b/java/src/com/android/inputmethod/keyboard/EmojiPalettesView.java index 5c518b8f1..4f5961175 100644 --- a/java/src/com/android/inputmethod/keyboard/EmojiPalettesView.java +++ b/java/src/com/android/inputmethod/keyboard/EmojiPalettesView.java @@ -74,6 +74,7 @@ public final class EmojiPalettesView extends LinearLayout implements OnTabChange ViewPager.OnPageChangeListener, View.OnClickListener, ScrollKeyboardView.OnKeyClickListener { private static final String TAG = EmojiPalettesView.class.getSimpleName(); + private static final boolean DEBUG_PAGER = false; private final int mKeyBackgroundId; private final int mEmojiFunctionalKeyBackgroundId; private final KeyboardLayoutSet mLayoutSet; @@ -566,6 +567,20 @@ public final class EmojiPalettesView extends LinearLayout implements OnTabChange // TODO: } + public void startEmojiPalettes() { + if (DEBUG_PAGER) { + Log.d(TAG, "allocate emoji palettes memory"); + } + mEmojiPager.setAdapter(mEmojiPalettesAdapter); + } + + public void stopEmojiPalettes() { + if (DEBUG_PAGER) { + Log.d(TAG, "deallocate emoji palettes memory"); + } + mEmojiPager.setAdapter(null); + } + public void setKeyboardActionListener(final KeyboardActionListener listener) { mKeyboardActionListener = listener; mDeleteKeyOnTouchListener.setKeyboardActionListener(mKeyboardActionListener); @@ -663,6 +678,9 @@ public final class EmojiPalettesView extends LinearLayout implements OnTabChange @Override public Object instantiateItem(final ViewGroup container, final int position) { + if (DEBUG_PAGER) { + Log.d(TAG, "instantiate item: " + position); + } final ScrollKeyboardView oldKeyboardView = mActiveKeyboardViews.get(position); if (oldKeyboardView != null) { oldKeyboardView.deallocateMemory(); @@ -694,6 +712,9 @@ public final class EmojiPalettesView extends LinearLayout implements OnTabChange @Override public void destroyItem(final ViewGroup container, final int position, final Object object) { + if (DEBUG_PAGER) { + Log.d(TAG, "destroy item: " + position + ", " + object.getClass().getSimpleName()); + } final ScrollKeyboardView keyboardView = mActiveKeyboardViews.get(position); if (keyboardView != null) { keyboardView.deallocateMemory(); diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java b/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java index 4fc1082f1..97609837e 100644 --- a/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java +++ b/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java @@ -260,12 +260,14 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions { private void setMainKeyboardFrame() { mMainKeyboardFrame.setVisibility(View.VISIBLE); mEmojiPalettesView.setVisibility(View.GONE); + mEmojiPalettesView.stopEmojiPalettes(); } // Implements {@link KeyboardState.SwitchActions}. @Override public void setEmojiKeyboard() { mMainKeyboardFrame.setVisibility(View.GONE); + mEmojiPalettesView.startEmojiPalettes(); mEmojiPalettesView.setVisibility(View.VISIBLE); } @@ -336,6 +338,16 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions { return mKeyboardView; } + public void deallocateMemory() { + if (mKeyboardView != null) { + mKeyboardView.cancelAllOngoingEvents(); + mKeyboardView.deallocateMemory(); + } + if (mEmojiPalettesView != null) { + mEmojiPalettesView.stopEmojiPalettes(); + } + } + public View onCreateInputView(final boolean isHardwareAcceleratedDrawingEnabled) { if (mKeyboardView != null) { mKeyboardView.closing(); diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java index 4d7e43e17..8d1bb07cf 100644 --- a/java/src/com/android/inputmethod/latin/LatinIME.java +++ b/java/src/com/android/inputmethod/latin/LatinIME.java @@ -1049,11 +1049,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen private void onFinishInputViewInternal(final boolean finishingInput) { super.onFinishInputView(finishingInput); mKeyboardSwitcher.onFinishInputView(); - final MainKeyboardView mainKeyboardView = mKeyboardSwitcher.getMainKeyboardView(); - if (mainKeyboardView != null) { - mainKeyboardView.cancelAllOngoingEvents(); - mainKeyboardView.deallocateMemory(); - } + mKeyboardSwitcher.deallocateMemory(); // Remove pending messages related to update suggestions mHandler.cancelUpdateSuggestionStrip(); // Should do the following in onFinishInputInternal but until JB MR2 it's not called :(