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

Commit 0b288985 authored by Satoshi Kataoka's avatar Satoshi Kataoka Committed by Android (Google) Code Review
Browse files

Merge "Fix emoji recent key behavior"

parents c01707db e7ed5cae
Loading
Loading
Loading
Loading
+19 −1
Original line number Diff line number Diff line
@@ -580,10 +580,18 @@ public final class EmojiKeyboardView extends LinearLayout implements OnTabChange
    }

    private void setCurrentCategoryId(final int categoryId, final boolean force) {
        if (mEmojiCategory.getCurrentCategoryId() == categoryId && !force) {
        final int oldCategoryId = mEmojiCategory.getCurrentCategoryId();
        if (oldCategoryId == categoryId && !force) {
            return;
        }

        if (oldCategoryId == CATEGORY_ID_RECENTS) {
            // Needs to save pending updates for recent keys when we get out of the recents
            // category because we don't want to move the recent emojis around while the user
            // is in the recents category.
            mEmojiKeyboardAdapter.flushPendingRecentKeys();
        }

        mEmojiCategory.setCurrentCategoryId(categoryId);
        final int newTabId = mEmojiCategory.getTabIdFromCategoryId(categoryId);
        final int newCategoryPageId = mEmojiCategory.getPageIdFromCategoryId(categoryId);
@@ -612,8 +620,18 @@ public final class EmojiKeyboardView extends LinearLayout implements OnTabChange
            mRecentsKeyboard = mEmojiCategory.getKeyboard(CATEGORY_ID_RECENTS, 0);
        }

        public void flushPendingRecentKeys() {
            mRecentsKeyboard.flushPendingRecentKeys();
            final KeyboardView recentKeyboardView =
                    mActiveKeyboardView.get(mEmojiCategory.getRecentTabId());
            if (recentKeyboardView != null) {
                recentKeyboardView.invalidateAllKeys();
            }
        }

        public void addRecentKey(final Key key) {
            if (mEmojiCategory.isInRecentTab()) {
                mRecentsKeyboard.addPendingKey(key);
                return;
            }
            mRecentsKeyboard.addKeyFirst(key);
+19 −2
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ public class DynamicGridKeyboard extends Keyboard {
    private static final String TAG = DynamicGridKeyboard.class.getSimpleName();
    private static final int TEMPLATE_KEY_CODE_0 = 0x30;
    private static final int TEMPLATE_KEY_CODE_1 = 0x31;
    private final Object mLock = new Object();

    private final SharedPreferences mPrefs;
    private final int mLeftPadding;
@@ -48,6 +49,7 @@ public class DynamicGridKeyboard extends Keyboard {
    private final int mMaxKeyCount;
    private final boolean mIsRecents;
    private final ArrayDeque<GridKey> mGridKeys = CollectionUtils.newArrayDeque();
    private final ArrayDeque<Key> mPendingKeys = CollectionUtils.newArrayDeque();

    private Key[] mCachedGridKeys;

@@ -74,6 +76,21 @@ public class DynamicGridKeyboard extends Keyboard {
        throw new RuntimeException("Can't find template key: code=" + code);
    }

    public void addPendingKey(final Key usedKey) {
        synchronized (mLock) {
            mPendingKeys.addLast(usedKey);
        }
    }

    public void flushPendingRecentKeys() {
        synchronized (mLock) {
            while (!mPendingKeys.isEmpty()) {
                addKey(mPendingKeys.pollFirst(), true);
            }
            saveRecentKeys();
        }
    }

    public void addKeyFirst(final Key usedKey) {
        addKey(usedKey, true);
        if (mIsRecents) {
@@ -89,7 +106,7 @@ public class DynamicGridKeyboard extends Keyboard {
        if (usedKey == null) {
            return;
        }
        synchronized (mGridKeys) {
        synchronized (mLock) {
            mCachedGridKeys = null;
            final GridKey key = new GridKey(usedKey);
            while (mGridKeys.remove(key)) {
@@ -167,7 +184,7 @@ public class DynamicGridKeyboard extends Keyboard {

    @Override
    public Key[] getKeys() {
        synchronized (mGridKeys) {
        synchronized (mLock) {
            if (mCachedGridKeys != null) {
                return mCachedGridKeys;
            }