diff --git a/app/src/main/java/helium314/keyboard/latin/LatinIME.java b/app/src/main/java/helium314/keyboard/latin/LatinIME.java
index 82e19e79..bafd0f3f 100644
--- a/app/src/main/java/helium314/keyboard/latin/LatinIME.java
+++ b/app/src/main/java/helium314/keyboard/latin/LatinIME.java
@@ -353,6 +353,10 @@ public class LatinIME extends InputMethodService implements
return hasMessages(MSG_UPDATE_SUGGESTION_STRIP);
}
+ public boolean hasPendingResumeSuggestions() {
+ return hasMessages(MSG_RESUME_SUGGESTIONS);
+ }
+
public boolean hasPendingReopenDictionaries() {
return hasMessages(MSG_REOPEN_DICTIONARIES);
}
@@ -989,7 +993,9 @@ public class LatinIME extends InputMethodService implements
// initialSelStart and initialSelEnd sometimes are lying. Make a best effort to
// work around this bug.
mInputLogic.mConnection.tryFixLyingCursorPosition();
- mHandler.postResumeSuggestions(true /* shouldDelay */);
+ if (mInputLogic.mConnection.isCursorTouchingWord(currentSettingsValues.mSpacingAndPunctuations, true)) {
+ mHandler.postResumeSuggestions(true /* shouldDelay */);
+ }
needToCallLoadKeyboardLater = false;
}
} else {
@@ -1020,9 +1026,13 @@ public class LatinIME extends InputMethodService implements
}
// This will set the punctuation suggestions if next word suggestion is off;
// otherwise it will clear the suggestion strip.
- setNeutralSuggestionStrip();
-
- mHandler.cancelUpdateSuggestionStrip();
+ if (!mHandler.hasPendingResumeSuggestions()) {
+ mHandler.cancelUpdateSuggestionStrip();
+ setNeutralSuggestionStrip();
+ if (hasSuggestionStripView() && currentSettingsValues.mAutoShowToolbar) {
+ mSuggestionStripView.setToolbarVisibility(true);
+ }
+ }
mainKeyboardView.setMainDictionaryAvailability(mDictionaryFacilitator.hasAtLeastOneInitializedMainDictionary());
mainKeyboardView.setKeyPreviewPopupEnabled(currentSettingsValues.mKeyPreviewPopupOn);
@@ -1593,6 +1603,10 @@ public class LatinIME extends InputMethodService implements
|| noSuggestionsFromDictionaries) {
mSuggestionStripView.setSuggestions(suggestedWords,
mRichImm.getCurrentSubtype().isRtlSubtype());
+ // Auto hide the toolbar if dictionary suggestions are available
+ if (currentSettingsValues.mAutoHideToolbar && !noSuggestionsFromDictionaries) {
+ mSuggestionStripView.setToolbarVisibility(false);
+ }
}
}
@@ -1634,6 +1648,8 @@ public class LatinIME extends InputMethodService implements
// This will show either an empty suggestion strip (if prediction is enabled) or
// punctuation suggestions (if it's disabled).
+ // The toolbar will be shown automatically if the relevant setting is enabled
+ // and there is a selection of text or it's the start of a line.
@Override
public void setNeutralSuggestionStrip() {
final SettingsValues currentSettings = mSettings.getCurrent();
@@ -1641,6 +1657,14 @@ public class LatinIME extends InputMethodService implements
? SuggestedWords.getEmptyInstance()
: currentSettings.mSpacingAndPunctuations.mSuggestPuncList;
setSuggestedWords(neutralSuggestions);
+ if (hasSuggestionStripView() && currentSettings.mAutoShowToolbar) {
+ final int codePointBeforeCursor = mInputLogic.mConnection.getCodePointBeforeCursor();
+ if (mInputLogic.mConnection.hasSelection()
+ || codePointBeforeCursor == Constants.NOT_A_CODE
+ || codePointBeforeCursor == Constants.CODE_ENTER) {
+ mSuggestionStripView.setToolbarVisibility(true);
+ }
+ }
}
@Override
diff --git a/app/src/main/java/helium314/keyboard/latin/settings/Settings.java b/app/src/main/java/helium314/keyboard/latin/settings/Settings.java
index 9940127d..59a214e9 100644
--- a/app/src/main/java/helium314/keyboard/latin/settings/Settings.java
+++ b/app/src/main/java/helium314/keyboard/latin/settings/Settings.java
@@ -149,6 +149,8 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang
public static final String PREF_QUICK_PIN_TOOLBAR_KEYS = "quick_pin_toolbar_keys";
public static final String PREF_PINNED_TOOLBAR_KEYS = "pinned_toolbar_keys";
public static final String PREF_TOOLBAR_KEYS = "toolbar_keys";
+ public static final String PREF_AUTO_SHOW_TOOLBAR = "auto_show_toolbar";
+ public static final String PREF_AUTO_HIDE_TOOLBAR = "auto_hide_toolbar";
public static final String PREF_CLIPBOARD_TOOLBAR_KEYS = "clipboard_toolbar_keys";
// Emoji
diff --git a/app/src/main/java/helium314/keyboard/latin/settings/SettingsValues.java b/app/src/main/java/helium314/keyboard/latin/settings/SettingsValues.java
index d00c5b60..58dc792a 100644
--- a/app/src/main/java/helium314/keyboard/latin/settings/SettingsValues.java
+++ b/app/src/main/java/helium314/keyboard/latin/settings/SettingsValues.java
@@ -107,6 +107,8 @@ public class SettingsValues {
public final float mKeyboardHeightScale;
public final boolean mUrlDetectionEnabled;
public final float mBottomPaddingScale;
+ public final boolean mAutoShowToolbar;
+ public final boolean mAutoHideToolbar;
// From the input box
@NonNull
@@ -241,6 +243,8 @@ public class SettingsValues {
mSpacingAndPunctuations = new SpacingAndPunctuations(res, mUrlDetectionEnabled);
mBottomPaddingScale = prefs.getFloat(Settings.PREF_BOTTOM_PADDING_SCALE, DEFAULT_SIZE_SCALE);
mLongPressSymbolsForNumpad = prefs.getBoolean(Settings.PREFS_LONG_PRESS_SYMBOLS_FOR_NUMPAD, false);
+ mAutoShowToolbar = prefs.getBoolean(Settings.PREF_AUTO_SHOW_TOOLBAR, true);
+ mAutoHideToolbar = readSuggestionsEnabled(prefs) && prefs.getBoolean(Settings.PREF_AUTO_HIDE_TOOLBAR, true);
mHasCustomFunctionalLayout = CustomLayoutUtilsKt.hasCustomFunctionalLayout(selectedSubtype, context);
}
diff --git a/app/src/main/java/helium314/keyboard/latin/suggestions/SuggestionStripView.java b/app/src/main/java/helium314/keyboard/latin/suggestions/SuggestionStripView.java
index c63cd2d6..311781fe 100644
--- a/app/src/main/java/helium314/keyboard/latin/suggestions/SuggestionStripView.java
+++ b/app/src/main/java/helium314/keyboard/latin/suggestions/SuggestionStripView.java
@@ -257,7 +257,7 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick
? km.isDeviceLocked()
: km.isKeyguardLocked();
mToolbarExpandKey.setOnClickListener(hideToolbarKeys ? null : this);
- mPinnedKeys.setVisibility(hideToolbarKeys ? GONE : VISIBLE);
+ mPinnedKeys.setVisibility(hideToolbarKeys ? GONE : mSuggestionsStrip.getVisibility());
isInlineAutofillSuggestionsVisible = false;
}
@@ -285,6 +285,8 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick
clear();
isInlineAutofillSuggestionsVisible = true;
mSuggestionsStrip.addView(view);
+ if (Settings.getInstance().getCurrent().mAutoHideToolbar)
+ setToolbarVisibility(false);
}
@Override
@@ -482,6 +484,10 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick
mStartIndexOfMoreSuggestions = mLayoutHelper.layoutAndReturnStartIndexOfMoreSuggestions(
getContext(), mSuggestedWords, mSuggestionsStrip, SuggestionStripView.this);
mStripVisibilityGroup.showSuggestionsStrip();
+ // Show the toolbar if no suggestions are left and the "Auto show toolbar" setting is enabled
+ if (mSuggestedWords.isEmpty() && Settings.getInstance().getCurrent().mAutoShowToolbar){
+ setToolbarVisibility(true);
+ }
}
boolean showMoreSuggestions() {
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 21806019..f0d55bfc 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -830,6 +830,14 @@ New dictionary:
Variable toolbar direction
Reverse direction when a right-to-left keyboard subtype is selected
+
+ Auto show toolbar
+
+ Show the toolbar if input starts or text is selected
+
+ Auto hide toolbar
+
+ Hide the toolbar when suggestions become available
Content copied
diff --git a/app/src/main/res/xml/prefs_screen_correction.xml b/app/src/main/res/xml/prefs_screen_correction.xml
index 0edb993c..4b0f9aea 100644
--- a/app/src/main/res/xml/prefs_screen_correction.xml
+++ b/app/src/main/res/xml/prefs_screen_correction.xml
@@ -108,6 +108,20 @@
android:defaultValue="@bool/config_center_suggestion_text_to_enter"
android:persistent="true" />
+
+
+
+