Fix font networking main thread crash.

This commit is contained in:
Cody Henthorne 2022-04-06 10:09:42 -04:00
parent 6376642d38
commit 904215fe38
2 changed files with 36 additions and 19 deletions

View file

@ -2,30 +2,41 @@ 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
import java.util.Locale
import java.util.concurrent.ExecutionException
/**
* RenderContext TypefaceProvider that provides typefaces using TextFont.
*/
object FontTypefaceProvider : RendererContext.TypefaceProvider {
override fun getSelectedTypeface(context: Context, renderer: Renderer, invalidate: RendererContext.Invalidate): Typeface {
return when (val fontResult = Fonts.resolveFont(context, Locale.getDefault(), TextFont.BOLD)) {
is Fonts.FontResult.Immediate -> fontResult.typeface
is Fonts.FontResult.Async -> {
fontResult.future.addListener(object : FutureTaskListener<Typeface> {
override fun onSuccess(result: Typeface?) {
invalidate.onInvalidate(renderer)
}
return getTypeface()
// TODO [cody] Need to rework Fonts.kt to not hit network on main, reverting to old typeface for now
// return when (val fontResult = Fonts.resolveFont(context, Locale.getDefault(), TextFont.BOLD)) {
// is Fonts.FontResult.Immediate -> 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
// }
// }
}
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()
}
}
}

View file

@ -25,6 +25,7 @@ import org.thoughtcrime.securesms.mediasend.v2.text.TextStoryScale
import org.thoughtcrime.securesms.mediasend.v2.text.TextStoryTextWatcher
import org.thoughtcrime.securesms.stories.viewer.page.StoryDisplay
import org.thoughtcrime.securesms.util.concurrent.ListenableFuture
import org.thoughtcrime.securesms.util.concurrent.SimpleTask
import org.thoughtcrime.securesms.util.visible
import java.util.Locale
@ -152,10 +153,15 @@ class StoryTextPostView @JvmOverloads constructor(
setTextBackgroundColor(storyTextPost.textBackgroundColor)
setTextGravity(TextAlignment.CENTER)
when (val fontResult = Fonts.resolveFont(context, Locale.getDefault(), font)) {
is Fonts.FontResult.Immediate -> setTypeface(fontResult.typeface)
is Fonts.FontResult.Async -> setTypeface(fontResult.future.get())
}
SimpleTask.run(
{
when (val fontResult = Fonts.resolveFont(context, Locale.getDefault(), font)) {
is Fonts.FontResult.Immediate -> fontResult.typeface
is Fonts.FontResult.Async -> fontResult.future.get()
}
},
{ typeface -> setTypeface(typeface) }
)
hideCloseButton()