feat: language flags (#167)
This commit is contained in:
parent
c44a9dc6e5
commit
435bfae283
@ -13,6 +13,7 @@ import androidx.compose.runtime.Composable
|
|||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.text.buildAnnotatedString
|
||||||
import cafe.adriel.voyager.core.screen.Screen
|
import cafe.adriel.voyager.core.screen.Screen
|
||||||
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.theme.Spacing
|
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.theme.Spacing
|
||||||
import com.github.diegoberaldin.raccoonforlemmy.core.commonui.components.BottomSheetHandle
|
import com.github.diegoberaldin.raccoonforlemmy.core.commonui.components.BottomSheetHandle
|
||||||
@ -21,6 +22,7 @@ import com.github.diegoberaldin.raccoonforlemmy.core.notifications.NotificationC
|
|||||||
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.di.getNotificationCenter
|
import com.github.diegoberaldin.raccoonforlemmy.core.notifications.di.getNotificationCenter
|
||||||
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.onClick
|
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.onClick
|
||||||
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallback
|
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallback
|
||||||
|
import com.github.diegoberaldin.raccoonforlemmy.core.utils.toLanguageFlag
|
||||||
import com.github.diegoberaldin.raccoonforlemmy.core.utils.toLanguageName
|
import com.github.diegoberaldin.raccoonforlemmy.core.utils.toLanguageName
|
||||||
import com.github.diegoberaldin.raccoonforlemmy.resources.MR
|
import com.github.diegoberaldin.raccoonforlemmy.resources.MR
|
||||||
import dev.icerock.moko.resources.compose.stringResource
|
import dev.icerock.moko.resources.compose.stringResource
|
||||||
@ -100,7 +102,13 @@ class LanguageBottomSheet : Screen {
|
|||||||
),
|
),
|
||||||
) {
|
) {
|
||||||
Text(
|
Text(
|
||||||
text = value.toLanguageName(),
|
text = buildAnnotatedString {
|
||||||
|
with(value) {
|
||||||
|
append(toLanguageFlag())
|
||||||
|
append(" ")
|
||||||
|
append(toLanguageName())
|
||||||
|
}
|
||||||
|
},
|
||||||
style = MaterialTheme.typography.bodyLarge,
|
style = MaterialTheme.typography.bodyLarge,
|
||||||
color = MaterialTheme.colorScheme.onBackground,
|
color = MaterialTheme.colorScheme.onBackground,
|
||||||
)
|
)
|
||||||
|
@ -2,8 +2,11 @@ package com.github.diegoberaldin.raccoonforlemmy.core.utils
|
|||||||
|
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.ui.platform.LocalDensity
|
import androidx.compose.ui.platform.LocalDensity
|
||||||
|
import androidx.compose.ui.text.AnnotatedString
|
||||||
|
import androidx.compose.ui.text.SpanStyle
|
||||||
import androidx.compose.ui.unit.Dp
|
import androidx.compose.ui.unit.Dp
|
||||||
import com.github.diegoberaldin.raccoonforlemmy.resources.MR
|
import com.github.diegoberaldin.raccoonforlemmy.resources.MR
|
||||||
|
import dev.icerock.moko.resources.compose.fontFamilyResource
|
||||||
import dev.icerock.moko.resources.compose.stringResource
|
import dev.icerock.moko.resources.compose.stringResource
|
||||||
import kotlin.math.round
|
import kotlin.math.round
|
||||||
|
|
||||||
@ -37,6 +40,42 @@ fun String.toLanguageName() = when (this) {
|
|||||||
else -> stringResource(MR.strings.language_en)
|
else -> stringResource(MR.strings.language_en)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun String.toLanguageFlag(): AnnotatedString = when (this) {
|
||||||
|
"bg" -> "🇧🇬"
|
||||||
|
"cs" -> "🇨🇿"
|
||||||
|
"da" -> "🇩🇰"
|
||||||
|
"de" -> "🇩🇪"
|
||||||
|
"el" -> "🇬🇷"
|
||||||
|
"en" -> "🇬🇧"
|
||||||
|
"eo" -> "🍀"
|
||||||
|
"es" -> "🇪🇸"
|
||||||
|
"et" -> "🇪🇪"
|
||||||
|
"ga" -> "🇮🇪"
|
||||||
|
"fi" -> "🇫🇮"
|
||||||
|
"fr" -> "🇫🇷"
|
||||||
|
"hu" -> "🇭🇺"
|
||||||
|
"hr" -> "🇭🇷"
|
||||||
|
"it" -> "🇮🇹"
|
||||||
|
"lt" -> "🇱🇹"
|
||||||
|
"lv" -> "🇱🇻"
|
||||||
|
"mt" -> "🇲🇹"
|
||||||
|
"no" -> "🇳🇴"
|
||||||
|
"nl" -> "🇳🇱"
|
||||||
|
"pl" -> "🇵🇱"
|
||||||
|
"pt" -> "🇵🇹"
|
||||||
|
"ro" -> "🇷🇴"
|
||||||
|
"se" -> "🇸🇪"
|
||||||
|
"sk" -> "🇸🇰"
|
||||||
|
"sl" -> "🇸🇮"
|
||||||
|
else -> ""
|
||||||
|
}.let {
|
||||||
|
AnnotatedString(
|
||||||
|
text = it,
|
||||||
|
spanStyle = SpanStyle(fontFamily = fontFamilyResource(MR.fonts.TitilliumWeb.regular))
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun Dp.toLocalPixel(): Float = with(LocalDensity.current) {
|
fun Dp.toLocalPixel(): Float = with(LocalDensity.current) {
|
||||||
value * density
|
value * density
|
||||||
|
@ -36,6 +36,7 @@ import androidx.compose.ui.Modifier
|
|||||||
import androidx.compose.ui.graphics.ColorFilter
|
import androidx.compose.ui.graphics.ColorFilter
|
||||||
import androidx.compose.ui.input.nestedscroll.nestedScroll
|
import androidx.compose.ui.input.nestedscroll.nestedScroll
|
||||||
import androidx.compose.ui.layout.onGloballyPositioned
|
import androidx.compose.ui.layout.onGloballyPositioned
|
||||||
|
import androidx.compose.ui.text.buildAnnotatedString
|
||||||
import androidx.compose.ui.unit.toSize
|
import androidx.compose.ui.unit.toSize
|
||||||
import cafe.adriel.voyager.core.model.rememberScreenModel
|
import cafe.adriel.voyager.core.model.rememberScreenModel
|
||||||
import cafe.adriel.voyager.core.screen.Screen
|
import cafe.adriel.voyager.core.screen.Screen
|
||||||
@ -64,6 +65,7 @@ import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.onClick
|
|||||||
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallback
|
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallback
|
||||||
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallbackArgs
|
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallbackArgs
|
||||||
import com.github.diegoberaldin.raccoonforlemmy.core.utils.datetime.getPrettyDuration
|
import com.github.diegoberaldin.raccoonforlemmy.core.utils.datetime.getPrettyDuration
|
||||||
|
import com.github.diegoberaldin.raccoonforlemmy.core.utils.toLanguageFlag
|
||||||
import com.github.diegoberaldin.raccoonforlemmy.core.utils.toLanguageName
|
import com.github.diegoberaldin.raccoonforlemmy.core.utils.toLanguageName
|
||||||
import com.github.diegoberaldin.raccoonforlemmy.core.utils.toLocalDp
|
import com.github.diegoberaldin.raccoonforlemmy.core.utils.toLocalDp
|
||||||
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.SortType
|
import com.github.diegoberaldin.raccoonforlemmy.domain.lemmy.data.SortType
|
||||||
@ -254,7 +256,13 @@ class SettingsScreen : Screen {
|
|||||||
// language
|
// language
|
||||||
SettingsRow(
|
SettingsRow(
|
||||||
title = stringResource(MR.strings.settings_language),
|
title = stringResource(MR.strings.settings_language),
|
||||||
value = uiState.lang.toLanguageName(),
|
annotatedValue = buildAnnotatedString {
|
||||||
|
with(uiState.lang) {
|
||||||
|
append(toLanguageFlag())
|
||||||
|
append(" ")
|
||||||
|
append(toLanguageName())
|
||||||
|
}
|
||||||
|
},
|
||||||
onTap = rememberCallback {
|
onTap = rememberCallback {
|
||||||
val sheet = LanguageBottomSheet()
|
val sheet = LanguageBottomSheet()
|
||||||
navigationCoordinator.showBottomSheet(sheet)
|
navigationCoordinator.showBottomSheet(sheet)
|
||||||
|
@ -8,6 +8,7 @@ import androidx.compose.material3.Text
|
|||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.text.AnnotatedString
|
||||||
import androidx.compose.ui.text.style.TextOverflow
|
import androidx.compose.ui.text.style.TextOverflow
|
||||||
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.theme.Spacing
|
import com.github.diegoberaldin.raccoonforlemmy.core.appearance.theme.Spacing
|
||||||
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.onClick
|
import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.onClick
|
||||||
@ -16,7 +17,8 @@ import com.github.diegoberaldin.raccoonforlemmy.core.utils.compose.rememberCallb
|
|||||||
@Composable
|
@Composable
|
||||||
internal fun SettingsRow(
|
internal fun SettingsRow(
|
||||||
title: String,
|
title: String,
|
||||||
value: String,
|
value: String = "",
|
||||||
|
annotatedValue: AnnotatedString = AnnotatedString(""),
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
subtitle: String? = null,
|
subtitle: String? = null,
|
||||||
onTap: (() -> Unit)? = null,
|
onTap: (() -> Unit)? = null,
|
||||||
@ -47,6 +49,16 @@ internal fun SettingsRow(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (annotatedValue.isNotEmpty()) {
|
||||||
|
Text(
|
||||||
|
modifier = Modifier.padding(start = Spacing.xs),
|
||||||
|
text = annotatedValue,
|
||||||
|
style = MaterialTheme.typography.bodyMedium,
|
||||||
|
color = MaterialTheme.colorScheme.onBackground,
|
||||||
|
maxLines = 1,
|
||||||
|
overflow = TextOverflow.Ellipsis,
|
||||||
|
)
|
||||||
|
} else {
|
||||||
Text(
|
Text(
|
||||||
modifier = Modifier.padding(start = Spacing.xs),
|
modifier = Modifier.padding(start = Spacing.xs),
|
||||||
text = value,
|
text = value,
|
||||||
@ -57,3 +69,4 @@ internal fun SettingsRow(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user