diff --git a/app/src/main/java/helium314/keyboard/keyboard/internal/GestureStrokeRecognitionParams.java b/app/src/main/java/helium314/keyboard/keyboard/internal/GestureStrokeRecognitionParams.java index 51352af1f..56630ddf5 100644 --- a/app/src/main/java/helium314/keyboard/keyboard/internal/GestureStrokeRecognitionParams.java +++ b/app/src/main/java/helium314/keyboard/keyboard/internal/GestureStrokeRecognitionParams.java @@ -40,7 +40,7 @@ public final class GestureStrokeRecognitionParams { private GestureStrokeRecognitionParams() { // These parameter values are default and intended for testing. - mStaticTimeThresholdAfterFastTyping = 350; // msec + mStaticTimeThresholdAfterFastTyping = 500; // msec mDetectFastMoveSpeedThreshold = 1.5f; // keyWidth/sec mDynamicThresholdDecayDuration = 450; // msec mDynamicTimeThresholdFrom = 300; // msec diff --git a/app/src/main/java/helium314/keyboard/keyboard/internal/GestureStrokeRecognitionPoints.java b/app/src/main/java/helium314/keyboard/keyboard/internal/GestureStrokeRecognitionPoints.java index 984fc8bcd..f5f7a3364 100644 --- a/app/src/main/java/helium314/keyboard/keyboard/internal/GestureStrokeRecognitionPoints.java +++ b/app/src/main/java/helium314/keyboard/keyboard/internal/GestureStrokeRecognitionPoints.java @@ -6,6 +6,7 @@ package helium314.keyboard.keyboard.internal; +import helium314.keyboard.latin.settings.Settings; import helium314.keyboard.latin.utils.Log; import helium314.keyboard.latin.common.Constants; @@ -104,7 +105,7 @@ public final class GestureStrokeRecognitionPoints { public void addDownEventPoint(final int x, final int y, final int elapsedTimeSinceFirstDown, final int elapsedTimeSinceLastTyping) { reset(); - if (elapsedTimeSinceLastTyping < mRecognitionParams.mStaticTimeThresholdAfterFastTyping) { + if (elapsedTimeSinceLastTyping < Settings.getInstance().getCurrent().mGestureFastTypingCooldown) { mAfterFastTyping = true; } if (DEBUG) { diff --git a/app/src/main/java/helium314/keyboard/latin/settings/GestureSettingsFragment.java b/app/src/main/java/helium314/keyboard/latin/settings/GestureSettingsFragment.java index 79fd8b7ca..225eefdbe 100644 --- a/app/src/main/java/helium314/keyboard/latin/settings/GestureSettingsFragment.java +++ b/app/src/main/java/helium314/keyboard/latin/settings/GestureSettingsFragment.java @@ -7,6 +7,7 @@ package helium314.keyboard.latin.settings; import android.content.SharedPreferences; +import android.content.res.Resources; import android.os.Bundle; import helium314.keyboard.latin.R; @@ -25,6 +26,7 @@ public final class GestureSettingsFragment extends SubScreenFragment { public void onCreate(final Bundle icicle) { super.onCreate(icicle); addPreferencesFromResource(R.xml.prefs_screen_gesture); + setupGestureFastTypingCooldownPref(); refreshSettingsEnablement(); } @@ -38,5 +40,46 @@ public final class GestureSettingsFragment extends SubScreenFragment { setPreferenceVisible(Settings.PREF_GESTURE_PREVIEW_TRAIL, Settings.readGestureInputEnabled(prefs)); setPreferenceVisible(Settings.PREF_GESTURE_FLOATING_PREVIEW_TEXT, Settings.readGestureInputEnabled(prefs)); setPreferenceVisible(Settings.PREF_GESTURE_SPACE_AWARE, Settings.readGestureInputEnabled(prefs)); + setPreferenceVisible(Settings.PREF_GESTURE_FAST_TYPING_COOLDOWN, Settings.readGestureInputEnabled(prefs)); + } + + private void setupGestureFastTypingCooldownPref() { + final SeekBarDialogPreference pref = findPreference( + Settings.PREF_GESTURE_FAST_TYPING_COOLDOWN); + if (pref == null) return; + final SharedPreferences prefs = getSharedPreferences(); + final Resources res = getResources(); + pref.setInterface(new SeekBarDialogPreference.ValueProxy() { + @Override + public void writeValue(final int value, final String key) { + prefs.edit().putInt(key, value).apply(); + } + + @Override + public void writeDefaultValue(final String key) { + prefs.edit().remove(key).apply(); + } + + @Override + public int readValue(final String key) { + return Settings.readGestureFastTypingCooldown(prefs, res); + } + + @Override + public int readDefaultValue(final String key) { + return Settings.readDefaultGestureFastTypingCooldown(res); + } + + @Override + public String getValueText(final int value) { + if (value == 0) { + return res.getString(R.string.gesture_fast_typing_cooldown_instant); + } + return res.getString(R.string.abbreviation_unit_milliseconds, String.valueOf(value)); + } + + @Override + public void feedbackValue(final int value) {} + }); } } 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 f352a742a..ebaa1c7a1 100644 --- a/app/src/main/java/helium314/keyboard/latin/settings/Settings.java +++ b/app/src/main/java/helium314/keyboard/latin/settings/Settings.java @@ -115,6 +115,7 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang public static final String PREF_GESTURE_PREVIEW_TRAIL = "gesture_preview_trail"; public static final String PREF_GESTURE_FLOATING_PREVIEW_TEXT = "gesture_floating_preview_text"; public static final String PREF_GESTURE_SPACE_AWARE = "gesture_space_aware"; + public static final String PREF_GESTURE_FAST_TYPING_COOLDOWN = "gesture_fast_typing_cooldown"; public static final String PREF_SHOW_SETUP_WIZARD_ICON = "show_setup_wizard_icon"; public static final String PREF_USE_CONTACTS = "use_contacts"; public static final String PREFS_LONG_PRESS_SYMBOLS_FOR_NUMPAD = "long_press_symbols_for_numpad"; @@ -364,6 +365,17 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang return res.getInteger(R.integer.config_clipboard_history_retention_time); } + public static int readGestureFastTypingCooldown(final SharedPreferences prefs, final Resources res) { + final int milliseconds = prefs.getInt( + PREF_GESTURE_FAST_TYPING_COOLDOWN, UNDEFINED_PREFERENCE_VALUE_INT); + return (milliseconds != UNDEFINED_PREFERENCE_VALUE_INT) ? milliseconds + : readDefaultGestureFastTypingCooldown(res); + } + + public static int readDefaultGestureFastTypingCooldown(final Resources res) { + return res.getInteger(R.integer.config_gesture_static_time_threshold_after_fast_typing); + } + public static int readHorizontalSpaceSwipe(final SharedPreferences prefs) { return switch (prefs.getString(PREF_SPACE_HORIZONTAL_SWIPE, "none")) { case "move_cursor" -> KeyboardActionListener.SWIPE_MOVE_CURSOR; 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 0b37363f2..d93ce79cd 100644 --- a/app/src/main/java/helium314/keyboard/latin/settings/SettingsValues.java +++ b/app/src/main/java/helium314/keyboard/latin/settings/SettingsValues.java @@ -95,6 +95,7 @@ public class SettingsValues { public final boolean mGestureInputEnabled; public final boolean mGestureTrailEnabled; public final boolean mGestureFloatingPreviewTextEnabled; + public final int mGestureFastTypingCooldown; public final boolean mSlidingKeyInputPreviewEnabled; public final int mKeyLongpressTimeout; public final boolean mEnableEmojiAltPhysicalKey; @@ -199,6 +200,7 @@ public class SettingsValues { mAccount = null; // remove? or can it be useful somewhere? mGestureFloatingPreviewTextEnabled = !mInputAttributes.mDisableGestureFloatingPreviewText && prefs.getBoolean(Settings.PREF_GESTURE_FLOATING_PREVIEW_TEXT, true); + mGestureFastTypingCooldown = Settings.readGestureFastTypingCooldown(prefs, res); mOverrideShowingSuggestions = mInputAttributes.mMayOverrideShowingSuggestions && readSuggestionsOverrideEnabled(prefs); mSuggestionsEnabledPerUserSettings = (mInputAttributes.mShouldShowSuggestions && readSuggestionsEnabled(prefs)) || mOverrideShowingSuggestions; diff --git a/app/src/main/res/values/config-common.xml b/app/src/main/res/values/config-common.xml index b2b52e1d1..ee30cee46 100644 --- a/app/src/main/res/values/config-common.xml +++ b/app/src/main/res/values/config-common.xml @@ -57,6 +57,7 @@ 20 500 + 10 150% diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f76d50917..7966baa35 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -146,8 +146,12 @@ See the suggested word while gesturing Phrase gesture - + Input spaces during gestures by gliding to the space key + + Rapid typing cooldown + + Always start instantly Enable clipboard history diff --git a/app/src/main/res/xml/prefs_screen_gesture.xml b/app/src/main/res/xml/prefs_screen_gesture.xml index 01f0141f6..6e34a6043 100644 --- a/app/src/main/res/xml/prefs_screen_gesture.xml +++ b/app/src/main/res/xml/prefs_screen_gesture.xml @@ -6,6 +6,7 @@ --> +