Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8cf2a5e5 authored by Ken Wakasa's avatar Ken Wakasa
Browse files

Prep for RAM footprint optimization for Emoji palettes

bug: 10902556
Change-Id: I313948c73b60cd33c437cf02e8d3fb61c288a240
parent 984aa60e
Loading
Loading
Loading
Loading
+11 −9
Original line number Diff line number Diff line
@@ -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<ScrollKeyboardView> mActiveKeyboardView =
        private final SparseArray<ScrollKeyboardView> 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;
        }
    }

+2 −0
Original line number Diff line number Diff line
@@ -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;
+2 −1
Original line number Diff line number Diff line
@@ -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