From d999c87f0ca7a212b603239c1919aca7b2f0440d Mon Sep 17 00:00:00 2001 From: Syer10 Date: Fri, 8 Apr 2022 23:35:47 -0400 Subject: [PATCH] Use MaterialDialogs input for dialogs --- .../jui/ui/base/prefs/PreferencesUiBuilder.kt | 22 ++++---- .../components/CategoriesDialogs.kt | 50 +++++++------------ .../components/SourceSettingsScreenContent.kt | 22 +++----- 3 files changed, 35 insertions(+), 59 deletions(-) diff --git a/presentation/src/commonMain/kotlin/ca/gosyer/jui/ui/base/prefs/PreferencesUiBuilder.kt b/presentation/src/commonMain/kotlin/ca/gosyer/jui/ui/base/prefs/PreferencesUiBuilder.kt index ce12a3e8..c13392b6 100644 --- a/presentation/src/commonMain/kotlin/ca/gosyer/jui/ui/base/prefs/PreferencesUiBuilder.kt +++ b/presentation/src/commonMain/kotlin/ca/gosyer/jui/ui/base/prefs/PreferencesUiBuilder.kt @@ -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 ) } } diff --git a/presentation/src/commonMain/kotlin/ca/gosyer/jui/ui/categories/components/CategoriesDialogs.kt b/presentation/src/commonMain/kotlin/ca/gosyer/jui/ui/categories/components/CategoriesDialogs.kt index d905bca0..7ab10147 100644 --- a/presentation/src/commonMain/kotlin/ca/gosyer/jui/ui/categories/components/CategoriesDialogs.kt +++ b/presentation/src/commonMain/kotlin/ca/gosyer/jui/ui/categories/components/CategoriesDialogs.kt @@ -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 ) } } diff --git a/presentation/src/commonMain/kotlin/ca/gosyer/jui/ui/sources/settings/components/SourceSettingsScreenContent.kt b/presentation/src/commonMain/kotlin/ca/gosyer/jui/ui/sources/settings/components/SourceSettingsScreenContent.kt index b44e3de1..78333b78 100644 --- a/presentation/src/commonMain/kotlin/ca/gosyer/jui/ui/sources/settings/components/SourceSettingsScreenContent.kt +++ b/presentation/src/commonMain/kotlin/ca/gosyer/jui/ui/sources/settings/components/SourceSettingsScreenContent.kt @@ -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) } ) } }