Skip to content

Commit b0faaba

Browse files
committed
bugfix: allow only numbers as an input for the baud rate
1 parent eaa1afb commit b0faaba

File tree

2 files changed

+23
-6
lines changed

2 files changed

+23
-6
lines changed

app/src/main/java/org/kabiri/android/usbterminal/ui/setting/SettingValueItem.kt

+22-6
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package org.kabiri.android.usbterminal.ui.setting
33
import androidx.compose.foundation.layout.fillMaxWidth
44
import androidx.compose.foundation.layout.padding
55
import androidx.compose.foundation.text.KeyboardActions
6+
import androidx.compose.foundation.text.KeyboardOptions
67
import androidx.compose.material.icons.Icons
78
import androidx.compose.material.icons.outlined.Check
89
import androidx.compose.material3.Icon
@@ -19,22 +20,25 @@ import androidx.compose.ui.ExperimentalComposeUiApi
1920
import androidx.compose.ui.Modifier
2021
import androidx.compose.ui.platform.LocalSoftwareKeyboardController
2122
import androidx.compose.ui.res.stringResource
23+
import androidx.compose.ui.text.input.KeyboardType
2224
import androidx.compose.ui.tooling.preview.Preview
2325
import androidx.compose.ui.unit.dp
2426
import org.kabiri.android.usbterminal.R
2527
import org.kabiri.android.usbterminal.ui.theme.UsbTerminalTheme
2628
import org.kabiri.android.usbterminal.ui.setting.SaveState.DEFAULT
2729
import org.kabiri.android.usbterminal.ui.setting.SaveState.UNSAVED
2830
import org.kabiri.android.usbterminal.ui.setting.SaveState.SAVED
31+
import org.kabiri.android.usbterminal.ui.setting.SaveState.ERROR
2932

3033
/**
3134
* Enum class to represent the save state of the setting value.
3235
* - DEFAULT: the default state of the setting value when it has not been changed
3336
* - UNSAVED: the setting value has been changed but not saved
3437
* - SAVED: the setting value has been saved
38+
* - ERROR: the setting value is invalid
3539
*/
3640
private enum class SaveState {
37-
DEFAULT, UNSAVED, SAVED
41+
DEFAULT, UNSAVED, SAVED, ERROR,
3842
}
3943

4044
/**
@@ -53,7 +57,7 @@ internal fun SettingValueItem(
5357
var saveState by remember { mutableStateOf(DEFAULT) }
5458
val keyboardController = LocalSoftwareKeyboardController.current
5559

56-
fun onClickSaveNewValue(baudRate: Int) {
60+
fun onClickSaveNewValue() {
5761
inputValue.toIntOrNull()?.let { baudRate ->
5862
onNewValue(baudRate)
5963
saveState = SAVED
@@ -69,6 +73,11 @@ internal fun SettingValueItem(
6973
OutlinedTextField(
7074
value = inputValue,
7175
onValueChange = { value: String ->
76+
val input = value.toIntOrNull()
77+
if (input == null) {
78+
saveState = ERROR
79+
return@OutlinedTextField
80+
}
7281
saveState = if (value.toIntOrNull() != currentValue) UNSAVED else DEFAULT
7382
inputValue = value
7483
},
@@ -82,7 +91,7 @@ internal fun SettingValueItem(
8291
DEFAULT -> {}
8392
UNSAVED -> {
8493
IconButton(onClick = {
85-
onClickSaveNewValue(inputValue.toInt())
94+
onClickSaveNewValue()
8695
}) {
8796
Icon(
8897
imageVector = Icons.Outlined.Check,
@@ -96,14 +105,21 @@ internal fun SettingValueItem(
96105
modifier = Modifier.padding(end = 16.dp)
97106
)
98107
}
108+
ERROR -> {
109+
Text(
110+
text = stringResource(id = R.string.settings_label_error),
111+
modifier = Modifier.padding(end = 16.dp)
112+
)
113+
}
99114
}
100115
},
101-
isError = inputValue.toIntOrNull() == null,
116+
isError = saveState == ERROR,
117+
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number),
102118
keyboardActions = KeyboardActions(
103119
onDone = {
104-
onClickSaveNewValue(inputValue.toInt())
120+
onClickSaveNewValue()
105121
}
106-
)
122+
),
107123
)
108124
}
109125

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

+1
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
<string name="settings_bt_save">Save</string>
2323
<string name="settings_label_baud_rate">Baud Rate</string>
2424
<string name="settings_label_saved">Saved</string>
25+
<string name="settings_label_error">Enter a Number</string>
2526

2627
<!-- Joystick Screen (upcoming) -->
2728
<string name="bt_joystick_forward">Go Forward</string>

0 commit comments

Comments
 (0)