@@ -23,6 +23,8 @@ import com.facebook.react.uimanager.SimpleViewManager
2323import com.facebook.react.uimanager.ThemedReactContext
2424import com.facebook.react.uimanager.UIManagerHelper
2525import com.facebook.react.uimanager.annotations.ReactProp
26+ import java.util.Collections
27+ import java.util.WeakHashMap
2628import okhttp3.Headers
2729import com.turboimage.decoder.APNGDecoder
2830import com.turboimage.events.ProgressEvent
@@ -34,7 +36,8 @@ import androidx.core.graphics.drawable.toDrawable
3436class TurboImageViewManager : SimpleViewManager <TurboImageView >(), LifecycleEventListener {
3537 override fun getName () = REACT_CLASS
3638
37- private lateinit var imageView: TurboImageView
39+ private val attachedViews =
40+ Collections .newSetFromMap(WeakHashMap <TurboImageView , Boolean >())
3841 private var isInBackground = false
3942 override fun getExportedCustomDirectEventTypeConstants (): MutableMap <String , Any >? {
4043 return MapBuilder .of(
@@ -48,8 +51,7 @@ class TurboImageViewManager : SimpleViewManager<TurboImageView>(), LifecycleEven
4851
4952 override fun createViewInstance (reactContext : ThemedReactContext ): TurboImageView {
5053 reactContext.addLifecycleEventListener(this )
51- imageView = TurboImageView (reactContext)
52- return imageView
54+ return TurboImageView (reactContext).also { attachedViews.add(it) }
5355 }
5456
5557 override fun onAfterUpdateTransaction (view : TurboImageView ) {
@@ -60,6 +62,7 @@ class TurboImageViewManager : SimpleViewManager<TurboImageView>(), LifecycleEven
6062 override fun onDropViewInstance (view : TurboImageView ) {
6163 super .onDropViewInstance(view)
6264 view.dispose()
65+ attachedViews.remove(view)
6366 }
6467
6568 private fun reloadImage (view : TurboImageView ) {
@@ -253,16 +256,18 @@ class TurboImageViewManager : SimpleViewManager<TurboImageView>(), LifecycleEven
253256
254257 override fun onHostResume () {
255258 if (isInBackground) {
256- reloadImage(imageView)
259+ attachedViews.toList().forEach { reloadImage(it) }
260+ isInBackground = false
257261 }
258262 }
259263
260264 override fun onHostPause () {
261- imageView. dispose()
265+ attachedViews.toList().forEach { it. dispose() }
262266 isInBackground = true
263267 }
264268
265269 override fun onHostDestroy () {
266- imageView.dispose()
270+ attachedViews.toList().forEach { it.dispose() }
271+ attachedViews.clear()
267272 }
268273}
0 commit comments