Login: allow changing account name when suggestions are expanded (bitfireAT/davx5#573)

This commit is contained in:
Ricki Hirner 2024-04-21 19:02:15 +02:00
parent 71b0912494
commit 597c572f24

View file

@ -14,6 +14,8 @@ import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Email import androidx.compose.material.icons.filled.Email
import androidx.compose.material.icons.filled.Warning import androidx.compose.material.icons.filled.Warning
import androidx.compose.material3.DropdownMenu
import androidx.compose.material3.DropdownMenuItem
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.ExposedDropdownMenuBox import androidx.compose.material3.ExposedDropdownMenuBox
import androidx.compose.material3.ExposedDropdownMenuDefaults import androidx.compose.material3.ExposedDropdownMenuDefaults
@ -38,6 +40,7 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.PopupProperties
import androidx.lifecycle.viewmodel.compose.viewModel import androidx.lifecycle.viewmodel.compose.viewModel
import at.bitfire.davdroid.R import at.bitfire.davdroid.R
import at.bitfire.davdroid.ui.composable.Assistant import at.bitfire.davdroid.ui.composable.Assistant
@ -96,15 +99,17 @@ fun AccountDetailsPageContent(
) { ) {
Column(Modifier.padding(8.dp)) { Column(Modifier.padding(8.dp)) {
if (creatingAccount) if (creatingAccount)
LinearProgressIndicator(Modifier LinearProgressIndicator(
.fillMaxWidth() Modifier
.padding(bottom = 8.dp)) .fillMaxWidth()
.padding(bottom = 8.dp))
var expanded by remember { mutableStateOf(false) } var expanded by remember { mutableStateOf(false) }
ExposedDropdownMenuBox( ExposedDropdownMenuBox(
expanded = expanded, expanded = expanded,
onExpandedChange = { expanded = it } onExpandedChange = { expanded = it }
) { ) {
val offerDropdown = suggestedAccountNames.isNotEmpty()
OutlinedTextField( OutlinedTextField(
value = accountName, value = accountName,
onValueChange = onUpdateAccountName, onValueChange = onUpdateAccountName,
@ -119,32 +124,27 @@ fun AccountDetailsPageContent(
keyboardOptions = KeyboardOptions( keyboardOptions = KeyboardOptions(
keyboardType = KeyboardType.Email keyboardType = KeyboardType.Email
), ),
trailingIcon = { trailingIcon = if (offerDropdown) {
if (suggestedAccountNames.isNotEmpty()) { ExposedDropdownMenuDefaults.TrailingIcon(expanded) }
ExposedDropdownMenuDefaults.TrailingIcon( } else null,
expanded = expanded
)
},
modifier = Modifier modifier = Modifier
.fillMaxWidth()
.menuAnchor() .menuAnchor()
.fillMaxWidth()
) )
if (suggestedAccountNames.isNotEmpty()) if (offerDropdown)
ExposedDropdownMenu( DropdownMenu( // ExposedDropdownMenu takes focus away from the text field when expanded
expanded = expanded, expanded = expanded,
onDismissRequest = { expanded = false } onDismissRequest = { expanded = false },
properties = PopupProperties(focusable = false) // prevent focus from being taken away
) { ) {
for (name in suggestedAccountNames) for (name in suggestedAccountNames)
Text( DropdownMenuItem(
name, text = { Text(name) },
modifier = Modifier onClick = {
.fillMaxWidth() onUpdateAccountName(name)
.padding(8.dp) expanded = false
.clickable { }
onUpdateAccountName(name)
expanded = false
}
) )
} }
} }