mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-22 01:40:07 +01:00
Fix font networking main thread crash.
This commit is contained in:
@@ -2,6 +2,7 @@ package org.thoughtcrime.securesms.fonts
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Typeface
|
||||
import android.os.Build
|
||||
import org.signal.imageeditor.core.Renderer
|
||||
import org.signal.imageeditor.core.RendererContext
|
||||
import org.thoughtcrime.securesms.util.FutureTaskListener
|
||||
@@ -18,28 +19,41 @@ class FontTypefaceProvider : RendererContext.TypefaceProvider {
|
||||
private var cachedLocale: Locale? = null
|
||||
|
||||
override fun getSelectedTypeface(context: Context, renderer: Renderer, invalidate: RendererContext.Invalidate): Typeface {
|
||||
val typeface = cachedTypeface
|
||||
if (typeface != null && cachedLocale == LocaleUtil.getFirstLocale()) {
|
||||
return typeface
|
||||
}
|
||||
return getTypeface()
|
||||
//TODO [cody] Need to rework Fonts.kt to not hit network on main, reverting to old typeface for now
|
||||
// val typeface = cachedTypeface
|
||||
// if (typeface != null && cachedLocale == LocaleUtil.getFirstLocale()) {
|
||||
// return typeface
|
||||
// }
|
||||
//
|
||||
// return when (val fontResult = Fonts.resolveFont(context, TextFont.BOLD)) {
|
||||
// is Fonts.FontResult.Immediate -> {
|
||||
// cachedTypeface = fontResult.typeface
|
||||
// cachedLocale = LocaleUtil.getFirstLocale()
|
||||
// fontResult.typeface
|
||||
// }
|
||||
// is Fonts.FontResult.Async -> {
|
||||
// fontResult.future.addListener(object : FutureTaskListener<Typeface> {
|
||||
// override fun onSuccess(result: Typeface?) {
|
||||
// invalidate.onInvalidate(renderer)
|
||||
// }
|
||||
//
|
||||
// override fun onFailure(exception: ExecutionException?) = Unit
|
||||
// })
|
||||
//
|
||||
// fontResult.placeholder
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
return when (val fontResult = Fonts.resolveFont(context, TextFont.BOLD)) {
|
||||
is Fonts.FontResult.Immediate -> {
|
||||
cachedTypeface = fontResult.typeface
|
||||
cachedLocale = LocaleUtil.getFirstLocale()
|
||||
fontResult.typeface
|
||||
}
|
||||
is Fonts.FontResult.Async -> {
|
||||
fontResult.future.addListener(object : FutureTaskListener<Typeface> {
|
||||
override fun onSuccess(result: Typeface?) {
|
||||
invalidate.onInvalidate(renderer)
|
||||
}
|
||||
|
||||
override fun onFailure(exception: ExecutionException?) = Unit
|
||||
})
|
||||
|
||||
fontResult.placeholder
|
||||
}
|
||||
private fun getTypeface(): Typeface {
|
||||
return if (Build.VERSION.SDK_INT < 26) {
|
||||
Typeface.create(Typeface.DEFAULT, Typeface.BOLD)
|
||||
} else {
|
||||
Typeface.Builder("")
|
||||
.setFallback("sans-serif")
|
||||
.setWeight(900)
|
||||
.build()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,7 @@ package org.thoughtcrime.securesms.fonts
|
||||
import android.content.Context
|
||||
import android.graphics.Typeface
|
||||
import androidx.annotation.WorkerThread
|
||||
import org.signal.core.util.ThreadUtil
|
||||
import org.signal.core.util.concurrent.SignalExecutors
|
||||
import org.signal.core.util.logging.Log
|
||||
import org.thoughtcrime.securesms.s3.S3
|
||||
@@ -57,6 +58,7 @@ object Fonts {
|
||||
*/
|
||||
@WorkerThread
|
||||
fun resolveFont(context: Context, font: TextFont, guessedScript: SupportedScript = SupportedScript.UNKNOWN): FontResult {
|
||||
ThreadUtil.assertNotMainThread()
|
||||
synchronized(this) {
|
||||
val errorFallback = FontResult.Immediate(Typeface.create(font.fallbackFamily, font.fallbackStyle))
|
||||
val version = FontVersion.get(context)
|
||||
|
||||
Reference in New Issue
Block a user