Skip to content

Commit 2d468b5

Browse files
authored
Adds setting to reset view to letters on input change (#754)
1 parent f5074fe commit 2d468b5

File tree

26 files changed

+183
-4
lines changed

26 files changed

+183
-4
lines changed

app/src/main/java/com/urik/keyboard/UrikInputMethodService.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2530,6 +2530,10 @@ class UrikInputMethodService :
25302530
coordinateStateClear()
25312531
}
25322532

2533+
if (currentSettings.resetToLettersOnDismiss) {
2534+
viewModel.resetToLetters()
2535+
}
2536+
25332537
autofillStateTracker.scheduleClear(serviceScope) {
25342538
swipeKeyboardView?.forceClearAllSuggestions()
25352539
}

app/src/main/java/com/urik/keyboard/settings/KeyboardSettings.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,8 @@ data class KeyboardSettings(
119119
val mergedDictionaries: Boolean = true,
120120
val pauseOnMisspelledWord: Boolean = true,
121121
val autocorrectionEnabled: Boolean = false,
122-
val showNumberHints: Boolean = false
122+
val showNumberHints: Boolean = false,
123+
val resetToLettersOnDismiss: Boolean = true
123124
) {
124125
/**
125126
* Whether word learning is enabled via [learnNewWords] flag.

app/src/main/java/com/urik/keyboard/settings/SettingsEvent.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@ sealed interface SettingsEvent {
6666

6767
data object NumberHintsToggleFailed : Error
6868

69+
data object ResetToLettersOnDismissToggleFailed : Error
70+
6971
data object DeleteWordFailed : Error
7072

7173
data object DeleteAllWordsFailed : Error

app/src/main/java/com/urik/keyboard/settings/SettingsEventHandler.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,10 @@ class SettingsEventHandler(private val context: Context) {
131131
context.getString(R.string.error_update_number_hints)
132132
}
133133

134+
is SettingsEvent.Error.ResetToLettersOnDismissToggleFailed -> {
135+
context.getString(R.string.error_update_reset_to_letters)
136+
}
137+
134138
is SettingsEvent.Error.DeleteWordFailed -> {
135139
context.getString(R.string.error_delete_word)
136140
}

app/src/main/java/com/urik/keyboard/settings/SettingsRepository.kt

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ constructor(
7979
val PAUSE_ON_MISSPELLED_WORD = booleanPreferencesKey("pause_on_misspelled_word")
8080
val AUTOCORRECTION_ENABLED = booleanPreferencesKey("autocorrection_enabled")
8181
val SHOW_NUMBER_HINTS = booleanPreferencesKey("show_number_hints")
82+
val RESET_TO_LETTERS_ON_DISMISS = booleanPreferencesKey("reset_to_letters_on_dismiss")
8283
}
8384

8485
/**
@@ -236,7 +237,8 @@ constructor(
236237
mergedDictionaries = preferences[PreferenceKeys.MERGED_DICTIONARIES] ?: true,
237238
pauseOnMisspelledWord = preferences[PreferenceKeys.PAUSE_ON_MISSPELLED_WORD] ?: true,
238239
autocorrectionEnabled = preferences[PreferenceKeys.AUTOCORRECTION_ENABLED] ?: false,
239-
showNumberHints = preferences[PreferenceKeys.SHOW_NUMBER_HINTS] ?: false
240+
showNumberHints = preferences[PreferenceKeys.SHOW_NUMBER_HINTS] ?: false,
241+
resetToLettersOnDismiss = preferences[PreferenceKeys.RESET_TO_LETTERS_ON_DISMISS] ?: true
240242
).validated()
241243
}.catch { e ->
242244
ErrorLogger.logException(
@@ -624,6 +626,16 @@ constructor(
624626
Result.failure(e)
625627
}
626628

629+
/**
630+
* Updates reset-to-letters-on-dismiss toggle.
631+
*/
632+
suspend fun updateResetToLettersOnDismiss(enabled: Boolean): Result<Unit> = try {
633+
dataStore.edit { it[PreferenceKeys.RESET_TO_LETTERS_ON_DISMISS] = enabled }
634+
Result.success(Unit)
635+
} catch (e: Exception) {
636+
Result.failure(e)
637+
}
638+
627639
/**
628640
* Clears all learned words from database and invalidates caches.
629641
*

app/src/main/java/com/urik/keyboard/settings/typingbehavior/TypingBehaviorFragment.kt

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ class TypingBehaviorFragment : PreferenceFragmentCompat() {
3838

3939
private lateinit var doubleSpacePref: SwitchPreferenceCompat
4040
private lateinit var autoCapitalizationPref: SwitchPreferenceCompat
41+
private lateinit var resetToLettersPref: SwitchPreferenceCompat
4142
private lateinit var swipePref: SwitchPreferenceCompat
4243
private lateinit var spacebarCursorPref: SwitchPreferenceCompat
4344
private lateinit var cursorSpeedPref: ListPreference
@@ -97,6 +98,16 @@ class TypingBehaviorFragment : PreferenceFragmentCompat() {
9798
}
9899
screen.addPreference(autoCapitalizationPref)
99100

101+
resetToLettersPref =
102+
SwitchPreferenceCompat(context).apply {
103+
key = "reset_to_letters_on_dismiss"
104+
isPersistent = false
105+
title = resources.getString(R.string.typing_settings_reset_to_letters)
106+
summaryOn = resources.getString(R.string.typing_settings_reset_to_letters_on)
107+
summaryOff = resources.getString(R.string.typing_settings_reset_to_letters_off)
108+
}
109+
screen.addPreference(resetToLettersPref)
110+
100111
swipePref =
101112
SwitchPreferenceCompat(context).apply {
102113
key = "swipe_enabled"
@@ -199,6 +210,11 @@ class TypingBehaviorFragment : PreferenceFragmentCompat() {
199210
true
200211
}
201212

213+
resetToLettersPref.setOnPreferenceChangeListener { _, newValue ->
214+
viewModel.updateResetToLettersOnDismiss(newValue as Boolean)
215+
true
216+
}
217+
202218
swipePref.setOnPreferenceChangeListener { _, newValue ->
203219
viewModel.updateSwipeEnabled(newValue as Boolean)
204220
true
@@ -249,6 +265,7 @@ class TypingBehaviorFragment : PreferenceFragmentCompat() {
249265
viewModel.uiState.collect { state ->
250266
doubleSpacePref.isChecked = state.doubleSpacePeriod
251267
autoCapitalizationPref.isChecked = state.autoCapitalizationEnabled
268+
resetToLettersPref.isChecked = state.resetToLettersOnDismiss
252269
swipePref.isChecked = state.swipeEnabled
253270
spacebarCursorPref.isChecked = state.spacebarCursorControl
254271
cursorSpeedPref.value = state.cursorSpeed.name

app/src/main/java/com/urik/keyboard/settings/typingbehavior/TypingBehaviorViewModel.kt

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ constructor(private val settingsRepository: SettingsRepository) :
4242
longPressPunctuationMode = settings.longPressPunctuationMode,
4343
longPressDuration = settings.longPressDuration,
4444
hapticFeedback = settings.hapticFeedback,
45-
vibrationStrength = settings.vibrationStrength
45+
vibrationStrength = settings.vibrationStrength,
46+
resetToLettersOnDismiss = settings.resetToLettersOnDismiss
4647
)
4748
}.stateIn(
4849
scope = viewModelScope,
@@ -130,6 +131,14 @@ constructor(private val settingsRepository: SettingsRepository) :
130131
}
131132
}
132133

134+
fun updateResetToLettersOnDismiss(enabled: Boolean) {
135+
viewModelScope.launch {
136+
settingsRepository
137+
.updateResetToLettersOnDismiss(enabled)
138+
.onFailure { _events.emit(SettingsEvent.Error.ResetToLettersOnDismissToggleFailed) }
139+
}
140+
}
141+
133142
private companion object {
134143
const val STOP_TIMEOUT_MILLIS = 5000L
135144
}
@@ -148,5 +157,6 @@ data class TypingBehaviorUiState(
148157
val longPressPunctuationMode: LongPressPunctuationMode = LongPressPunctuationMode.PERIOD,
149158
val longPressDuration: LongPressDuration = LongPressDuration.MEDIUM,
150159
val hapticFeedback: Boolean = true,
151-
val vibrationStrength: Int = 128
160+
val vibrationStrength: Int = 128,
161+
val resetToLettersOnDismiss: Boolean = true
152162
)

app/src/main/java/com/urik/keyboard/ui/keyboard/KeyboardViewModel.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,18 @@ constructor(
8888
startLoadLayout(_state.value.currentMode)
8989
}
9090

91+
/**
92+
* Resets keyboard mode to LETTERS.
93+
*
94+
* No-op if already in LETTERS mode.
95+
*/
96+
fun resetToLetters() {
97+
if (_state.value.currentMode != KeyboardMode.LETTERS) {
98+
startLoadLayout(KeyboardMode.LETTERS)
99+
updateState { it.copy(currentMode = KeyboardMode.LETTERS) }
100+
}
101+
}
102+
91103
fun onEvent(event: KeyboardEvent) {
92104
viewModelScope.launch {
93105
_events.emit(event)

app/src/main/res/values-ar/strings.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,9 @@
122122
<string name="long_press_punctuation_spacebar">المسافة</string>
123123
<string name="long_press_punctuation_period">مفتاح النقطة</string>
124124
<string name="typing_settings_long_press_duration">فترة الضغط المطول</string>
125+
<string name="typing_settings_reset_to_letters">إعادة الضبط إلى عرض الحروف عند تغيير الإدخال</string>
126+
<string name="typing_settings_reset_to_letters_on">تشغيل</string>
127+
<string name="typing_settings_reset_to_letters_off">إيقاف</string>
125128

126129
<!-- Layout & Input Settings -->
127130
<string name="layout_settings_alternative_layout">تخطيط لوحة المفاتيح</string>
@@ -316,6 +319,7 @@
316319
<string name="merged_dictionaries_on">جميع قواميس اللغات المستخدمة في الاقتراحات</string>
317320

318321
<string name="error_update_number_hints">فشل تحديث تلميحات الأرقام</string>
322+
<string name="error_update_reset_to_letters">فشل تحديث إعداد إعادة الضبط إلى الحروف</string>
319323
<string name="layout_settings_show_number_hints">إظهار تلميحات الأرقام</string>
320324
<string name="layout_settings_number_hints_on">تشغيل</string>
321325
<string name="layout_settings_number_hints_off">إيقاف</string>

app/src/main/res/values-ca/strings.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,9 @@
115115
<string name="long_press_punctuation_spacebar">Barra espaiadora</string>
116116
<string name="long_press_punctuation_period">Tecla del període</string>
117117
<string name="typing_settings_long_press_duration">Duració de pulsació llarga</string>
118+
<string name="typing_settings_reset_to_letters">Restableix a la vista de lletres en canviar l\'entrada</string>
119+
<string name="typing_settings_reset_to_letters_on">Activat</string>
120+
<string name="typing_settings_reset_to_letters_off">Desactivat</string>
118121
<!-- Layout & Input Settings -->
119122
<string name="layout_settings_alternative_layout">Disseny del teclat</string>
120123
<string name="layout_settings_adaptive_modes_enabled">Modes adaptatius del teclat</string>
@@ -284,6 +287,7 @@
284287
<string name="clipboard_item_unpin">Deixar de fixar l\'element al porta-retalls</string>
285288
<string name="clipboard_item_delete">Eliminar l\'element del porta-retalls</string>
286289
<string name="error_update_number_hints">Ha fallat l\'actualització dels suggeriments numèrics</string>
290+
<string name="error_update_reset_to_letters">Ha fallat l\'actualització del paràmetre de restabliment a les lletres</string>
287291
<string name="layout_settings_show_number_hints">Mostrar suggeriments numèrics</string>
288292
<string name="layout_settings_number_hints_on">Activat</string>
289293
<string name="layout_settings_number_hints_off">Desactivat</string>

0 commit comments

Comments
 (0)