mirror of
https://github.com/bitfireAT/davx5-ose
synced 2024-10-15 15:59:18 +00:00
Login: allow changing account name when suggestions are expanded (bitfireAT/davx5#573)
This commit is contained in:
parent
71b0912494
commit
597c572f24
|
@ -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
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue