From 6a949f3b39eba780fc51e55918cdb7696c8f83ec Mon Sep 17 00:00:00 2001 From: eranl <1707552+eranl@users.noreply.github.com> Date: Fri, 13 Feb 2026 02:04:48 +0200 Subject: [PATCH 1/3] Improve auto-show/hide toolbar --- app/src/main/java/helium314/keyboard/latin/LatinIME.java | 8 ++++++-- .../main/java/helium314/keyboard/latin/WordComposer.java | 1 + .../helium314/keyboard/latin/inputlogic/InputLogic.java | 4 ++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/helium314/keyboard/latin/LatinIME.java b/app/src/main/java/helium314/keyboard/latin/LatinIME.java index fe5458ab61..7b8f0254b9 100644 --- a/app/src/main/java/helium314/keyboard/latin/LatinIME.java +++ b/app/src/main/java/helium314/keyboard/latin/LatinIME.java @@ -1035,11 +1035,15 @@ public void onUpdateSelection(final int oldSelStart, final int oldSelEnd, + ", cs=" + composingSpanStart + ", ce=" + composingSpanEnd); } + final SettingsValues settingsValues = mSettings.getCurrent(); + if (hasSuggestionStripView() && settingsValues.mAutoShowToolbar) { + mSuggestionStripView.setToolbarVisibility(true); + } + // This call happens whether our view is displayed or not, but if it's not then we should // not attempt recorrection. This is true even with a hardware keyboard connected: if the // view is not displayed we have no means of showing suggestions anyway, and if it is then // we want to show suggestions anyway. - final SettingsValues settingsValues = mSettings.getCurrent(); if (isInputViewShown() && mInputLogic.onUpdateSelection(oldSelStart, oldSelEnd, newSelStart, newSelEnd, composingSpanStart, composingSpanEnd, settingsValues)) { @@ -1459,7 +1463,7 @@ private void setSuggestedWords(final SuggestedWords suggestedWords) { mSuggestionStripView.setSuggestions(suggestedWords, mRichImm.getCurrentSubtype().isRtlSubtype()); // Auto hide the toolbar if dictionary suggestions are available - if (currentSettingsValues.mAutoHideToolbar && !noSuggestionsFromDictionaries) { + if (currentSettingsValues.mAutoHideToolbar && !noSuggestionsFromDictionaries && ! mInputLogic.isResumed()) { mSuggestionStripView.setToolbarVisibility(false); } } diff --git a/app/src/main/java/helium314/keyboard/latin/WordComposer.java b/app/src/main/java/helium314/keyboard/latin/WordComposer.java index f72233dce4..098ca96ae4 100644 --- a/app/src/main/java/helium314/keyboard/latin/WordComposer.java +++ b/app/src/main/java/helium314/keyboard/latin/WordComposer.java @@ -117,6 +117,7 @@ public void reset() { private void refreshTypedWordCache() { mTypedWordCache = mCombinerChain.getComposingWordWithCombiningFeedback(); mCodePointSize = Character.codePointCount(mTypedWordCache, 0, mTypedWordCache.length()); + mIsResumed = false; } /** 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 afa7162e66..2223940aac 100644 --- a/app/src/main/java/helium314/keyboard/latin/inputlogic/InputLogic.java +++ b/app/src/main/java/helium314/keyboard/latin/inputlogic/InputLogic.java @@ -2764,4 +2764,8 @@ private void closeEmojiDictionary() { mEmojiDictionaryFacilitator = null; } } + + public boolean isResumed() { + return mWordComposer.isResumed(); + } } From d01054f7936a55c0b22187490023a843cee3866b Mon Sep 17 00:00:00 2001 From: eranl <1707552+eranl@users.noreply.github.com> Date: Fri, 13 Feb 2026 02:40:02 +0200 Subject: [PATCH 2/3] Prevent flicker while typing --- app/src/main/java/helium314/keyboard/latin/LatinIME.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/helium314/keyboard/latin/LatinIME.java b/app/src/main/java/helium314/keyboard/latin/LatinIME.java index 7b8f0254b9..a1924097fb 100644 --- a/app/src/main/java/helium314/keyboard/latin/LatinIME.java +++ b/app/src/main/java/helium314/keyboard/latin/LatinIME.java @@ -1036,7 +1036,9 @@ public void onUpdateSelection(final int oldSelStart, final int oldSelEnd, } final SettingsValues settingsValues = mSettings.getCurrent(); - if (hasSuggestionStripView() && settingsValues.mAutoShowToolbar) { + if (hasSuggestionStripView() && settingsValues.mAutoShowToolbar + && (newSelStart != oldSelStart + 1 || newSelStart != composingSpanEnd)) { + // Auto-show toolbar except while typing mSuggestionStripView.setToolbarVisibility(true); } From 96918757daa00e168644853c2e58c79842ebeef0 Mon Sep 17 00:00:00 2001 From: eranl <1707552+eranl@users.noreply.github.com> Date: Fri, 13 Feb 2026 21:15:25 +0200 Subject: [PATCH 3/3] Minor fixes --- app/src/main/java/helium314/keyboard/latin/LatinIME.java | 4 ++-- app/src/main/java/helium314/keyboard/latin/WordComposer.java | 4 ++++ .../java/helium314/keyboard/latin/inputlogic/InputLogic.java | 2 ++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/helium314/keyboard/latin/LatinIME.java b/app/src/main/java/helium314/keyboard/latin/LatinIME.java index a1924097fb..2d97413179 100644 --- a/app/src/main/java/helium314/keyboard/latin/LatinIME.java +++ b/app/src/main/java/helium314/keyboard/latin/LatinIME.java @@ -1037,8 +1037,8 @@ public void onUpdateSelection(final int oldSelStart, final int oldSelEnd, final SettingsValues settingsValues = mSettings.getCurrent(); if (hasSuggestionStripView() && settingsValues.mAutoShowToolbar - && (newSelStart != oldSelStart + 1 || newSelStart != composingSpanEnd)) { - // Auto-show toolbar except while typing + && composingSpanEnd != - 1 && newSelStart != oldSelStart + 1 && newSelStart != oldSelStart - 1 && newSelStart != composingSpanEnd) { + // Auto-show toolbar except while typing and picking suggestions mSuggestionStripView.setToolbarVisibility(true); } diff --git a/app/src/main/java/helium314/keyboard/latin/WordComposer.java b/app/src/main/java/helium314/keyboard/latin/WordComposer.java index 098ca96ae4..4866ee5965 100644 --- a/app/src/main/java/helium314/keyboard/latin/WordComposer.java +++ b/app/src/main/java/helium314/keyboard/latin/WordComposer.java @@ -410,6 +410,10 @@ public SuggestedWordInfo getAutoCorrectionOrNull() { return mAutoCorrection; } + public void setResumed(boolean isResumed) { + mIsResumed = isResumed; + } + /** * @return whether we started composing this word by resuming suggestion on an existing string */ 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 2223940aac..eb8a6b2cd7 100644 --- a/app/src/main/java/helium314/keyboard/latin/inputlogic/InputLogic.java +++ b/app/src/main/java/helium314/keyboard/latin/inputlogic/InputLogic.java @@ -1285,6 +1285,7 @@ private void handleBackspaceEvent(final Event event, final InputTransaction inpu if (inputTransaction.getSettingsValues().needsToLookupSuggestions() && inputTransaction.getSettingsValues().mSpacingAndPunctuations.mCurrentLanguageHasSpaces) { restartSuggestionsOnWordTouchedByCursor(inputTransaction.getSettingsValues(), currentKeyboardScript); + mWordComposer.setResumed(false); } return; } @@ -1420,6 +1421,7 @@ private void handleBackspaceEvent(final Event event, final InputTransaction inpu } else if (inputTransaction.getSettingsValues().needsToLookupSuggestions() && inputTransaction.getSettingsValues().mSpacingAndPunctuations.mCurrentLanguageHasSpaces) { restartSuggestionsOnWordTouchedByCursor(inputTransaction.getSettingsValues(), currentKeyboardScript); + mWordComposer.setResumed(false); } } }