diff --git a/app/src/main/java/helium314/keyboard/settings/Misc.kt b/app/src/main/java/helium314/keyboard/settings/Misc.kt index 2ca4add2c..fffc7ba1f 100644 --- a/app/src/main/java/helium314/keyboard/settings/Misc.kt +++ b/app/src/main/java/helium314/keyboard/settings/Misc.kt @@ -8,6 +8,9 @@ import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.material3.DropdownMenu @@ -43,6 +46,25 @@ fun WithSmallTitle( } } +@Composable +fun ActionRow( + modifier: Modifier = Modifier, + onClick: (() -> Unit)? = null, + verticalAlignment: Alignment.Vertical = Alignment.CenterVertically, + content: @Composable RowScope.() -> Unit +) { + val clickableModifier = if (onClick != null) Modifier.clickable(onClick = onClick) + else Modifier + Row( + modifier = modifier + .then(clickableModifier) + .fillMaxWidth() + .heightIn(min = 44.dp), + verticalAlignment = verticalAlignment, + content = content + ) +} + /** Icon if resource is a vector image, (bitmap) Image otherwise */ @Composable fun IconOrImage(@DrawableRes resId: Int, name: String?, sizeDp: Float) { diff --git a/app/src/main/java/helium314/keyboard/settings/screens/SubtypeScreen.kt b/app/src/main/java/helium314/keyboard/settings/screens/SubtypeScreen.kt index 7387974fb..3d59ee55d 100644 --- a/app/src/main/java/helium314/keyboard/settings/screens/SubtypeScreen.kt +++ b/app/src/main/java/helium314/keyboard/settings/screens/SubtypeScreen.kt @@ -21,7 +21,6 @@ import androidx.compose.material3.Scaffold import androidx.compose.material3.Surface import androidx.compose.material3.Switch import androidx.compose.material3.Text -import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState @@ -73,6 +72,7 @@ import helium314.keyboard.latin.utils.getSecondaryLocales import helium314.keyboard.latin.utils.getStringResourceOrName import helium314.keyboard.latin.utils.mainLayoutName import helium314.keyboard.latin.utils.prefs +import helium314.keyboard.settings.ActionRow import helium314.keyboard.settings.DefaultButton import helium314.keyboard.settings.DeleteButton import helium314.keyboard.settings.DropDownField @@ -156,26 +156,37 @@ fun SubtypeScreen( MainLayoutRow(currentSubtype, customMainLayouts) { setCurrentSubtype(it) } if (availableLocalesForScript.size > 1) { WithSmallTitle(stringResource(R.string.secondary_locale)) { - TextButton(onClick = { showSecondaryLocaleDialog = true }) { + ActionRow(onClick = { showSecondaryLocaleDialog = true }) { val text = getSecondaryLocales(currentSubtype.extraValues).joinToString(", ") { it.localizedDisplayName(ctx.resources) }.ifEmpty { stringResource(R.string.action_none) } - Text(text, Modifier.fillMaxWidth()) + Text(text, modifier = Modifier + .weight(1f) + .padding(start = 10.dp) + ) } } } - Row { - TextButton(onClick = { showKeyOrderDialog = true }, Modifier.weight(1f)) - { Text(stringResource(R.string.popup_order)) } - DefaultButton(currentSubtype.getExtraValueOf(ExtraValue.POPUP_ORDER) == null) { - setCurrentSubtype(currentSubtype.without(ExtraValue.POPUP_ORDER)) + WithSmallTitle(stringResource(R.string.popup_order_and_hint_source)) { + ActionRow(onClick = { showKeyOrderDialog = true }) { + Text(stringResource(R.string.popup_order), + modifier = Modifier + .weight(1f) + .padding(start = 10.dp) + ) + DefaultButton(currentSubtype.getExtraValueOf(ExtraValue.POPUP_ORDER) == null) { + setCurrentSubtype(currentSubtype.without(ExtraValue.POPUP_ORDER)) + } } - } - Row { - TextButton(onClick = { showHintOrderDialog = true }, Modifier.weight(1f)) - { Text(stringResource(R.string.hint_source)) } - DefaultButton(currentSubtype.getExtraValueOf(ExtraValue.HINT_ORDER) == null) { - setCurrentSubtype(currentSubtype.without(ExtraValue.HINT_ORDER)) + ActionRow(onClick = { showHintOrderDialog = true }) { + Text(stringResource(R.string.hint_source), + modifier = Modifier + .weight(1f) + .padding(start = 10.dp) + ) + DefaultButton(currentSubtype.getExtraValueOf(ExtraValue.HINT_ORDER) == null) { + setCurrentSubtype(currentSubtype.without(ExtraValue.HINT_ORDER)) + } } } if (currentSubtype.locale.script() == ScriptUtils.SCRIPT_LATIN) { @@ -185,9 +196,12 @@ fun SubtypeScreen( Settings.PREF_MORE_POPUP_KEYS, Defaults.PREF_MORE_POPUP_KEYS )!! - Row { - TextButton(onClick = { showMorePopupsDialog = true }, Modifier.weight(1f)) - { Text(stringResource(morePopupKeysResId(value))) } + ActionRow(onClick = { showMorePopupsDialog = true }) { + Text(stringResource(morePopupKeysResId(value)), + modifier = Modifier + .weight(1f) + .padding(start = 10.dp) + ) DefaultButton(explicitValue == null) { setCurrentSubtype(currentSubtype.without(ExtraValue.MORE_POPUPS)) } @@ -195,20 +209,26 @@ fun SubtypeScreen( } } if (hasLocalizedNumberRow(currentSubtype.locale, ctx)) { - Row(verticalAlignment = Alignment.CenterVertically) { - val checked = currentSubtype.getExtraValueOf(ExtraValue.LOCALIZED_NUMBER_ROW)?.toBoolean() - Text(stringResource(R.string.localized_number_row), Modifier.weight(1f)) - Switch( - checked = checked ?: prefs.getBoolean( - Settings.PREF_LOCALIZED_NUMBER_ROW, - Defaults.PREF_LOCALIZED_NUMBER_ROW - ), - onCheckedChange = { - setCurrentSubtype(currentSubtype.with(ExtraValue.LOCALIZED_NUMBER_ROW, it.toString())) + val checked = currentSubtype.getExtraValueOf(ExtraValue.LOCALIZED_NUMBER_ROW)?.toBoolean() + WithSmallTitle(stringResource(R.string.number_row)) { + ActionRow { + Text(stringResource(R.string.localized_number_row), + modifier = Modifier + .weight(1f) + .padding(start = 10.dp) + ) + Switch( + checked = checked ?: prefs.getBoolean( + Settings.PREF_LOCALIZED_NUMBER_ROW, + Defaults.PREF_LOCALIZED_NUMBER_ROW + ), + onCheckedChange = { + setCurrentSubtype(currentSubtype.with(ExtraValue.LOCALIZED_NUMBER_ROW, it.toString())) + } + ) + DefaultButton(checked == null) { + setCurrentSubtype(currentSubtype.without(ExtraValue.LOCALIZED_NUMBER_ROW)) } - ) - DefaultButton(checked == null) { - setCurrentSubtype(currentSubtype.without(ExtraValue.LOCALIZED_NUMBER_ROW)) } } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 76f2f3b0e..31d49c76b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -270,6 +270,8 @@ Show key hints Show long-press hints + + Popup key order and hints source Select hint source