Skip to content

Commit f456eea

Browse files
committed
Request focus after adding an answer
1 parent 21e25e9 commit f456eea

File tree

1 file changed

+12
-6
lines changed
  • features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create

1 file changed

+12
-6
lines changed

features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/CreatePollView.kt

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ import androidx.compose.material3.ExperimentalMaterial3Api
3434
import androidx.compose.runtime.Composable
3535
import androidx.compose.runtime.LaunchedEffect
3636
import androidx.compose.runtime.remember
37+
import androidx.compose.runtime.rememberCoroutineScope
3738
import androidx.compose.ui.Modifier
3839
import androidx.compose.ui.focus.FocusRequester
3940
import androidx.compose.ui.focus.focusRequester
@@ -63,13 +64,17 @@ import io.element.android.libraries.designsystem.theme.components.TopAppBar
6364
import io.element.android.libraries.matrix.api.poll.PollKind
6465
import io.element.android.libraries.theme.ElementTheme
6566
import io.element.android.libraries.ui.strings.CommonStrings
67+
import kotlinx.coroutines.Dispatchers
68+
import kotlinx.coroutines.launch
6669

6770
@OptIn(ExperimentalMaterial3Api::class)
6871
@Composable
6972
fun CreatePollView(
7073
state: CreatePollState,
7174
modifier: Modifier = Modifier,
7275
) {
76+
val coroutineScope = rememberCoroutineScope()
77+
7378
val navBack = { state.eventSink(CreatePollEvents.ConfirmNavBack) }
7479
BackHandler(onBack = navBack)
7580
if (state.showConfirmation) ConfirmationDialog(
@@ -142,7 +147,6 @@ fun CreatePollView(
142147
}
143148
itemsIndexed(state.answers) { index, answer ->
144149
val isLastItem = index == state.answers.size - 1
145-
val hasAdditionalOptions = state.answers.size > 2
146150
ListItem(
147151
headlineContent = {
148152
OutlinedTextField(
@@ -170,10 +174,6 @@ fun CreatePollView(
170174
},
171175
style = if (answer.canDelete) ListItemStyle.Destructive else ListItemStyle.Default,
172176
)
173-
LaunchedEffect(isLastItem, hasAdditionalOptions) {
174-
lazyListState.animateScrollToItem(state.answers.size + 1)
175-
if (isLastItem && hasAdditionalOptions) answerFocusRequester.requestFocus()
176-
}
177177
}
178178
if (state.canAddAnswer) {
179179
item {
@@ -183,7 +183,13 @@ fun CreatePollView(
183183
iconSource = IconSource.Vector(Icons.Default.Add),
184184
),
185185
style = ListItemStyle.Primary,
186-
onClick = { state.eventSink(CreatePollEvents.AddAnswer) },
186+
onClick = {
187+
state.eventSink(CreatePollEvents.AddAnswer)
188+
coroutineScope.launch(Dispatchers.Main) {
189+
lazyListState.animateScrollToItem(state.answers.size + 1)
190+
answerFocusRequester.requestFocus()
191+
}
192+
},
187193
)
188194
}
189195
}

0 commit comments

Comments
 (0)