Option to customize start lag for gestures during fast typing (#894)

fixes #882
This commit is contained in:
Devy Ballard 2024-06-26 13:00:06 -06:00 committed by GitHub
parent 4aac81391e
commit efd7d53ca1
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
8 changed files with 72 additions and 3 deletions

View file

@ -40,7 +40,7 @@ public final class GestureStrokeRecognitionParams {
private GestureStrokeRecognitionParams() { private GestureStrokeRecognitionParams() {
// These parameter values are default and intended for testing. // These parameter values are default and intended for testing.
mStaticTimeThresholdAfterFastTyping = 350; // msec mStaticTimeThresholdAfterFastTyping = 500; // msec
mDetectFastMoveSpeedThreshold = 1.5f; // keyWidth/sec mDetectFastMoveSpeedThreshold = 1.5f; // keyWidth/sec
mDynamicThresholdDecayDuration = 450; // msec mDynamicThresholdDecayDuration = 450; // msec
mDynamicTimeThresholdFrom = 300; // msec mDynamicTimeThresholdFrom = 300; // msec

View file

@ -6,6 +6,7 @@
package helium314.keyboard.keyboard.internal; package helium314.keyboard.keyboard.internal;
import helium314.keyboard.latin.settings.Settings;
import helium314.keyboard.latin.utils.Log; import helium314.keyboard.latin.utils.Log;
import helium314.keyboard.latin.common.Constants; 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, public void addDownEventPoint(final int x, final int y, final int elapsedTimeSinceFirstDown,
final int elapsedTimeSinceLastTyping) { final int elapsedTimeSinceLastTyping) {
reset(); reset();
if (elapsedTimeSinceLastTyping < mRecognitionParams.mStaticTimeThresholdAfterFastTyping) { if (elapsedTimeSinceLastTyping < Settings.getInstance().getCurrent().mGestureFastTypingCooldown) {
mAfterFastTyping = true; mAfterFastTyping = true;
} }
if (DEBUG) { if (DEBUG) {

View file

@ -7,6 +7,7 @@
package helium314.keyboard.latin.settings; package helium314.keyboard.latin.settings;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.content.res.Resources;
import android.os.Bundle; import android.os.Bundle;
import helium314.keyboard.latin.R; import helium314.keyboard.latin.R;
@ -25,6 +26,7 @@ public final class GestureSettingsFragment extends SubScreenFragment {
public void onCreate(final Bundle icicle) { public void onCreate(final Bundle icicle) {
super.onCreate(icicle); super.onCreate(icicle);
addPreferencesFromResource(R.xml.prefs_screen_gesture); addPreferencesFromResource(R.xml.prefs_screen_gesture);
setupGestureFastTypingCooldownPref();
refreshSettingsEnablement(); refreshSettingsEnablement();
} }
@ -38,5 +40,46 @@ public final class GestureSettingsFragment extends SubScreenFragment {
setPreferenceVisible(Settings.PREF_GESTURE_PREVIEW_TRAIL, Settings.readGestureInputEnabled(prefs)); setPreferenceVisible(Settings.PREF_GESTURE_PREVIEW_TRAIL, Settings.readGestureInputEnabled(prefs));
setPreferenceVisible(Settings.PREF_GESTURE_FLOATING_PREVIEW_TEXT, 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_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) {}
});
} }
} }

View file

@ -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_PREVIEW_TRAIL = "gesture_preview_trail";
public static final String PREF_GESTURE_FLOATING_PREVIEW_TEXT = "gesture_floating_preview_text"; 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_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_SHOW_SETUP_WIZARD_ICON = "show_setup_wizard_icon";
public static final String PREF_USE_CONTACTS = "use_contacts"; public static final String PREF_USE_CONTACTS = "use_contacts";
public static final String PREFS_LONG_PRESS_SYMBOLS_FOR_NUMPAD = "long_press_symbols_for_numpad"; 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); 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) { public static int readHorizontalSpaceSwipe(final SharedPreferences prefs) {
return switch (prefs.getString(PREF_SPACE_HORIZONTAL_SWIPE, "none")) { return switch (prefs.getString(PREF_SPACE_HORIZONTAL_SWIPE, "none")) {
case "move_cursor" -> KeyboardActionListener.SWIPE_MOVE_CURSOR; case "move_cursor" -> KeyboardActionListener.SWIPE_MOVE_CURSOR;

View file

@ -95,6 +95,7 @@ public class SettingsValues {
public final boolean mGestureInputEnabled; public final boolean mGestureInputEnabled;
public final boolean mGestureTrailEnabled; public final boolean mGestureTrailEnabled;
public final boolean mGestureFloatingPreviewTextEnabled; public final boolean mGestureFloatingPreviewTextEnabled;
public final int mGestureFastTypingCooldown;
public final boolean mSlidingKeyInputPreviewEnabled; public final boolean mSlidingKeyInputPreviewEnabled;
public final int mKeyLongpressTimeout; public final int mKeyLongpressTimeout;
public final boolean mEnableEmojiAltPhysicalKey; public final boolean mEnableEmojiAltPhysicalKey;
@ -199,6 +200,7 @@ public class SettingsValues {
mAccount = null; // remove? or can it be useful somewhere? mAccount = null; // remove? or can it be useful somewhere?
mGestureFloatingPreviewTextEnabled = !mInputAttributes.mDisableGestureFloatingPreviewText mGestureFloatingPreviewTextEnabled = !mInputAttributes.mDisableGestureFloatingPreviewText
&& prefs.getBoolean(Settings.PREF_GESTURE_FLOATING_PREVIEW_TEXT, true); && prefs.getBoolean(Settings.PREF_GESTURE_FLOATING_PREVIEW_TEXT, true);
mGestureFastTypingCooldown = Settings.readGestureFastTypingCooldown(prefs, res);
mOverrideShowingSuggestions = mInputAttributes.mMayOverrideShowingSuggestions && readSuggestionsOverrideEnabled(prefs); mOverrideShowingSuggestions = mInputAttributes.mMayOverrideShowingSuggestions && readSuggestionsOverrideEnabled(prefs);
mSuggestionsEnabledPerUserSettings = (mInputAttributes.mShouldShowSuggestions && readSuggestionsEnabled(prefs)) mSuggestionsEnabledPerUserSettings = (mInputAttributes.mShouldShowSuggestions && readSuggestionsEnabled(prefs))
|| mOverrideShowingSuggestions; || mOverrideShowingSuggestions;

View file

@ -57,6 +57,7 @@
<integer name="config_gesture_trail_update_interval">20</integer> <integer name="config_gesture_trail_update_interval">20</integer>
<!-- Static threshold for gesture after fast typing (msec) --> <!-- Static threshold for gesture after fast typing (msec) -->
<integer name="config_gesture_static_time_threshold_after_fast_typing">500</integer> <integer name="config_gesture_static_time_threshold_after_fast_typing">500</integer>
<integer name="config_gesture_fast_typing_cooldown_step">10</integer>
<!-- Static threshold for starting gesture detection (keyWidth%/sec) --> <!-- Static threshold for starting gesture detection (keyWidth%/sec) -->
<fraction name="config_gesture_detect_fast_move_speed_threshold">150%</fraction> <fraction name="config_gesture_detect_fast_move_speed_threshold">150%</fraction>
<!-- Dynamic threshold for gesture after fast typing (msec) --> <!-- Dynamic threshold for gesture after fast typing (msec) -->

View file

@ -146,8 +146,12 @@
<string name="gesture_floating_preview_text_summary">See the suggested word while gesturing</string> <string name="gesture_floating_preview_text_summary">See the suggested word while gesturing</string>
<!-- Option to enable space aware gesture input. The user can input multiple words by gliding through the space key during a gesture input. [CHAR LIMIT=30]--> <!-- Option to enable space aware gesture input. The user can input multiple words by gliding through the space key during a gesture input. [CHAR LIMIT=30]-->
<string name="gesture_space_aware">Phrase gesture</string> <string name="gesture_space_aware">Phrase gesture</string>
<!-- Description for "gesture_space_aware" option. The user can input multiple words by gliding through the space key during a gesture input.[CHAR LIMIT=65]--> <!-- Description for "gesture_space_aware" option. The user can input multiple words by gliding through the space key during a gesture input. [CHAR LIMIT=65]-->
<string name="gesture_space_aware_summary">Input spaces during gestures by gliding to the space key</string> <string name="gesture_space_aware_summary">Input spaces during gestures by gliding to the space key</string>
<!-- Title of the setting to adjust the fast-typing gesture cooldown [CHAR LIMIT=35]-->
<string name="gesture_fast_typing_cooldown">Rapid typing cooldown</string>
<!-- The text that represents no cooldown [CHAR LIMIT=25]-->
<string name="gesture_fast_typing_cooldown_instant">Always start instantly</string>
<!-- Preferences item for enabling clipboard history --> <!-- Preferences item for enabling clipboard history -->
<string name="enable_clipboard_history">Enable clipboard history</string> <string name="enable_clipboard_history">Enable clipboard history</string>
<!-- Description for enabling/disabling clipboard history mentioning that if disabled, clipboard content is pasted --> <!-- Description for enabling/disabling clipboard history mentioning that if disabled, clipboard content is pasted -->

View file

@ -6,6 +6,7 @@
--> -->
<PreferenceScreen <PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:latin="http://schemas.android.com/apk/res-auto"
android:title="@string/settings_screen_gesture" android:title="@string/settings_screen_gesture"
android:key="screen_gesture"> android:key="screen_gesture">
<SwitchPreference <SwitchPreference
@ -31,4 +32,9 @@
android:summary="@string/gesture_space_aware_summary" android:summary="@string/gesture_space_aware_summary"
android:defaultValue="false" android:defaultValue="false"
android:persistent="true" /> android:persistent="true" />
<helium314.keyboard.latin.settings.SeekBarDialogPreference
android:key="gesture_fast_typing_cooldown"
android:title="@string/gesture_fast_typing_cooldown"
latin:maxValue="@integer/config_gesture_static_time_threshold_after_fast_typing"
latin:stepValue="@integer/config_gesture_fast_typing_cooldown_step" />
</PreferenceScreen> </PreferenceScreen>