mirror of
https://github.com/Suwayomi/TachideskJUI.git
synced 2026-01-21 19:22:35 +01:00
Use keyboard handler on MaterialDialog inputs
This commit is contained in:
@@ -57,6 +57,7 @@ import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.draw.rotate
|
||||
import androidx.compose.ui.focus.FocusDirection
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.graphics.takeOrElse
|
||||
import androidx.compose.ui.graphics.vector.ImageVector
|
||||
@@ -67,6 +68,7 @@ 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.components.scrollbarPadding
|
||||
import ca.gosyer.jui.uicore.prefs.PreferenceMutableStateFlow
|
||||
@@ -186,9 +188,7 @@ fun EditTextPreference(
|
||||
title = title,
|
||||
subtitle = subtitle,
|
||||
icon = icon,
|
||||
onClick = {
|
||||
dialogState.show()
|
||||
},
|
||||
onClick = dialogState::show,
|
||||
enabled = enabled
|
||||
)
|
||||
val value by preference.collectAsState()
|
||||
@@ -210,7 +210,8 @@ fun EditTextPreference(
|
||||
visualTransformation = visualTransformation,
|
||||
onInput = { preference.value = it },
|
||||
maxLines = maxLines,
|
||||
singleLine = singleLine
|
||||
singleLine = singleLine,
|
||||
modifier = Modifier.keyboardHandler(singleLine, enterAction = { it.moveFocus(FocusDirection.Next) })
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,9 +7,12 @@
|
||||
package ca.gosyer.jui.ui.categories.components
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.focus.FocusDirection
|
||||
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
|
||||
@@ -39,7 +42,8 @@ fun RenameDialog(
|
||||
textFieldStyle = TextFieldStyle.Outlined,
|
||||
onInput = { onRename(it) },
|
||||
maxLines = 1,
|
||||
singleLine = true
|
||||
singleLine = true,
|
||||
modifier = Modifier.keyboardHandler(true, enterAction = { it.moveFocus(FocusDirection.Next) })
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -84,7 +88,8 @@ fun CreateDialog(
|
||||
textFieldStyle = TextFieldStyle.Outlined,
|
||||
onInput = { onCreate(it) },
|
||||
maxLines = 1,
|
||||
singleLine = true
|
||||
singleLine = true,
|
||||
modifier = Modifier.keyboardHandler(true, enterAction = { it.moveFocus(FocusDirection.Next) })
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,6 +37,7 @@ 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.components.scrollbarPadding
|
||||
import ca.gosyer.jui.uicore.resources.stringResource
|
||||
@@ -201,7 +202,8 @@ private fun EditTextPreference(editText: EditText) {
|
||||
input(
|
||||
label = "",
|
||||
textFieldStyle = TextFieldStyle.Outlined,
|
||||
onInput = { editText.updateState(it) }
|
||||
onInput = { editText.updateState(it) },
|
||||
modifier = Modifier.keyboardHandler()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,16 +18,19 @@ import androidx.compose.ui.platform.LocalFocusManager
|
||||
@OptIn(ExperimentalComposeUiApi::class)
|
||||
fun Modifier.keyboardHandler(
|
||||
singleLine: Boolean = false,
|
||||
action: (FocusManager) -> Unit = { it.moveFocus(FocusDirection.Down) }
|
||||
enterAction: ((FocusManager) -> Unit)? = null,
|
||||
action: (FocusManager) -> Unit = { it.moveFocus(FocusDirection.Down) },
|
||||
) = composed {
|
||||
val focusManager = LocalFocusManager.current
|
||||
Modifier.onPreviewKeyEvent {
|
||||
if (
|
||||
(it.key == Key.Tab || (singleLine && it.key == Key.Enter)) &&
|
||||
it.type == KeyEventType.KeyDown
|
||||
) {
|
||||
action(focusManager)
|
||||
true
|
||||
if (it.type == KeyEventType.KeyDown) {
|
||||
if (singleLine && it.key == Key.Enter) {
|
||||
enterAction?.invoke(focusManager) ?: action(focusManager)
|
||||
true
|
||||
} else if (it.key == Key.Tab) {
|
||||
action(focusManager)
|
||||
true
|
||||
} else false
|
||||
} else false
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user