From 66dd55fc8bca69eb1aeab548f6e3c32bd8568647 Mon Sep 17 00:00:00 2001 From: eranl <1707552+eranl@users.noreply.github.com> Date: Sat, 1 Nov 2025 02:24:18 +0200 Subject: [PATCH] Add emoji to recents tab when selected from suggestions --- .../keyboard/keyboard/KeyboardSwitcher.java | 4 ++++ .../keyboard/emoji/DynamicGridKeyboard.java | 24 +++++++++++-------- .../keyboard/emoji/EmojiCategory.java | 7 +++++- .../keyboard/emoji/EmojiPalettesView.java | 7 +++++- .../keyboard/latin/inputlogic/InputLogic.java | 5 ++++ 5 files changed, 35 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/helium314/keyboard/keyboard/KeyboardSwitcher.java b/app/src/main/java/helium314/keyboard/keyboard/KeyboardSwitcher.java index a008debc6d..685fb40262 100644 --- a/app/src/main/java/helium314/keyboard/keyboard/KeyboardSwitcher.java +++ b/app/src/main/java/helium314/keyboard/keyboard/KeyboardSwitcher.java @@ -632,6 +632,10 @@ public boolean isShowingStripContainer() { return mStripContainer.isShown(); } + public EmojiPalettesView getEmojiPalettesView() { + return mEmojiPalettesView; + } + public View getVisibleKeyboardView() { if (isShowingEmojiPalettes()) { return mEmojiPalettesView; diff --git a/app/src/main/java/helium314/keyboard/keyboard/emoji/DynamicGridKeyboard.java b/app/src/main/java/helium314/keyboard/keyboard/emoji/DynamicGridKeyboard.java index eea566a720..ede159ba09 100644 --- a/app/src/main/java/helium314/keyboard/keyboard/emoji/DynamicGridKeyboard.java +++ b/app/src/main/java/helium314/keyboard/keyboard/emoji/DynamicGridKeyboard.java @@ -233,20 +233,24 @@ public void loadRecentKeys(final Collection keyboards) { final String str = mPrefs.getString(Settings.PREF_EMOJI_RECENT_KEYS, Defaults.PREF_EMOJI_RECENT_KEYS); final List keys = JsonUtils.jsonStrToList(str); for (final Object o : keys) { - final Key key; - if (o instanceof Integer) { - final int code = (Integer)o; - key = getKeyByCode(keyboards, code); - } else if (o instanceof final String outputText) { - key = getKeyByOutputText(keyboards, outputText); - } else { - Log.w(TAG, "Invalid object: " + o); - continue; + final Key key = getKey(keyboards, o); + if (key != null) { + addKeyLast(key); } - addKeyLast(key); } } + Key getKey(Collection keyboards, Object o) { + if (o instanceof Integer code) { + return getKeyByCode(keyboards, code); + } + if (o instanceof final String outputText) { + return getKeyByOutputText(keyboards, outputText); + } + Log.w(TAG, "Invalid object: " + o); + return null; + } + private int getKeyX0(final int index) { final int column = index % mColumnsNum; return column * mHorizontalStep + mHorizontalGap / 2; diff --git a/app/src/main/java/helium314/keyboard/keyboard/emoji/EmojiCategory.java b/app/src/main/java/helium314/keyboard/keyboard/emoji/EmojiCategory.java index 413a6b8f62..f180e1b125 100644 --- a/app/src/main/java/helium314/keyboard/keyboard/emoji/EmojiCategory.java +++ b/app/src/main/java/helium314/keyboard/keyboard/emoji/EmojiCategory.java @@ -27,6 +27,7 @@ import helium314.keyboard.latin.utils.ResourceUtils; import java.util.ArrayList; +import java.util.Collection; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; @@ -296,7 +297,7 @@ public DynamicGridKeyboard getKeyboard(final int categoryId, final int id) { mLayoutSet.getKeyboard(KeyboardId.ELEMENT_EMOJI_RECENTS), mMaxRecentsKeyCount, categoryId, currentWidth); mCategoryKeyboardMap.put(categoryKeyboardMapKey, kbd); - kbd.loadRecentKeys(mCategoryKeyboardMap.values()); + kbd.loadRecentKeys(getKeyboards()); return kbd; } @@ -320,6 +321,10 @@ public DynamicGridKeyboard getKeyboard(final int categoryId, final int id) { } } + Collection getKeyboards() { + return mCategoryKeyboardMap.values(); + } + private int computeMaxKeyCountPerPage() { final DynamicGridKeyboard tempKeyboard = new DynamicGridKeyboard(mPrefs, mLayoutSet.getKeyboard(KeyboardId.ELEMENT_EMOJI_RECENTS), diff --git a/app/src/main/java/helium314/keyboard/keyboard/emoji/EmojiPalettesView.java b/app/src/main/java/helium314/keyboard/keyboard/emoji/EmojiPalettesView.java index c29d9280da..6c5d1dd087 100644 --- a/app/src/main/java/helium314/keyboard/keyboard/emoji/EmojiPalettesView.java +++ b/app/src/main/java/helium314/keyboard/keyboard/emoji/EmojiPalettesView.java @@ -341,12 +341,17 @@ public void startEmojiPalettes(final KeyVisualAttributes keyVisualAttr, initDictionaryFacilitator(); } + public void addRecent(String emoji) { + initialize(); + addRecentKey(getRecentsKeyboard().getKey(mEmojiCategory.getKeyboards(), emoji)); + } + private void addRecentKey(final Key key) { if (Settings.getValues().mIncognitoModeEnabled) { // We do not want to log recent keys while being in incognito return; } - if (mEmojiCategory.isInRecentTab()) { + if (getVisibility() == VISIBLE && mEmojiCategory.isInRecentTab()) { getRecentsKeyboard().addPendingKey(key); return; } diff --git a/app/src/main/java/helium314/keyboard/latin/inputlogic/InputLogic.java b/app/src/main/java/helium314/keyboard/latin/inputlogic/InputLogic.java index f4661cba30..8bcd8e1925 100644 --- a/app/src/main/java/helium314/keyboard/latin/inputlogic/InputLogic.java +++ b/app/src/main/java/helium314/keyboard/latin/inputlogic/InputLogic.java @@ -311,6 +311,11 @@ public InputTransaction onPickSuggestionManually(final SettingsValues settingsVa mConnection.endBatchEdit(); // Don't allow cancellation of manual pick mLastComposedWord.deactivate(); + + if (suggestionInfo.isEmoji()) { + KeyboardSwitcher.getInstance().getEmojiPalettesView().addRecent(suggestion); + } + // Space state must be updated before calling updateShiftState if (settingsValues.mAutospaceAfterSuggestion) mSpaceState = SpaceState.PHANTOM;