Browse Source

Request focus after adding an answer

pull/1294/head
Jorge Martín 1 year ago
parent
commit
f456eea0e4
  1. 18
      features/poll/impl/src/main/kotlin/io/element/android/features/poll/impl/create/CreatePollView.kt

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

@ -34,6 +34,7 @@ import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.focus.focusRequester
@ -63,6 +64,8 @@ import io.element.android.libraries.designsystem.theme.components.TopAppBar
import io.element.android.libraries.matrix.api.poll.PollKind import io.element.android.libraries.matrix.api.poll.PollKind
import io.element.android.libraries.theme.ElementTheme import io.element.android.libraries.theme.ElementTheme
import io.element.android.libraries.ui.strings.CommonStrings import io.element.android.libraries.ui.strings.CommonStrings
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
@ -70,6 +73,8 @@ fun CreatePollView(
state: CreatePollState, state: CreatePollState,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
) { ) {
val coroutineScope = rememberCoroutineScope()
val navBack = { state.eventSink(CreatePollEvents.ConfirmNavBack) } val navBack = { state.eventSink(CreatePollEvents.ConfirmNavBack) }
BackHandler(onBack = navBack) BackHandler(onBack = navBack)
if (state.showConfirmation) ConfirmationDialog( if (state.showConfirmation) ConfirmationDialog(
@ -142,7 +147,6 @@ fun CreatePollView(
} }
itemsIndexed(state.answers) { index, answer -> itemsIndexed(state.answers) { index, answer ->
val isLastItem = index == state.answers.size - 1 val isLastItem = index == state.answers.size - 1
val hasAdditionalOptions = state.answers.size > 2
ListItem( ListItem(
headlineContent = { headlineContent = {
OutlinedTextField( OutlinedTextField(
@ -170,10 +174,6 @@ fun CreatePollView(
}, },
style = if (answer.canDelete) ListItemStyle.Destructive else ListItemStyle.Default, style = if (answer.canDelete) ListItemStyle.Destructive else ListItemStyle.Default,
) )
LaunchedEffect(isLastItem, hasAdditionalOptions) {
lazyListState.animateScrollToItem(state.answers.size + 1)
if (isLastItem && hasAdditionalOptions) answerFocusRequester.requestFocus()
}
} }
if (state.canAddAnswer) { if (state.canAddAnswer) {
item { item {
@ -183,7 +183,13 @@ fun CreatePollView(
iconSource = IconSource.Vector(Icons.Default.Add), iconSource = IconSource.Vector(Icons.Default.Add),
), ),
style = ListItemStyle.Primary, style = ListItemStyle.Primary,
onClick = { state.eventSink(CreatePollEvents.AddAnswer) }, onClick = {
state.eventSink(CreatePollEvents.AddAnswer)
coroutineScope.launch(Dispatchers.Main) {
lazyListState.animateScrollToItem(state.answers.size + 1)
answerFocusRequester.requestFocus()
}
},
) )
} }
} }

Loading…
Cancel
Save