Skip to content

Commit 65aad1a

Browse files
authored
Adding a caps lock mode. Autocapitalize off starts in lowercase. (#93)
* Adding a caps lock mode. Autocapitalize off starts in lowercase. - Fixes #86 * Misnamed lambda
1 parent cf07ab8 commit 65aad1a

14 files changed

+108
-30
lines changed

app/src/main/java/com/dessalines/thumbkey/ComposeKeyboardView.kt

+8-3
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,13 @@ import androidx.lifecycle.LiveData
99
import com.dessalines.thumbkey.db.AppSettings
1010
import com.dessalines.thumbkey.ui.components.keyboard.KeyboardScreen
1111
import com.dessalines.thumbkey.ui.theme.ThumbkeyTheme
12-
import com.dessalines.thumbkey.utils.KeyboardMode
12+
import com.dessalines.thumbkey.utils.getKeyboardMode
13+
import com.dessalines.thumbkey.utils.toBool
1314

1415
@SuppressLint("ViewConstructor")
1516
class ComposeKeyboardView(
1617
context: Context,
17-
private val liveSettings: LiveData<AppSettings>,
18-
private val startMode: KeyboardMode
18+
private val liveSettings: LiveData<AppSettings>
1919
) :
2020
AbstractComposeView
2121
(context) {
@@ -24,6 +24,11 @@ class ComposeKeyboardView(
2424
override fun Content() {
2525
val settings = liveSettings.observeAsState().value
2626

27+
val startMode = getKeyboardMode(
28+
ime = context as IMEService,
29+
autoCapitalize = settings?.autoCapitalize?.toBool() ?: false
30+
)
31+
2732
ThumbkeyTheme(
2833
settings = settings
2934
) {

app/src/main/java/com/dessalines/thumbkey/IMEService.kt

+1-6
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,13 @@
11
package com.dessalines.thumbkey
22

33
import android.inputmethodservice.InputMethodService
4-
import android.util.Log
54
import android.view.View
65
import android.view.inputmethod.EditorInfo
76
import androidx.lifecycle.*
87
import androidx.savedstate.SavedStateRegistry
98
import androidx.savedstate.SavedStateRegistryController
109
import androidx.savedstate.SavedStateRegistryOwner
1110
import androidx.savedstate.setViewTreeSavedStateRegistryOwner
12-
import com.dessalines.thumbkey.utils.TAG
13-
import com.dessalines.thumbkey.utils.getKeyboardMode
1411

1512
class IMEService :
1613
InputMethodService(),
@@ -22,8 +19,7 @@ class IMEService :
2219
val liveSettings = (application as ThumbkeyApplication).appSettingsRepository
2320
.appSettings
2421

25-
val startMode = getKeyboardMode(this)
26-
val view = ComposeKeyboardView(this, liveSettings, startMode)
22+
val view = ComposeKeyboardView(this, liveSettings)
2723
window?.window?.decorView?.let { decorView ->
2824
decorView.setViewTreeLifecycleOwner(this)
2925
decorView.setViewTreeViewModelStoreOwner(this)
@@ -34,7 +30,6 @@ class IMEService :
3430
view.setViewTreeViewModelStoreOwner(this)
3531
view.setViewTreeSavedStateRegistryOwner(this)
3632
}
37-
Log.d(TAG, "Thumbkey initialized to mode: $startMode")
3833
return view
3934
}
4035

app/src/main/java/com/dessalines/thumbkey/keyboards/MessageEase.kt

+6
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.dessalines.thumbkey.keyboards
33
import androidx.compose.material.icons.Icons
44
import androidx.compose.material.icons.outlined.ArrowDropDown
55
import androidx.compose.material.icons.outlined.ArrowDropUp
6+
import androidx.compose.material.icons.outlined.KeyboardCapslock
67
import com.dessalines.thumbkey.utils.ColorVariant
78
import com.dessalines.thumbkey.utils.FontSizeVariant
89
import com.dessalines.thumbkey.utils.KeyAction
@@ -334,6 +335,11 @@ val MESSAGEEASE_EN_SHIFTED = KeyboardC(
334335
display = KeyDisplay.IconDisplay(Icons.Outlined.ArrowDropDown),
335336
action = KeyAction.ToggleShiftMode(false),
336337
color = ColorVariant.MUTED
338+
),
339+
SwipeDirection.TOP to KeyC(
340+
display = KeyDisplay.IconDisplay(Icons.Outlined.KeyboardCapslock),
341+
action = KeyAction.ToggleCapsLock,
342+
color = ColorVariant.MUTED
337343
)
338344
)
339345
),

app/src/main/java/com/dessalines/thumbkey/keyboards/ThumbKeyDEv2.kt

+6
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.dessalines.thumbkey.keyboards
33
import androidx.compose.material.icons.Icons
44
import androidx.compose.material.icons.outlined.ArrowDropDown
55
import androidx.compose.material.icons.outlined.ArrowDropUp
6+
import androidx.compose.material.icons.outlined.KeyboardCapslock
67
import com.dessalines.thumbkey.utils.ColorVariant
78
import com.dessalines.thumbkey.utils.FontSizeVariant
89
import com.dessalines.thumbkey.utils.KeyAction
@@ -358,6 +359,11 @@ val THUMBKEY_DE_V2_SHIFTED = KeyboardC(
358359
display = KeyDisplay.IconDisplay(Icons.Outlined.ArrowDropDown),
359360
action = KeyAction.ToggleShiftMode(false),
360361
color = ColorVariant.MUTED
362+
),
363+
SwipeDirection.TOP to KeyC(
364+
display = KeyDisplay.IconDisplay(Icons.Outlined.KeyboardCapslock),
365+
action = KeyAction.ToggleCapsLock,
366+
color = ColorVariant.MUTED
361367
)
362368
)
363369
),

