From 360d739b973d5b59e0125eb48ad5b69ed7747614 Mon Sep 17 00:00:00 2001 From: Yair Morgenstern Date: Wed, 6 Apr 2022 22:57:27 +0300 Subject: [PATCH] Resolved ANRs when opening Options menu Was due to system fonts taking a long time to load --- android/src/com/unciv/app/NativeFontAndroid.kt | 2 +- .../com/unciv/ui/worldscreen/mainmenu/OptionsPopup.kt | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/android/src/com/unciv/app/NativeFontAndroid.kt b/android/src/com/unciv/app/NativeFontAndroid.kt index 895d8af924..82b8884415 100755 --- a/android/src/com/unciv/app/NativeFontAndroid.kt +++ b/android/src/com/unciv/app/NativeFontAndroid.kt @@ -66,7 +66,7 @@ class NativeFontAndroid(private val size: Int, private val fontFamily: String) : override fun getAvailableFont(): Collection { return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { - SystemFonts.getAvailableFonts().mapNotNull { + SystemFonts.getAvailableFonts().asSequence().mapNotNull { it.file?.nameWithoutExtension }.map { FontData(it) }.toSet() } else { diff --git a/core/src/com/unciv/ui/worldscreen/mainmenu/OptionsPopup.kt b/core/src/com/unciv/ui/worldscreen/mainmenu/OptionsPopup.kt index db7ddb7cfc..f61de2f53d 100644 --- a/core/src/com/unciv/ui/worldscreen/mainmenu/OptionsPopup.kt +++ b/core/src/com/unciv/ui/worldscreen/mainmenu/OptionsPopup.kt @@ -82,7 +82,12 @@ class OptionsPopup(val previousScreen: BaseScreen) : Popup(previousScreen) { tabs.addPage("Language", getLanguageTab(), ImageGetter.getImage("FlagIcons/${settings.language}"), 24f) tabs.addPage("Sound", getSoundTab(), ImageGetter.getImage("OtherIcons/Speaker"), 24f) tabs.addPage("Multiplayer", getMultiplayerTab(), ImageGetter.getImage("OtherIcons/Multiplayer"), 24f) - tabs.addPage("Advanced", getAdvancedTab(), ImageGetter.getImage("OtherIcons/Settings"), 24f) + crashHandlingThread(name="Add Advanced Options Tab") { + val fontNames = Fonts.getAvailableFontFamilyNames() // This is a heavy operation and causes ANRs + postCrashHandlingRunnable { + tabs.addPage("Advanced", getAdvancedTab(fontNames), ImageGetter.getImage("OtherIcons/Settings"), 24f) + } + } if (RulesetCache.size > BaseRuleset.values().size) { val content = ModCheckTab(this) { if (modCheckFirstRun) runModChecker() @@ -293,7 +298,7 @@ class OptionsPopup(val previousScreen: BaseScreen) : Popup(previousScreen) { }).row() } - private fun getAdvancedTab() = Table(BaseScreen.skin).apply { + private fun getAdvancedTab(fontNames: Collection) = Table(BaseScreen.skin).apply { pad(10f) defaults().pad(5f) @@ -314,7 +319,7 @@ class OptionsPopup(val previousScreen: BaseScreen) : Popup(previousScreen) { } } - addFontFamilySelect(Fonts.getAvailableFontFamilyNames()) + addFontFamilySelect(fontNames) addTranslationGeneration()