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 cd545d4e1..14d5aa3bb 100644 --- a/app/src/main/java/helium314/keyboard/latin/inputlogic/InputLogic.java +++ b/app/src/main/java/helium314/keyboard/latin/inputlogic/InputLogic.java @@ -1198,7 +1198,7 @@ public final class InputLogic { } inputTransaction.setRequiresUpdateSuggestions(); } else { - if (mLastComposedWord.canRevertCommit()) { + if (mLastComposedWord.canRevertCommit() && inputTransaction.getMSettingsValues().mBackspaceRevertsAutocorrect) { final String lastComposedWord = mLastComposedWord.mTypedWord; revertCommit(inputTransaction); StatsUtils.onRevertAutoCorrect(); diff --git a/app/src/main/java/helium314/keyboard/latin/settings/Defaults.kt b/app/src/main/java/helium314/keyboard/latin/settings/Defaults.kt index 08df4eac0..09c0f88d3 100644 --- a/app/src/main/java/helium314/keyboard/latin/settings/Defaults.kt +++ b/app/src/main/java/helium314/keyboard/latin/settings/Defaults.kt @@ -63,6 +63,7 @@ object Defaults { const val PREF_MORE_AUTO_CORRECTION = false const val PREF_AUTO_CORRECT_THRESHOLD = 0.185f const val PREF_AUTOCORRECT_SHORTCUTS = true + const val PREF_BACKSPACE_REVERTS_AUTOCORRECT = true const val PREF_CENTER_SUGGESTION_TEXT_TO_ENTER = false const val PREF_SHOW_SUGGESTIONS = true const val PREF_ALWAYS_SHOW_SUGGESTIONS = false 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 08bf53b3c..55a80bd87 100644 --- a/app/src/main/java/helium314/keyboard/latin/settings/Settings.java +++ b/app/src/main/java/helium314/keyboard/latin/settings/Settings.java @@ -71,6 +71,7 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang public static final String PREF_MORE_AUTO_CORRECTION = "more_auto_correction"; public static final String PREF_AUTO_CORRECT_THRESHOLD = "auto_correct_threshold"; public static final String PREF_AUTOCORRECT_SHORTCUTS = "autocorrect_shortcuts"; + public static final String PREF_BACKSPACE_REVERTS_AUTOCORRECT = "backspace_reverts_autocorrect"; public static final String PREF_CENTER_SUGGESTION_TEXT_TO_ENTER = "center_suggestion_text_to_enter"; public static final String PREF_SHOW_SUGGESTIONS = "show_suggestions"; public static final String PREF_ALWAYS_SHOW_SUGGESTIONS = "always_show_suggestions"; 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 3430ae042..9fe0a3725 100644 --- a/app/src/main/java/helium314/keyboard/latin/settings/SettingsValues.java +++ b/app/src/main/java/helium314/keyboard/latin/settings/SettingsValues.java @@ -135,6 +135,7 @@ public class SettingsValues { public final boolean mAutoCorrectionEnabledPerUserSettings; public final boolean mAutoCorrectEnabled; public final float mAutoCorrectionThreshold; + public final boolean mBackspaceRevertsAutocorrect; public final int mScoreLimitForAutocorrect; public final boolean mAutoCorrectShortcuts; private final boolean mSuggestionsEnabledPerUserSettings; @@ -199,6 +200,7 @@ public class SettingsValues { mScoreLimitForAutocorrect = (mAutoCorrectionThreshold < 0) ? 600000 // very aggressive : (mAutoCorrectionThreshold < 0.07 ? 800000 : 950000); // aggressive or modest mAutoCorrectShortcuts = prefs.getBoolean(Settings.PREF_AUTOCORRECT_SHORTCUTS, Defaults.PREF_AUTOCORRECT_SHORTCUTS); + mBackspaceRevertsAutocorrect = prefs.getBoolean(Settings.PREF_BACKSPACE_REVERTS_AUTOCORRECT, Defaults.PREF_BACKSPACE_REVERTS_AUTOCORRECT); mBigramPredictionEnabled = prefs.getBoolean(Settings.PREF_BIGRAM_PREDICTIONS, Defaults.PREF_BIGRAM_PREDICTIONS); mSuggestClipboardContent = prefs.getBoolean(Settings.PREF_SUGGEST_CLIPBOARD_CONTENT, Defaults.PREF_SUGGEST_CLIPBOARD_CONTENT); mDoubleSpacePeriodTimeout = 1100; // ms diff --git a/app/src/main/java/helium314/keyboard/settings/screens/TextCorrectionScreen.kt b/app/src/main/java/helium314/keyboard/settings/screens/TextCorrectionScreen.kt index f322e0f00..eea74b919 100644 --- a/app/src/main/java/helium314/keyboard/settings/screens/TextCorrectionScreen.kt +++ b/app/src/main/java/helium314/keyboard/settings/screens/TextCorrectionScreen.kt @@ -59,6 +59,7 @@ fun TextCorrectionScreen( if (autocorrectEnabled) Settings.PREF_MORE_AUTO_CORRECTION else null, if (autocorrectEnabled) Settings.PREF_AUTOCORRECT_SHORTCUTS else null, if (autocorrectEnabled) Settings.PREF_AUTO_CORRECT_THRESHOLD else null, + if (autocorrectEnabled) Settings.PREF_BACKSPACE_REVERTS_AUTOCORRECT else null, Settings.PREF_AUTO_CAP, R.string.settings_category_space, Settings.PREF_KEY_USE_DOUBLE_SPACE_PERIOD, @@ -123,6 +124,9 @@ fun createCorrectionSettings(context: Context) = listOf( // todo: consider making it a slider, and maybe somehow adjust range so we can show % ListPreference(it, items, Defaults.PREF_AUTO_CORRECT_THRESHOLD) }, + Setting(context, Settings.PREF_BACKSPACE_REVERTS_AUTOCORRECT, R.string.backspace_reverts_autocorrect) { + SwitchPreference(it, Defaults.PREF_BACKSPACE_REVERTS_AUTOCORRECT) + }, Setting(context, Settings.PREF_AUTO_CAP, R.string.auto_cap, R.string.auto_cap_summary ) { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index aecf63b66..aa277977c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -128,6 +128,8 @@ Auto-correct shortcuts When enabled shortcuts might be expanded by autocorrect + + Backspace reverts autocorrect Off diff --git a/app/src/test/java/helium314/keyboard/latin/InputLogicTest.kt b/app/src/test/java/helium314/keyboard/latin/InputLogicTest.kt index e6aa80953..e8f2a5c34 100644 --- a/app/src/test/java/helium314/keyboard/latin/InputLogicTest.kt +++ b/app/src/test/java/helium314/keyboard/latin/InputLogicTest.kt @@ -639,13 +639,20 @@ class InputLogicTest { @Test fun `revert autocorrect on delete`() { reset() + setInputType(InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_AUTO_CORRECT) chainInput("hullo") getAutocorrectedWithSpaceAfter("hello", "hullo") + assertEquals("hello ", text) functionalKeyPress(KeyCode.DELETE) assertEquals("hullo", text) - // todo: now we want some way to disable revert on backspace, either per setting or something else - // need to avoid getting into the mLastComposedWord.canRevertCommit() part of handleBackspaceEvent + reset() + setInputType(InputType.TYPE_CLASS_TEXT or InputType.TYPE_TEXT_FLAG_AUTO_CORRECT) + latinIME.prefs().edit { putBoolean(Settings.PREF_BACKSPACE_REVERTS_AUTOCORRECT, false) } + chainInput("hullo") + getAutocorrectedWithSpaceAfter("hello", "hullo") + functionalKeyPress(KeyCode.DELETE) + assertEquals("hello", text) } @Test fun `remove glide typing word on delete`() { @@ -803,7 +810,7 @@ class InputLogicTest { val info = SuggestedWordInfo(suggestion, "", 0, 0, null, 0, 0) val typedInfo = SuggestedWordInfo(typedWord, "", 0, 0, null, 0, 0) val sw = SuggestedWords(ArrayList(listOf(typedInfo, info)), null, typedInfo, false, true, false, 0, 0) - latinIME.mInputLogic.setSuggestedWords(sw) + latinIME.mInputLogic.setSuggestedWords(sw) // this prepares for autocorrect input(' ') checkConnectionConsistency() }