app/src/main/java/com/dessalines/thumbkey/keyboards/ThumbKeyENv4.kt

+6
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.dessalines.thumbkey.keyboards
33
import androidx.compose.material.icons.Icons
44
import androidx.compose.material.icons.outlined.ArrowDropDown
55
import androidx.compose.material.icons.outlined.ArrowDropUp
6+
import androidx.compose.material.icons.outlined.KeyboardCapslock
67
import com.dessalines.thumbkey.utils.ColorVariant
78
import com.dessalines.thumbkey.utils.FontSizeVariant
89
import com.dessalines.thumbkey.utils.KeyAction
@@ -334,6 +335,11 @@ val THUMBKEY_EN_V4_SHIFTED = KeyboardC(
334335
display = KeyDisplay.IconDisplay(Icons.Outlined.ArrowDropDown),
335336
action = KeyAction.ToggleShiftMode(false),
336337
color = ColorVariant.MUTED
338+
),
339+
SwipeDirection.TOP to KeyC(
340+
display = KeyDisplay.IconDisplay(Icons.Outlined.KeyboardCapslock),
341+
action = KeyAction.ToggleCapsLock,
342+
color = ColorVariant.MUTED
337343
)
338344
)
339345
),

app/src/main/java/com/dessalines/thumbkey/keyboards/ThumbKeyFIv1.kt

+6
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.dessalines.thumbkey.keyboards
33
import androidx.compose.material.icons.Icons
44
import androidx.compose.material.icons.outlined.ArrowDropDown
55
import androidx.compose.material.icons.outlined.ArrowDropUp
6+
import androidx.compose.material.icons.outlined.KeyboardCapslock
67
import com.dessalines.thumbkey.utils.ColorVariant
78
import com.dessalines.thumbkey.utils.FontSizeVariant
89
import com.dessalines.thumbkey.utils.KeyAction
@@ -354,6 +355,11 @@ val THUMBKEY_FI_V1_SHIFTED = KeyboardC(
354355
display = KeyDisplay.IconDisplay(Icons.Outlined.ArrowDropDown),
355356
action = KeyAction.ToggleShiftMode(false),
356357
color = ColorVariant.MUTED
358+
),
359+
SwipeDirection.TOP to KeyC(
360+
display = KeyDisplay.IconDisplay(Icons.Outlined.KeyboardCapslock),
361+
action = KeyAction.ToggleCapsLock,
362+
color = ColorVariant.MUTED
357363
)
358364
)
359365
),

app/src/main/java/com/dessalines/thumbkey/keyboards/ThumbKeyITv1.kt

+6
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.dessalines.thumbkey.keyboards
33
import androidx.compose.material.icons.Icons
44
import androidx.compose.material.icons.outlined.ArrowDropDown
55
import androidx.compose.material.icons.outlined.ArrowDropUp
6+
import androidx.compose.material.icons.outlined.KeyboardCapslock
67
import com.dessalines.thumbkey.utils.ColorVariant
78
import com.dessalines.thumbkey.utils.FontSizeVariant
89
import com.dessalines.thumbkey.utils.KeyAction
@@ -370,6 +371,11 @@ val THUMBKEY_IT_V1_SHIFTED = KeyboardC(
370371
display = KeyDisplay.IconDisplay(Icons.Outlined.ArrowDropDown),
371372
action = KeyAction.ToggleShiftMode(false),
372373
color = ColorVariant.MUTED
374+
),
375+
SwipeDirection.TOP to KeyC(
376+
display = KeyDisplay.IconDisplay(Icons.Outlined.KeyboardCapslock),
377+
action = KeyAction.ToggleCapsLock,
378+
color = ColorVariant.MUTED
373379
)
374380
)
375381
),

