Change typo preview texts

This commit is contained in:
MM20
2026-02-01 13:18:02 +01:00
parent 24406f6aae
commit 6e4f7e3e8a
6 changed files with 37 additions and 153 deletions

View File

@@ -59,7 +59,6 @@ import de.mm20.launcher2.ui.component.preferences.PreferenceScreen
import de.mm20.launcher2.ui.component.preferences.SwitchPreference
import de.mm20.launcher2.ui.locals.LocalDarkTheme
import de.mm20.launcher2.ui.settings.transparencies.checkerboard
import de.mm20.launcher2.ui.settings.typography.PreviewTexts
import de.mm20.launcher2.ui.theme.colorscheme.darkColorSchemeOf
import de.mm20.launcher2.ui.theme.colorscheme.lightColorSchemeOf
import de.mm20.launcher2.ui.theme.shapes.shapesOf
@@ -250,7 +249,6 @@ private fun ThemePreview(
darkMode: Boolean,
onDarkModeChanged: (Boolean) -> Unit,
) {
val previewTexts = PreviewTexts()
Column(
modifier = Modifier
.fillMaxWidth()
@@ -311,17 +309,17 @@ private fun ThemePreview(
modifier = Modifier.fillMaxWidth(),
) {
Text(
previewTexts.Medium1,
stringResource(R.string.typo_preview_medium1),
style = MaterialTheme.typography.titleLarge,
color = MaterialTheme.colorScheme.onSurface,
)
Text(
previewTexts.Medium2,
stringResource(R.string.typo_preview_medium2),
style = MaterialTheme.typography.titleSmall,
color = MaterialTheme.colorScheme.secondary
)
Text(
previewTexts.TwoLines,
stringResource(R.string.typo_preview_long),
style = MaterialTheme.typography.bodyMedium,
modifier = Modifier.padding(top = 4.dp),
color = MaterialTheme.colorScheme.onSurface,
@@ -336,7 +334,7 @@ private fun ThemePreview(
) {
FilterChip(
selected = true,
label = { Text(previewTexts.Short1) },
label = { Text(stringResource(R.string.typo_preview_short1)) },
leadingIcon = {
Icon(
painterResource(R.drawable.star_20px), null,
@@ -347,7 +345,7 @@ private fun ThemePreview(
)
FilterChip(
selected = false,
label = { Text(previewTexts.Short2) },
label = { Text(stringResource(R.string.typo_preview_short2)) },
leadingIcon = {
Icon(
painterResource(R.drawable.star_20px), null,
@@ -368,8 +366,8 @@ private fun ThemePreview(
modifier = Modifier.fillMaxWidth(),
horizontalArrangement = Arrangement.spacedBy(8.dp, Alignment.End),
) {
Button(onClick = {}) { Text(previewTexts.Medium1) }
OutlinedButton(onClick = {}) { Text(previewTexts.Medium2) }
Button(onClick = {}) { Text(stringResource(R.string.typo_preview_medium1)) }
OutlinedButton(onClick = {}) { Text(stringResource(R.string.typo_preview_medium2)) }
}
}
Box(

View File

@@ -1,88 +0,0 @@
package de.mm20.launcher2.ui.settings.typography
import android.icu.util.ULocale
/**
* Preview texts to demonstrate typography settings in the users dominant script.
* Preview texts should be similar in length, and they should be language-neutral, and not use
* letters that are used only in some languages.
*/
interface PreviewTexts {
/**
* Preview for the font. Should be a character that is representative for a font.
*/
val ExtraShort: String
/**
* A short, 3-letter preview.
*/
val Short1: String
/**
* An alternative to [Short1], also 3 letters.
*/
val Short2: String
/**
* A medium-length preview, 5-6 letters.
*/
val Medium1: String
/**
* An alternative to [Medium1], also 5-6 letters.
*/
val Medium2: String
/**
* A longer preview, to demonstrate line height.
* Should contain letters and numbers, and a newline.
*/
val TwoLines: String
companion object {
operator fun invoke(): PreviewTexts {
val script = ULocale.addLikelySubtags(ULocale.getDefault()).script
return forScript(script)
}
/**
* Returns the appropriate [PreviewTexts] implementation based on the script.
* Defaults to [LatinPreviewTexts] if the script is not recognized.
* @param script the ISO-15924 script code
*/
fun forScript(script: String): PreviewTexts {
return when (script) {
"Latn" -> LatinPreviewTexts
"Cyrl" -> CyrillicPreviewTexts
"Grek" -> GreekPreviewTexts
else -> LatinPreviewTexts
}
}
}
}
object LatinPreviewTexts: PreviewTexts {
override val ExtraShort: String = "Aa"
override val Short1: String = "Abc"
override val Short2: String = "Deg"
override val Medium1: String = "Abcdeg"
override val Medium2: String = "Hilmno"
override val TwoLines: String = "Abcdeghilm Nop\nRst 123456890"
}
object CyrillicPreviewTexts: PreviewTexts {
override val ExtraShort: String = "Аа"
override val Short1: String = "Абв"
override val Short2: String = "Где"
override val Medium1: String = "Абвгде"
override val Medium2: String = "Жзиклм"
override val TwoLines: String = "Абвгдежзик Лмн\nОпр 1234567890"
}
object GreekPreviewTexts: PreviewTexts {
override val ExtraShort: String = "Αα"
override val Short1: String = "Αβγ"
override val Short2: String = "Δεζ"
override val Medium1: String = "Αβγδεζ"
override val Medium2: String = "Ηθικλμ"
override val TwoLines: String = "Αβγδεζηθ Ικλμ\nΝξο 1234567890"
}

View File

@@ -256,19 +256,17 @@ fun TypographiesSettingsScreen() {
@Composable
private fun TypographyPreview(typography: androidx.compose.material3.Typography) {
val previewTexts = PreviewTexts()
Column(
modifier = Modifier.padding(vertical = 12.dp),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center
) {
Text(
text = previewTexts.Short1,
text = stringResource(R.string.typo_preview_short1),
style = typography.titleSmall,
)
Text(
text = previewTexts.Short2,
text = stringResource(R.string.typo_preview_short2),
style = typography.bodySmall,
color = MaterialTheme.colorScheme.secondary,
)

View File

@@ -104,7 +104,6 @@ fun TypographySettingsScreen(themeId: UUID) {
) { viewModel.getTypography(themeId) }.collectAsStateWithLifecycle(null)
val previewTypography = theme?.let { typographyOf(it) }
val previewTexts = PreviewTexts()
var editName by remember { mutableStateOf(false) }
@@ -167,7 +166,7 @@ fun TypographySettingsScreen(themeId: UUID) {
}
item {
PreferenceCategory("Body") {
TypographyPreview(previewTypography, previewTexts) {
TypographyPreview(previewTypography) {
Column(
horizontalAlignment = Alignment.CenterHorizontally
) {
@@ -176,7 +175,7 @@ fun TypographySettingsScreen(themeId: UUID) {
modifier = Modifier.padding(bottom = 8.dp),
)
Text(
previewTexts.Medium1,
stringResource(R.string.typo_preview_medium1),
textAlign = TextAlign.Center,
style = MaterialTheme.typography.bodySmall
)
@@ -195,7 +194,6 @@ fun TypographySettingsScreen(themeId: UUID) {
)
)
},
previewTexts = previewTexts,
)
TextStylePreference(
title = "Body Medium",
@@ -210,7 +208,6 @@ fun TypographySettingsScreen(themeId: UUID) {
)
)
},
previewTexts = previewTexts,
)
TextStylePreference(
title = "Body Large",
@@ -225,7 +222,6 @@ fun TypographySettingsScreen(themeId: UUID) {
)
)
},
previewTexts = previewTexts,
)
TextStylePreference(
title = "Body Small Emphasized",
@@ -242,7 +238,6 @@ fun TypographySettingsScreen(themeId: UUID) {
)
)
},
previewTexts = previewTexts,
)
TextStylePreference(
title = "Body Medium Emphasized",
@@ -259,7 +254,6 @@ fun TypographySettingsScreen(themeId: UUID) {
)
)
},
previewTexts = previewTexts,
)
TextStylePreference(
title = "Body Large Emphasized",
@@ -276,20 +270,17 @@ fun TypographySettingsScreen(themeId: UUID) {
)
)
},
previewTexts = previewTexts,
)
}
}
item {
PreferenceCategory("Label") {
TypographyPreview(previewTypography, previewTexts) {
TypographyPreview(previewTypography) {
FilterChip(
modifier = Modifier
.padding(end = 16.dp),
label = {
Text(
previewTexts.Short1
)
Text(stringResource(R.string.typo_preview_short1))
},
leadingIcon = {
Icon(
@@ -302,7 +293,7 @@ fun TypographySettingsScreen(themeId: UUID) {
onClick = {},
)
Button(onClick = {}) {
Text(previewTexts.Medium2)
Text(stringResource(R.string.typo_preview_medium2))
}
}
TextStylePreference(
@@ -318,7 +309,6 @@ fun TypographySettingsScreen(themeId: UUID) {
)
)
},
previewTexts = previewTexts,
)
TextStylePreference(
title = "Label Medium",
@@ -333,7 +323,6 @@ fun TypographySettingsScreen(themeId: UUID) {
)
)
},
previewTexts = previewTexts,
)
TextStylePreference(
title = "Label Large",
@@ -348,7 +337,6 @@ fun TypographySettingsScreen(themeId: UUID) {
)
)
},
previewTexts = previewTexts,
)
TextStylePreference(
title = "Label Small Emphasized",
@@ -365,7 +353,6 @@ fun TypographySettingsScreen(themeId: UUID) {
)
)
},
previewTexts = previewTexts,
)
TextStylePreference(
title = "Label Medium Emphasized",
@@ -382,7 +369,6 @@ fun TypographySettingsScreen(themeId: UUID) {
)
)
},
previewTexts = previewTexts,
)
TextStylePreference(
title = "Label Large Emphasized",
@@ -399,17 +385,16 @@ fun TypographySettingsScreen(themeId: UUID) {
)
)
},
previewTexts = previewTexts,
)
}
}
item {
PreferenceCategory("Title") {
TypographyPreview(previewTypography, previewTexts) {
TypographyPreview(previewTypography) {
PrimaryTabRow(0, modifier = Modifier.width(300.dp)) {
LeadingIconTab(
selected = true,
text = { Text(previewTexts.Short1) },
text = { Text(stringResource(R.string.typo_preview_short1)) },
icon = {
Icon(
painterResource(R.drawable.person_24px_filled),
@@ -420,7 +405,7 @@ fun TypographySettingsScreen(themeId: UUID) {
)
LeadingIconTab(
selected = false,
text = { Text(previewTexts.Short2) },
text = { Text(stringResource(R.string.typo_preview_short2)) },
icon = {
Icon(
painterResource(R.drawable.enterprise_24px),
@@ -444,7 +429,6 @@ fun TypographySettingsScreen(themeId: UUID) {
)
)
},
previewTexts = previewTexts,
)
TextStylePreference(
title = "Title Medium",
@@ -459,7 +443,6 @@ fun TypographySettingsScreen(themeId: UUID) {
)
)
},
previewTexts = previewTexts,
)
TextStylePreference(
title = "Title Large",
@@ -474,7 +457,6 @@ fun TypographySettingsScreen(themeId: UUID) {
)
)
},
previewTexts = previewTexts,
)
TextStylePreference(
title = "Title Small Emphasized",
@@ -491,7 +473,6 @@ fun TypographySettingsScreen(themeId: UUID) {
)
)
},
previewTexts = previewTexts,
)
TextStylePreference(
title = "Title Medium Emphasized",
@@ -508,7 +489,6 @@ fun TypographySettingsScreen(themeId: UUID) {
)
)
},
previewTexts = previewTexts,
)
TextStylePreference(
title = "Title Large Emphasized",
@@ -525,7 +505,6 @@ fun TypographySettingsScreen(themeId: UUID) {
)
)
},
previewTexts = previewTexts,
)
}
}
@@ -544,7 +523,6 @@ fun TypographySettingsScreen(themeId: UUID) {
)
)
},
previewTexts = previewTexts,
)
TextStylePreference(
title = "Headline Medium",
@@ -559,7 +537,6 @@ fun TypographySettingsScreen(themeId: UUID) {
)
)
},
previewTexts = previewTexts,
)
TextStylePreference(
title = "Headline Large",
@@ -574,7 +551,6 @@ fun TypographySettingsScreen(themeId: UUID) {
)
)
},
previewTexts = previewTexts,
)
TextStylePreference(
title = "Headline Small Emphasized",
@@ -592,7 +568,6 @@ fun TypographySettingsScreen(themeId: UUID) {
)
)
},
previewTexts = previewTexts,
)
TextStylePreference(
title = "Headline Medium Emphasized",
@@ -610,7 +585,6 @@ fun TypographySettingsScreen(themeId: UUID) {
)
)
},
previewTexts = previewTexts,
)
TextStylePreference(
title = "Headline Large Emphasized",
@@ -628,7 +602,6 @@ fun TypographySettingsScreen(themeId: UUID) {
)
)
},
previewTexts = previewTexts,
)
}
}
@@ -647,7 +620,6 @@ fun TypographySettingsScreen(themeId: UUID) {
)
)
},
previewTexts = previewTexts,
)
TextStylePreference(
title = "Display Medium",
@@ -662,7 +634,6 @@ fun TypographySettingsScreen(themeId: UUID) {
)
)
},
previewTexts = previewTexts,
)
TextStylePreference(
title = "Display Large",
@@ -677,7 +648,6 @@ fun TypographySettingsScreen(themeId: UUID) {
)
)
},
previewTexts = previewTexts,
)
TextStylePreference(
title = "Display Small Emphasized",
@@ -695,7 +665,6 @@ fun TypographySettingsScreen(themeId: UUID) {
)
)
},
previewTexts = previewTexts,
)
TextStylePreference(
title = "Display Medium Emphasized",
@@ -713,7 +682,6 @@ fun TypographySettingsScreen(themeId: UUID) {
)
)
},
previewTexts = previewTexts,
)
TextStylePreference(
title = "Display Large Emphasized",
@@ -731,7 +699,6 @@ fun TypographySettingsScreen(themeId: UUID) {
)
)
},
previewTexts = previewTexts,
)
}
}
@@ -744,7 +711,6 @@ private fun FontPreference(
value: ThemeFontFamily?,
onValueChange: (ThemeFontFamily?) -> Unit = {},
) {
val preview = PreviewTexts()
val context = LocalContext.current
val fontManager = FontManager(context)
@@ -774,7 +740,7 @@ private fun FontPreference(
summary = getFontName(context, value),
icon = {
Text(
text = preview.ExtraShort,
text = stringResource(R.string.typo_preview_extra_short),
style = TextStyle(
fontFamily = remember(value) { fontFamilyOf(context, value) },
fontWeight = FontWeight.Normal,
@@ -822,7 +788,7 @@ private fun FontPreference(
if (fonts.builtIn.isNotEmpty()) {
item {
FontPickerCategory(
preview.ExtraShort,
stringResource(R.string.typo_preview_extra_short),
null,
fonts.builtIn,
onFontClick = {
@@ -834,7 +800,7 @@ private fun FontPreference(
if (fonts.deviceDefault.isNotEmpty()) {
item {
FontPickerCategory(
preview.ExtraShort,
stringResource(R.string.typo_preview_extra_short),
stringResource(R.string.font_category_device_default),
fonts.deviceDefault,
onFontClick = {
@@ -846,7 +812,7 @@ private fun FontPreference(
if (fonts.generic.isNotEmpty()) {
item {
FontPickerCategory(
preview.ExtraShort,
stringResource(R.string.typo_preview_extra_short),
stringResource(R.string.font_category_generic),
fonts.generic,
onFontClick = {
@@ -880,7 +846,7 @@ private fun FontPreference(
) {
Text(
modifier = Modifier.fillMaxWidth(),
text = preview.TwoLines,
text = stringResource(R.string.typo_preview_long),
textAlign = TextAlign.Center,
color = MaterialTheme.colorScheme.primary,
style = MaterialTheme.typography.headlineMedium,
@@ -1033,7 +999,6 @@ private fun TextStylePreference(
defaultValue: ThemeTextStyle<ThemeFontWeight>?,
defaultValueParent: ThemeTextStyle<ThemeFontWeight.Absolute?>? = null,
onValueChange: (ThemeTextStyle<ThemeFontWeight.Absolute?>?) -> Unit = {},
previewTexts: PreviewTexts,
) {
val context = LocalContext.current
@@ -1048,7 +1013,7 @@ private fun TextStylePreference(
},
icon = {
Text(
text = previewTexts.ExtraShort,
text = stringResource(R.string.typo_preview_extra_short),
style = textStyle,
color = MaterialTheme.colorScheme.primary,
maxLines = 1,
@@ -1136,7 +1101,7 @@ private fun TextStylePreference(
) {
Text(
modifier = Modifier.fillMaxWidth(),
text = previewTexts.TwoLines,
text = stringResource(R.string.typo_preview_long),
textAlign = TextAlign.Center,
color = MaterialTheme.colorScheme.primary,
fontFamily = fontFamilyOf(context, fonts[actualFontFamily]),
@@ -1170,7 +1135,7 @@ private fun TextStylePreference(
},
) {
Text(
text = previewTexts.ExtraShort,
text = stringResource(R.string.typo_preview_extra_short),
fontFamily = f,
style = MaterialTheme.typography.headlineSmall,
textAlign = TextAlign.Center,
@@ -1268,7 +1233,6 @@ private fun TextStylePreference(
@Composable
private fun TypographyPreview(
previewTypography: Typography,
previewTexts: PreviewTexts,
content: @Composable () -> Unit,
) {
Row(

View File

@@ -902,4 +902,10 @@
<string name="create_tag_title">Neues Tag</string>
<string name="edit_tag_title">Tag bearbeiten</string>
<string name="dialog_discard_unsaved">Verlassen, ohne zu speichern?</string>
<string name="typo_preview_extra_short">Aa</string>
<string name="typo_preview_short1">Typ</string>
<string name="typo_preview_short2">Äöü</string>
<string name="typo_preview_medium1">Hamburg</string>
<string name="typo_preview_medium2">Größe</string>
<string name="typo_preview_long">Franz jagt im komplett\nverwahrlosten Taxi 123479</string>
</resources>

View File

@@ -1091,4 +1091,10 @@
<string name="create_tag_title">New tag</string>
<string name="edit_tag_title">Edit tag</string>
<string name="dialog_discard_unsaved">Quit without saving?</string>
<string name="typo_preview_extra_short">Aa</string>
<string name="typo_preview_short1">Ava</string>
<string name="typo_preview_short2">Typ</string>
<string name="typo_preview_medium1">Hamburg</string>
<string name="typo_preview_medium2">Preview</string>
<string name="typo_preview_long">The quick brown fox\njumps over 123479</string>
</resources>