mirror of
https://github.com/Novaloop-AG/element-x-android.git
synced 2026-11-03 06:55:41 +00:00
Request focus after adding an answer
This commit is contained in:
+12
-6
@@ -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()
|
||||||
|
}
|
||||||
|
},
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user