app/src/main/java/com/dessalines/thumbkey/keyboards/ThumbKeyPTv1.kt

+8-2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.dessalines.thumbkey.keyboards
33
import androidx.compose.material.icons.Icons
44
import androidx.compose.material.icons.outlined.ArrowDropDown
55
import androidx.compose.material.icons.outlined.ArrowDropUp
6+
import androidx.compose.material.icons.outlined.KeyboardCapslock
67
import com.dessalines.thumbkey.utils.ColorVariant
78
import com.dessalines.thumbkey.utils.FontSizeVariant
89
import com.dessalines.thumbkey.utils.KeyAction
@@ -159,7 +160,7 @@ val THUMBKEY_PT_V1_MAIN = KeyboardC(
159160
action = KeyAction.CommitText("é"),
160161
color = ColorVariant.MUTED
161162
),
162-
SwipeDirection.BOTTOM to KeyC(
163+
SwipeDirection.RIGHT to KeyC(
163164
display = KeyDisplay.TextDisplay("ê"),
164165
action = KeyAction.CommitText("ê"),
165166
color = ColorVariant.MUTED
@@ -410,7 +411,7 @@ val THUMBKEY_PT_V1_SHIFTED = KeyboardC(
410411
display = KeyDisplay.TextDisplay("T"),
411412
action = KeyAction.CommitText("T")
412413
),
413-
SwipeDirection.TOP to KeyC(
414+
SwipeDirection.RIGHT to KeyC(
414415
display = KeyDisplay.TextDisplay("Ê"),
415416
action = KeyAction.CommitText("Ê"),
416417
color = ColorVariant.MUTED
@@ -424,6 +425,11 @@ val THUMBKEY_PT_V1_SHIFTED = KeyboardC(
424425
display = KeyDisplay.IconDisplay(Icons.Outlined.ArrowDropDown),
425426
action = KeyAction.ToggleShiftMode(false),
426427
color = ColorVariant.MUTED
428+
),
429+
SwipeDirection.TOP to KeyC(
430+
display = KeyDisplay.IconDisplay(Icons.Outlined.KeyboardCapslock),
431+
action = KeyAction.ToggleCapsLock,
432+
color = ColorVariant.MUTED
427433
)
428434
)
429435
),

app/src/main/java/com/dessalines/thumbkey/keyboards/ThumbKeyRUv1.kt

+6
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.dessalines.thumbkey.keyboards
33
import androidx.compose.material.icons.Icons
44
import androidx.compose.material.icons.outlined.ArrowDropDown
55
import androidx.compose.material.icons.outlined.ArrowDropUp
6+
import androidx.compose.material.icons.outlined.KeyboardCapslock
67
import com.dessalines.thumbkey.utils.ColorVariant
78
import com.dessalines.thumbkey.utils.FontSizeVariant
89
import com.dessalines.thumbkey.utils.KeyAction
@@ -370,6 +371,11 @@ val THUMBKEY_RU_V1_SHIFTED = KeyboardC(
370371
display = KeyDisplay.IconDisplay(Icons.Outlined.ArrowDropDown),
371372
action = KeyAction.ToggleShiftMode(false),
372373
color = ColorVariant.MUTED
374+
),
375+
SwipeDirection.TOP to KeyC(
376+
display = KeyDisplay.IconDisplay(Icons.Outlined.KeyboardCapslock),
377+
action = KeyAction.ToggleCapsLock,
378+
color = ColorVariant.MUTED
373379
)
374380
)
375381
),

app/src/main/java/com/dessalines/thumbkey/keyboards/ThumbKeyUKv1.kt

+6
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.dessalines.thumbkey.keyboards
33
import androidx.compose.material.icons.Icons
44
import androidx.compose.material.icons.outlined.ArrowDropDown
55
import androidx.compose.material.icons.outlined.ArrowDropUp
6+
import androidx.compose.material.icons.outlined.KeyboardCapslock
67
import com.dessalines.thumbkey.utils.ColorVariant
78
import com.dessalines.thumbkey.utils.FontSizeVariant
89
import com.dessalines.thumbkey.utils.KeyAction
@@ -370,6 +371,11 @@ val THUMBKEY_UK_V1_SHIFTED = KeyboardC(
370371
display = KeyDisplay.IconDisplay(Icons.Outlined.ArrowDropDown),
371372
action = KeyAction.ToggleShiftMode(false),
372373
color = ColorVariant.MUTED
374+
),
375+
SwipeDirection.TOP to KeyC(
376+
display = KeyDisplay.IconDisplay(Icons.Outlined.KeyboardCapslock),
377+
action = KeyAction.ToggleCapsLock,
378+
color = ColorVariant.MUTED
373379
)
374380
)
375381
),

