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 @@
-->
+