Skip to content

Commit f296c8f

Browse files
committed
ux: improve IME actions for text fields with FocusRequestor
1 parent e896244 commit f296c8f

File tree

2 files changed

+22
-22
lines changed

2 files changed

+22
-22
lines changed

app/src/main/java/io/shubham0204/smollmandroid/ui/screens/manage_tasks/CreateTaskDialog.kt

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,10 @@ import androidx.compose.runtime.remember
4343
import androidx.compose.runtime.setValue
4444
import androidx.compose.ui.Alignment
4545
import androidx.compose.ui.Modifier
46-
import androidx.compose.ui.focus.FocusDirection
46+
import androidx.compose.ui.focus.FocusRequester
47+
import androidx.compose.ui.focus.focusRequester
4748
import androidx.compose.ui.graphics.Color
48-
import androidx.compose.ui.platform.LocalFocusManager
49+
import androidx.compose.ui.platform.LocalSoftwareKeyboardController
4950
import androidx.compose.ui.res.stringResource
5051
import androidx.compose.ui.text.input.ImeAction
5152
import androidx.compose.ui.text.input.KeyboardCapitalization
@@ -64,7 +65,8 @@ fun CreateTaskDialog(viewModel: TasksViewModel) {
6465
var selectedModel by remember { mutableStateOf<LLMModel?>(null) }
6566
var isModelListDialogVisible by remember { mutableStateOf(false) }
6667
val modelsList = viewModel.modelsRepository.getAvailableModelsList()
67-
val focusManager = LocalFocusManager.current
68+
val (focusRequestor) = FocusRequester.createRefs()
69+
val keyboardController = LocalSoftwareKeyboardController.current
6870
LaunchedEffect(showCreateTaskDialog) {
6971
taskName = ""
7072
systemPrompt = ""
@@ -92,7 +94,7 @@ fun CreateTaskDialog(viewModel: TasksViewModel) {
9294
)
9395
Spacer(modifier = Modifier.height(16.dp))
9496
TextField(
95-
modifier = Modifier.fillMaxWidth(),
97+
modifier = Modifier.fillMaxWidth().padding(bottom = 8.dp),
9698
value = taskName,
9799
onValueChange = { taskName = it },
98100
label = { Text(stringResource(R.string.task_create_task_name)) },
@@ -104,32 +106,29 @@ fun CreateTaskDialog(viewModel: TasksViewModel) {
104106
keyboardActions =
105107
KeyboardActions(
106108
onNext = {
107-
focusManager.moveFocus(FocusDirection.Down)
109+
focusRequestor.requestFocus()
108110
},
109111
),
110112
)
111-
Spacer(modifier = Modifier.height(8.dp))
112113

113114
TextField(
114-
modifier = Modifier.fillMaxWidth(),
115+
modifier = Modifier.fillMaxWidth().padding(bottom = 16.dp).focusRequester(focusRequestor),
115116
value = systemPrompt,
116117
onValueChange = { systemPrompt = it },
117118
label = { Text(stringResource(R.string.task_create_task_sys_prompt)) },
118119
keyboardOptions =
119120
KeyboardOptions.Default.copy(
120121
capitalization = KeyboardCapitalization.Sentences,
121-
imeAction = ImeAction.Next,
122+
imeAction = ImeAction.Done,
122123
),
123124
keyboardActions =
124125
KeyboardActions(
125-
onNext = {
126-
focusManager.moveFocus(FocusDirection.Down)
126+
onDone = {
127+
keyboardController?.hide()
127128
},
128129
),
129130
)
130131

131-
Spacer(modifier = Modifier.height(16.dp))
132-
133132
Text(
134133
modifier =
135134
Modifier

app/src/main/java/io/shubham0204/smollmandroid/ui/screens/manage_tasks/EditTaskDialog.kt

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,10 @@ import androidx.compose.runtime.remember
4343
import androidx.compose.runtime.setValue
4444
import androidx.compose.ui.Alignment
4545
import androidx.compose.ui.Modifier
46-
import androidx.compose.ui.focus.FocusDirection
46+
import androidx.compose.ui.focus.FocusRequester
47+
import androidx.compose.ui.focus.focusRequester
4748
import androidx.compose.ui.graphics.Color
48-
import androidx.compose.ui.platform.LocalFocusManager
49+
import androidx.compose.ui.platform.LocalSoftwareKeyboardController
4950
import androidx.compose.ui.res.stringResource
5051
import androidx.compose.ui.text.input.ImeAction
5152
import androidx.compose.ui.text.input.KeyboardCapitalization
@@ -66,7 +67,8 @@ fun EditTaskDialog(viewModel: TasksViewModel) {
6667
}
6768
var isModelListDialogVisible by remember { mutableStateOf(false) }
6869
val modelsList = viewModel.modelsRepository.getAvailableModelsList()
69-
val focusManager = LocalFocusManager.current
70+
val (focusRequestor) = FocusRequester.createRefs()
71+
val keyboardController = LocalSoftwareKeyboardController.current
7072
LaunchedEffect(selectedTask) {
7173
taskName = task.name
7274
systemPrompt = task.systemPrompt
@@ -94,7 +96,7 @@ fun EditTaskDialog(viewModel: TasksViewModel) {
9496
)
9597
Spacer(modifier = Modifier.height(16.dp))
9698
TextField(
97-
modifier = Modifier.fillMaxWidth(),
99+
modifier = Modifier.fillMaxWidth().padding(bottom = 8.dp),
98100
value = taskName,
99101
onValueChange = { taskName = it },
100102
label = { Text(stringResource(R.string.task_create_task_name)) },
@@ -106,26 +108,25 @@ fun EditTaskDialog(viewModel: TasksViewModel) {
106108
keyboardActions =
107109
KeyboardActions(
108110
onNext = {
109-
focusManager.moveFocus(FocusDirection.Down)
111+
focusRequestor.requestFocus()
110112
},
111113
),
112114
)
113-
Spacer(modifier = Modifier.height(8.dp))
114115

115116
TextField(
116-
modifier = Modifier.fillMaxWidth(),
117+
modifier = Modifier.fillMaxWidth().padding(bottom = 16.dp).focusRequester(focusRequestor),
117118
value = systemPrompt,
118119
onValueChange = { systemPrompt = it },
119120
label = { Text(stringResource(R.string.task_create_task_sys_prompt)) },
120121
keyboardOptions =
121122
KeyboardOptions.Default.copy(
122123
capitalization = KeyboardCapitalization.Sentences,
123-
imeAction = ImeAction.Next,
124+
imeAction = ImeAction.Done,
124125
),
125126
keyboardActions =
126127
KeyboardActions(
127-
onNext = {
128-
focusManager.moveFocus(FocusDirection.Down)
128+
onDone = {
129+
keyboardController?.hide()
129130
},
130131
),
131132
)

0 commit comments

Comments
 (0)