app/src/main/java/com/dessalines/thumbkey/ui/components/keyboard/KeyboardKey.kt

+9-3
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,9 @@ fun KeyboardKey(
6161
keySize: Int,
6262
minSwipeLength: Int,
6363
onToggleShiftMode: (enable: Boolean) -> Unit,
64-
onToggleNumericMode: (enable: Boolean) -> Unit
64+
onToggleNumericMode: (enable: Boolean) -> Unit,
65+
onToggleCapsLock: () -> Unit,
66+
onAutoCapitalize: (enable: Boolean) -> Unit
6567
) {
6668
// Necessary for swipe settings to get updated correctly
6769
val id = key.toString() + animationHelperSpeed + animationSpeed + autoCapitalize + vibrateOnTap + soundOnTap + keySize + minSwipeLength
@@ -133,7 +135,9 @@ fun KeyboardKey(
133135
ctx = ctx,
134136
autoCapitalize = autoCapitalize,
135137
onToggleShiftMode = onToggleShiftMode,
136-
onToggleNumericMode = onToggleNumericMode
138+
onToggleNumericMode = onToggleNumericMode,
139+
onToggleCapsLock = onToggleCapsLock,
140+
onAutoCapitalize = onAutoCapitalize
137141
)
138142
doneKeyAction(scope, action, isDragged, releasedKey, animationHelperSpeed)
139143
}
@@ -159,7 +163,9 @@ fun KeyboardKey(
159163
ctx = ctx,
160164
autoCapitalize = autoCapitalize,
161165
onToggleShiftMode = onToggleShiftMode,
162-
onToggleNumericMode = onToggleNumericMode
166+
onToggleNumericMode = onToggleNumericMode,
167+
onToggleCapsLock = onToggleCapsLock,
168+
onAutoCapitalize = onAutoCapitalize
163169
)
164170
lastAction.value = action
165171

app/src/main/java/com/dessalines/thumbkey/ui/components/keyboard/KeyboardScreen.kt

+24-8
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,10 @@ fun KeyboardScreen(
3939
mutableStateOf(startMode)
4040
}
4141

42+
var capsLock by remember {
43+
mutableStateOf(false)
44+
}
45+
4246
// TODO get rid of this crap
4347
val lastAction = remember { mutableStateOf<KeyAction?>(null) }
4448

@@ -89,20 +93,32 @@ fun KeyboardScreen(
8993
?: DEFAULT_ANIMATION_HELPER_SPEED,
9094
minSwipeLength = settings?.minSwipeLength ?: DEFAULT_MIN_SWIPE_LENGTH,
9195
onToggleShiftMode = { enable ->
92-
if (mode !== KeyboardMode.NUMERIC) {
93-
mode = if (enable) {
94-
KeyboardMode.SHIFTED
95-
} else {
96-
KeyboardMode.MAIN
97-
}
96+
mode = if (enable) {
97+
KeyboardMode.SHIFTED
98+
} else {
99+
capsLock = false
100+
KeyboardMode.MAIN
98101
}
99102
},
100-
onToggleNumericMode = { numeric ->
101-
mode = if (numeric) {
103+
onToggleNumericMode = { enable ->
104+
mode = if (enable) {
102105
KeyboardMode.NUMERIC
103106
} else {
107+
capsLock = false
104108
KeyboardMode.MAIN
105109
}
110+
},
111+
onToggleCapsLock = {
112+
capsLock = !capsLock
113+
},
114+
onAutoCapitalize = { enable ->
115+
if (mode !== KeyboardMode.NUMERIC) {
116+
if (enable) {
117+
mode = KeyboardMode.SHIFTED
118+
} else if (!capsLock) {
119+
mode = KeyboardMode.MAIN
120+
}
121+
}
106122
}
107123
)
108124
}

app/src/main/java/com/dessalines/thumbkey/utils/Types.kt

+1
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ sealed class KeyAction {
4040
class ToggleNumericMode(val enable: Boolean) : KeyAction()
4141
object GotoSettings : KeyAction()
4242
object IMECompleteAction : KeyAction()
43+
object ToggleCapsLock : KeyAction()
4344
}
4445

4546
enum class KeyboardMode {

0 commit comments

Comments
 (0)