diff --git a/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabScreenViewManager.kt b/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabScreenViewManager.kt index 6b27eb3a88..6ce717d342 100644 --- a/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabScreenViewManager.kt +++ b/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/TabScreenViewManager.kt @@ -1,7 +1,5 @@ package com.swmansion.rnscreens.gamma.tabs -import android.os.Handler -import android.os.Looper import com.facebook.react.bridge.Dynamic import com.facebook.react.bridge.ReadableMap import com.facebook.react.module.annotations.ReactModule @@ -194,15 +192,7 @@ class TabScreenViewManager : ) { val uri = value?.getString("uri") if (uri != null) { - val context = view.context - loadTabImage(context, uri) { drawable -> - // Since image loading might happen on a background thread - // ref. https://frescolib.org/docs/intro-image-pipeline.html - // We should schedule rendering the result on the UI thread - Handler(Looper.getMainLooper()).post { - view.icon = drawable - } - } + loadTabImage(view.context, uri, view) } } diff --git a/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/image/TabsImageLoader.kt b/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/image/TabsImageLoader.kt index 3aebea1f5c..2676a21f3b 100644 --- a/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/image/TabsImageLoader.kt +++ b/android/src/main/java/com/swmansion/rnscreens/gamma/tabs/image/TabsImageLoader.kt @@ -2,6 +2,8 @@ package com.swmansion.rnscreens.gamma.tabs.image import android.content.Context import android.graphics.drawable.Drawable +import android.os.Handler +import android.os.Looper import android.util.Log import androidx.core.graphics.drawable.toDrawable import androidx.core.net.toUri @@ -13,8 +15,24 @@ import com.facebook.drawee.backends.pipeline.Fresco import com.facebook.imagepipeline.image.CloseableImage import com.facebook.imagepipeline.image.CloseableStaticBitmap import com.facebook.imagepipeline.request.ImageRequestBuilder +import com.swmansion.rnscreens.gamma.tabs.TabScreen internal fun loadTabImage( + context: Context, + uri: String, + view: TabScreen, +) { + // Since image loading might happen on a background thread + // ref. https://frescolib.org/docs/intro-image-pipeline.html + // We should schedule rendering the result on the UI thread + loadTabImageInternal(context, uri) { drawable -> + Handler(Looper.getMainLooper()).post { + view.icon = drawable + } + } +} + +private fun loadTabImageInternal( context: Context, uri: String, onLoaded: (Drawable) -> Unit,