diff --git a/java/src/com/android/inputmethod/keyboard/EmojiPalettesView.java b/java/src/com/android/inputmethod/keyboard/EmojiPalettesView.java index 85ae50092..ef9448c2f 100644 --- a/java/src/com/android/inputmethod/keyboard/EmojiPalettesView.java +++ b/java/src/com/android/inputmethod/keyboard/EmojiPalettesView.java @@ -459,6 +459,7 @@ public final class EmojiPalettesView extends LinearLayout implements OnTabChange mEmojiPager.setAdapter(mEmojiPalettesAdapter); mEmojiPager.setOnPageChangeListener(this); mEmojiPager.setOffscreenPageLimit(0); + mEmojiPager.setPersistentDrawingCache(ViewPager.PERSISTENT_NO_CACHE); final Resources res = getResources(); final EmojiLayoutParams emojiLp = new EmojiLayoutParams(res); emojiLp.setPagerProperties(mEmojiPager); @@ -607,7 +608,7 @@ public final class EmojiPalettesView extends LinearLayout implements OnTabChange private static class EmojiPalettesAdapter extends PagerAdapter { private final ScrollKeyboardView.OnKeyClickListener mListener; private final DynamicGridKeyboard mRecentsKeyboard; - private final SparseArray mActiveKeyboardView = + private final SparseArray mActiveKeyboardViews = CollectionUtils.newSparseArray(); private final EmojiCategory mEmojiCategory; private int mActivePosition = 0; @@ -623,7 +624,7 @@ public final class EmojiPalettesView extends LinearLayout implements OnTabChange public void flushPendingRecentKeys() { mRecentsKeyboard.flushPendingRecentKeys(); final KeyboardView recentKeyboardView = - mActiveKeyboardView.get(mEmojiCategory.getRecentTabId()); + mActiveKeyboardViews.get(mEmojiCategory.getRecentTabId()); if (recentKeyboardView != null) { recentKeyboardView.invalidateAllKeys(); } @@ -636,7 +637,7 @@ public final class EmojiPalettesView extends LinearLayout implements OnTabChange } mRecentsKeyboard.addKeyFirst(key); final KeyboardView recentKeyboardView = - mActiveKeyboardView.get(mEmojiCategory.getRecentTabId()); + mActiveKeyboardViews.get(mEmojiCategory.getRecentTabId()); if (recentKeyboardView != null) { recentKeyboardView.invalidateAllKeys(); } @@ -652,7 +653,7 @@ public final class EmojiPalettesView extends LinearLayout implements OnTabChange if (mActivePosition == position) { return; } - final ScrollKeyboardView oldKeyboardView = mActiveKeyboardView.get(mActivePosition); + final ScrollKeyboardView oldKeyboardView = mActiveKeyboardViews.get(mActivePosition); if (oldKeyboardView != null) { oldKeyboardView.releaseCurrentKey(); oldKeyboardView.deallocateMemory(); @@ -662,11 +663,11 @@ public final class EmojiPalettesView extends LinearLayout implements OnTabChange @Override public Object instantiateItem(final ViewGroup container, final int position) { - final ScrollKeyboardView oldKeyboardView = mActiveKeyboardView.get(position); + final ScrollKeyboardView oldKeyboardView = mActiveKeyboardViews.get(position); if (oldKeyboardView != null) { oldKeyboardView.deallocateMemory(); // This may be redundant but wanted to be safer.. - mActiveKeyboardView.remove(position); + mActiveKeyboardViews.remove(position); } final Keyboard keyboard = mEmojiCategory.getKeyboardFromPagePosition(position); @@ -681,7 +682,7 @@ public final class EmojiPalettesView extends LinearLayout implements OnTabChange R.id.emoji_keyboard_scroller); keyboardView.setScrollView(scrollView); container.addView(view); - mActiveKeyboardView.put(position, keyboardView); + mActiveKeyboardViews.put(position, keyboardView); return view; } @@ -693,12 +694,13 @@ public final class EmojiPalettesView extends LinearLayout implements OnTabChange @Override public void destroyItem(final ViewGroup container, final int position, final Object object) { - final ScrollKeyboardView keyboardView = mActiveKeyboardView.get(position); + ScrollKeyboardView keyboardView = mActiveKeyboardViews.get(position); if (keyboardView != null) { keyboardView.deallocateMemory(); - mActiveKeyboardView.remove(position); + mActiveKeyboardViews.remove(position); } container.removeView(keyboardView); + keyboardView = null; } } diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardView.java b/java/src/com/android/inputmethod/keyboard/KeyboardView.java index aeb9e67b2..5578713a0 100644 --- a/java/src/com/android/inputmethod/keyboard/KeyboardView.java +++ b/java/src/com/android/inputmethod/keyboard/KeyboardView.java @@ -243,6 +243,8 @@ public class KeyboardView extends View { } private void freeOffscreenBuffer() { + mOffscreenCanvas.setBitmap(null); + mOffscreenCanvas.setMatrix(null); if (mOffscreenBuffer != null) { mOffscreenBuffer.recycle(); mOffscreenBuffer = null; diff --git a/java/src/com/android/inputmethod/keyboard/internal/ScrollKeyboardView.java b/java/src/com/android/inputmethod/keyboard/internal/ScrollKeyboardView.java index b8ee976e8..9cf68d43d 100644 --- a/java/src/com/android/inputmethod/keyboard/internal/ScrollKeyboardView.java +++ b/java/src/com/android/inputmethod/keyboard/internal/ScrollKeyboardView.java @@ -30,8 +30,9 @@ import com.android.inputmethod.keyboard.KeyboardView; import com.android.inputmethod.latin.R; /** - * This is an extended {@link KeyboardView} class that hosts a scroll keyboard. + * This is an extended {@link KeyboardView} class that hosts a vertical scroll keyboard. * Multi-touch unsupported. No {@link PointerTracker}s. No gesture support. + * TODO: Vertical scroll capability should be removed from this class because it's no longer used. */ // TODO: Implement key popup preview. public final class ScrollKeyboardView extends KeyboardView implements