diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/inputlogic/InputLogic.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/inputlogic/InputLogic.java index 333d0957d..920364b9c 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/inputlogic/InputLogic.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/inputlogic/InputLogic.java @@ -996,6 +996,16 @@ public final class InputLogic { // between swappers and strippers), so we should not stay in phantom space state if // the separator is a stripper. Hence the additional test above. mSpaceState = SpaceState.PHANTOM; + } else + // mSpaceState is still SpaceState.NONE, but some characters should typically + // be followed by space. Set phantom space state for such characters if the user + // enabled the setting and was not composing a word. The latter avoids setting + // phantom space state when typing decimal numbers, with the drawback of not + // setting phantom space state after ending a sentence with a non-word. + if (wasComposingWord + && settingsValues.mAutospaceAfterPunctuationEnabled + && settingsValues.isUsuallyFollowedBySpace(codePoint)) { + mSpaceState = SpaceState.PHANTOM; } sendKeyCodePoint(settingsValues, codePoint); diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/Settings.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/Settings.java index 24990a334..135c6ceab 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/Settings.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/Settings.java @@ -94,6 +94,7 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang public static final String PREF_KEYBOARD_HEIGHT_SCALE = "pref_keyboard_height_scale"; public static final String PREF_SPACE_TRACKPAD = "pref_space_trackpad"; public static final String PREF_DELETE_SWIPE = "pref_delete_swipe"; + public static final String PREF_AUTOSPACE_AFTER_PUNCTUATION = "pref_autospace_after_punctuation"; public static final String PREF_ALWAYS_INCOGNITO_MODE = "pref_always_incognito_mode"; public static final String PREF_BIGRAM_PREDICTIONS = "next_word_prediction"; @@ -392,6 +393,10 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang return prefs.getBoolean(PREF_DELETE_SWIPE, true); } + public static boolean readAutospaceAfterPunctuationEnabled(final SharedPreferences prefs) { + return prefs.getBoolean(PREF_AUTOSPACE_AFTER_PUNCTUATION, false); + } + public static boolean readUseFullscreenMode(final Resources res) { return res.getBoolean(R.bool.config_use_fullscreen_mode); } diff --git a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/SettingsValues.java b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/SettingsValues.java index 009018892..e639a6e3d 100644 --- a/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/SettingsValues.java +++ b/app/src/main/java/org/dslul/openboard/inputmethod/latin/settings/SettingsValues.java @@ -80,6 +80,7 @@ public class SettingsValues { public final boolean mBlockPotentiallyOffensive; public final boolean mSpaceTrackpadEnabled; public final boolean mDeleteSwipeEnabled; + public final boolean mAutospaceAfterPunctuationEnabled; public final boolean mClipboardHistoryEnabled; public final long mClipboardHistoryRetentionTime; public final boolean mOneHandedModeEnabled; @@ -237,6 +238,7 @@ public class SettingsValues { } mSpaceTrackpadEnabled = Settings.readSpaceTrackpadEnabled(prefs); mDeleteSwipeEnabled = Settings.readDeleteSwipeEnabled(prefs); + mAutospaceAfterPunctuationEnabled = Settings.readAutospaceAfterPunctuationEnabled(prefs); mClipboardHistoryEnabled = Settings.readClipboardHistoryEnabled(prefs); mClipboardHistoryRetentionTime = Settings.readClipboardHistoryRetentionTime(prefs, res); mOneHandedModeEnabled = Settings.readOneHandedModeEnabled(prefs); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2e0ccc187..c6fd5fa0d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -186,6 +186,10 @@ Space bar trackpad Swipe on the spacebar to move the cursor + + Autospace after punctuation + + Automatically insert space after punctuation when typing a new word Force incognito mode diff --git a/app/src/main/res/xml/prefs_screen_advanced.xml b/app/src/main/res/xml/prefs_screen_advanced.xml index 778671bc6..6d13600b3 100644 --- a/app/src/main/res/xml/prefs_screen_advanced.xml +++ b/app/src/main/res/xml/prefs_screen_advanced.xml @@ -76,6 +76,12 @@ android:summary="@string/delete_swipe_summary" android:defaultValue="true" /> + +