diff --git a/lawnchair/src/app/lawnchair/font/FontCache.kt b/lawnchair/src/app/lawnchair/font/FontCache.kt index 946b7efdf9..1b5cd8f905 100644 --- a/lawnchair/src/app/lawnchair/font/FontCache.kt +++ b/lawnchair/src/app/lawnchair/font/FontCache.kt @@ -53,6 +53,11 @@ class FontCache private constructor(private val context: Context) { return loadFontAsync(font).await() } + fun preloadFont(font: Font) { + @Suppress("DeferredResultUnused") + loadFontAsync(font) + } + @ExperimentalCoroutinesApi fun getLoadedFont(font: Font): Typeface? { val deferredFont = deferredFonts[font] ?: return null diff --git a/lawnchair/src/app/lawnchair/ui/preferences/FontSelectionPreference.kt b/lawnchair/src/app/lawnchair/ui/preferences/FontSelectionPreference.kt index 1f211f9a07..5fcd426c16 100644 --- a/lawnchair/src/app/lawnchair/ui/preferences/FontSelectionPreference.kt +++ b/lawnchair/src/app/lawnchair/ui/preferences/FontSelectionPreference.kt @@ -152,15 +152,17 @@ fun FontSelectionItem( ) ) }, - endWidget = if (selected && family.variants.size > 1) { { - Row( - horizontalArrangement = Arrangement.End, - verticalAlignment = Alignment.CenterVertically, - modifier = Modifier.wrapContentWidth() - ) { - VariantDropdown(adapter = adapter, family = family) + endWidget = if (selected && family.variants.size > 1) { + { + Row( + horizontalArrangement = Arrangement.End, + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier.wrapContentWidth() + ) { + VariantDropdown(adapter = adapter, family = family) + } } - } } else null, + } else null, modifier = Modifier.clickable { adapter.onChange(family.default) }, showDivider = showDivider, dividerIndent = 40.dp, @@ -175,6 +177,14 @@ fun VariantDropdown( ) { val selectedFont = adapter.state.value var showVariants by remember { mutableStateOf(false) } + + val context = LocalContext.current + DisposableEffect(family) { + val fontCache = FontCache.INSTANCE.get(context) + family.variants.forEach { fontCache.preloadFont(it.value) } + onDispose { } + } + TextButton( onClick = { showVariants = true }, colors = ButtonDefaults.textButtonColors(contentColor = MaterialTheme.colors.onBackground)