Use MaterialDialogs input for dialogs

This commit is contained in:
Syer10
2022-04-08 23:35:47 -04:00
parent dd6f771399
commit d999c87f0c
3 changed files with 35 additions and 59 deletions

View File

@@ -47,7 +47,6 @@ import androidx.compose.material.ContentAlpha
import androidx.compose.material.Icon
import androidx.compose.material.LocalContentColor
import androidx.compose.material.MaterialTheme
import androidx.compose.material.OutlinedTextField
import androidx.compose.material.RadioButton
import androidx.compose.material.Surface
import androidx.compose.material.Switch
@@ -69,7 +68,6 @@ import androidx.compose.ui.draw.rotate
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.takeOrElse
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.text.input.TextFieldValue
import androidx.compose.ui.text.input.VisualTransformation
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
@@ -77,13 +75,14 @@ import androidx.compose.ui.unit.dp
import ca.gosyer.jui.i18n.MR
import ca.gosyer.jui.ui.base.dialog.getMaterialDialogProperties
import ca.gosyer.jui.uicore.components.VerticalScrollbar
import ca.gosyer.jui.uicore.components.keyboardHandler
import ca.gosyer.jui.uicore.components.rememberScrollbarAdapter
import ca.gosyer.jui.uicore.prefs.PreferenceMutableStateFlow
import ca.gosyer.jui.uicore.resources.stringResource
import com.vanpra.composematerialdialogs.MaterialDialog
import com.vanpra.composematerialdialogs.MaterialDialogButtons
import com.vanpra.composematerialdialogs.MaterialDialogState
import com.vanpra.composematerialdialogs.TextFieldStyle
import com.vanpra.composematerialdialogs.input
import com.vanpra.composematerialdialogs.rememberMaterialDialogState
import com.vanpra.composematerialdialogs.title
@@ -183,6 +182,8 @@ fun EditTextPreference(
icon: ImageVector? = null,
changeListener: () -> Unit = {},
enabled: Boolean = true,
maxLines: Int = 1,
singleLine: Boolean = true,
visualTransformation: VisualTransformation = VisualTransformation.None
) {
val dialogState = rememberMaterialDialogState()
@@ -196,12 +197,10 @@ fun EditTextPreference(
enabled = enabled
)
val value by preference.collectAsState()
var editText by remember(value) { mutableStateOf(TextFieldValue(preference.value)) }
MaterialDialog(
dialogState,
buttons = {
positiveButton(stringResource(MR.strings.action_ok)) {
preference.value = editText.text
changeListener()
}
negativeButton(stringResource(MR.strings.action_cancel))
@@ -209,13 +208,14 @@ fun EditTextPreference(
properties = getMaterialDialogProperties(),
) {
title(title)
OutlinedTextField(
editText,
onValueChange = {
editText = it
},
input(
label = "",
prefill = value,
textFieldStyle = TextFieldStyle.Outlined,
visualTransformation = visualTransformation,
modifier = Modifier.keyboardHandler()
onInput = { preference.value = it },
maxLines = maxLines,
singleLine = singleLine
)
}
}

View File

@@ -6,21 +6,15 @@
package ca.gosyer.jui.ui.categories.components
import androidx.compose.material.TextField
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.input.TextFieldValue
import ca.gosyer.jui.i18n.MR
import ca.gosyer.jui.ui.base.dialog.getMaterialDialogProperties
import ca.gosyer.jui.ui.categories.CategoriesScreenViewModel
import ca.gosyer.jui.uicore.components.keyboardHandler
import ca.gosyer.jui.uicore.resources.stringResource
import com.vanpra.composematerialdialogs.MaterialDialog
import com.vanpra.composematerialdialogs.MaterialDialogState
import com.vanpra.composematerialdialogs.TextFieldStyle
import com.vanpra.composematerialdialogs.input
import com.vanpra.composematerialdialogs.message
import com.vanpra.composematerialdialogs.title
@@ -30,27 +24,22 @@ fun RenameDialog(
category: CategoriesScreenViewModel.MenuCategory,
onRename: (String) -> Unit
) {
var newName by remember { mutableStateOf(TextFieldValue(category.name)) }
MaterialDialog(
state,
buttons = {
positiveButton(stringResource(MR.strings.action_rename)) {
if (newName.text != category.name) {
onRename(newName.text)
}
}
positiveButton(stringResource(MR.strings.action_rename))
negativeButton(stringResource(MR.strings.action_cancel))
},
properties = getMaterialDialogProperties(),
) {
title(stringResource(MR.strings.categories_rename))
TextField(
newName,
onValueChange = {
newName = it
},
modifier = Modifier.keyboardHandler(singleLine = true)
input(
label = "",
prefill = category.name,
textFieldStyle = TextFieldStyle.Outlined,
onInput = { onRename(it) },
maxLines = 1,
singleLine = true
)
}
}
@@ -81,26 +70,21 @@ fun CreateDialog(
state: MaterialDialogState,
onCreate: (String) -> Unit
) {
var name by remember { mutableStateOf(TextFieldValue("")) }
MaterialDialog(
state,
buttons = {
positiveButton(stringResource(MR.strings.action_create)) {
onCreate(name.text)
}
positiveButton(stringResource(MR.strings.action_create))
negativeButton(stringResource(MR.strings.action_cancel))
},
properties = getMaterialDialogProperties(),
) {
title(stringResource(MR.strings.categories_create))
TextField(
name,
onValueChange = {
name = it
},
singleLine = true,
modifier = Modifier.keyboardHandler(singleLine = true)
input(
label = "",
textFieldStyle = TextFieldStyle.Outlined,
onInput = { onCreate(it) },
maxLines = 1,
singleLine = true
)
}
}

View File

@@ -14,18 +14,14 @@ import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.material.Checkbox
import androidx.compose.material.OutlinedTextField
import androidx.compose.material.Scaffold
import androidx.compose.material.Switch
import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.input.TextFieldValue
import androidx.compose.ui.unit.dp
import ca.gosyer.jui.i18n.MR
import ca.gosyer.jui.presentation.build.BuildKonfig
@@ -42,10 +38,11 @@ import ca.gosyer.jui.ui.sources.settings.model.SourceSettingsView.MultiSelect
import ca.gosyer.jui.ui.sources.settings.model.SourceSettingsView.Switch
import ca.gosyer.jui.ui.sources.settings.model.SourceSettingsView.TwoState
import ca.gosyer.jui.uicore.components.VerticalScrollbar
import ca.gosyer.jui.uicore.components.keyboardHandler
import ca.gosyer.jui.uicore.components.rememberScrollbarAdapter
import ca.gosyer.jui.uicore.resources.stringResource
import com.vanpra.composematerialdialogs.MaterialDialog
import com.vanpra.composematerialdialogs.TextFieldStyle
import com.vanpra.composematerialdialogs.input
import com.vanpra.composematerialdialogs.message
import com.vanpra.composematerialdialogs.rememberMaterialDialogState
import com.vanpra.composematerialdialogs.title
@@ -189,13 +186,10 @@ private fun EditTextPreference(editText: EditText) {
subtitle = subtitle,
onClick = dialogState::show
)
var text by remember(state) { mutableStateOf(TextFieldValue(state)) }
MaterialDialog(
dialogState,
buttons = {
positiveButton(stringResource(MR.strings.action_ok)) {
editText.updateState(text.text)
}
positiveButton(stringResource(MR.strings.action_ok))
negativeButton(stringResource(MR.strings.action_cancel))
},
properties = getMaterialDialogProperties(),
@@ -204,12 +198,10 @@ private fun EditTextPreference(editText: EditText) {
if (editText.dialogMessage != null) {
message(editText.dialogMessage)
}
OutlinedTextField(
text,
onValueChange = {
text = it
},
modifier = Modifier.keyboardHandler(singleLine = true)
input(
label = "",
textFieldStyle = TextFieldStyle.Outlined,
onInput = { editText.updateState(it) }
)
}
}