mirror of
https://github.com/yairm210/Unciv.git
synced 2025-07-12 16:59:11 +07:00
Hopefully resolved ANRs caused by available fonts taking too long to load
This commit is contained in:
@ -22,13 +22,15 @@ class NativeFontAndroid(
|
|||||||
private val size: Int,
|
private val size: Int,
|
||||||
private val fontFamily: String
|
private val fontFamily: String
|
||||||
) : NativeFontImplementation {
|
) : NativeFontImplementation {
|
||||||
private val fontList =
|
private val fontList by lazy{
|
||||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) emptySet()
|
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) emptySet()
|
||||||
else SystemFonts.getAvailableFonts()
|
else SystemFonts.getAvailableFonts()
|
||||||
|
}
|
||||||
|
|
||||||
private val paint = Paint().apply {
|
private val paint by lazy{ createPaint() }
|
||||||
|
fun createPaint() = Paint().apply {
|
||||||
typeface = if (fontFamily.isNotBlank() && Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
typeface = if (fontFamily.isNotBlank() && Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||||||
// Helper within the VERSION_CODES.Q gate: Evaluate a Font's desirability (lower = better) for a given family.
|
// Helper within the VERSION_CODES.Q gate: Evaluate a Font's desirability (lower = better) for a given family.
|
||||||
fun Font.matchesFamily(family: String): Int {
|
fun Font.matchesFamily(family: String): Int {
|
||||||
val name = file?.nameWithoutExtension ?: return Int.MAX_VALUE
|
val name = file?.nameWithoutExtension ?: return Int.MAX_VALUE
|
||||||
if (name == family) return 0
|
if (name == family) return 0
|
||||||
@ -94,7 +96,7 @@ class NativeFontAndroid(
|
|||||||
|
|
||||||
// To get _all_ Languages a user has in their Android settings, we would need more help
|
// To get _all_ Languages a user has in their Android settings, we would need more help
|
||||||
// from the launcher: (Activity).resources.configuration.locales
|
// from the launcher: (Activity).resources.configuration.locales
|
||||||
val languageTag = Locale.getDefault().toLanguageTag() // e.g. he-IL, corresponds to the _first_ Language in Android settings
|
val languageTag = Locale.getDefault().toLanguageTag() // e.g. he-IL, corresponds to the _first_ Language in Android settings
|
||||||
val supportedLocales = arrayOf(languageTag, "en-US")
|
val supportedLocales = arrayOf(languageTag, "en-US")
|
||||||
val supportedLanguages = supportedLocales.map { it.take(2) }
|
val supportedLanguages = supportedLocales.map { it.take(2) }
|
||||||
return fontList.asSequence()
|
return fontList.asSequence()
|
||||||
|
@ -144,6 +144,10 @@ class UncivGame(parameters: UncivGameParameters) : Game() {
|
|||||||
settings.save()
|
settings.save()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Loading available fonts can take a long time on Android phones.
|
||||||
|
// Therefore we initialize the lazy parameters in the font implementation, while we're in another thread, to avoid ANRs on main thread
|
||||||
|
fontImplementation?.getCharPixmap('S')
|
||||||
|
|
||||||
// This stuff needs to run on the main thread because it needs the GL context
|
// This stuff needs to run on the main thread because it needs the GL context
|
||||||
launchOnGLThread {
|
launchOnGLThread {
|
||||||
musicController.chooseTrack(suffixes = listOf(MusicMood.Menu, MusicMood.Ambient),
|
musicController.chooseTrack(suffixes = listOf(MusicMood.Menu, MusicMood.Ambient),
|
||||||
|
Reference in New Issue
Block a user