Skip to content

Commit

Permalink
feat(Android): cancel image request in background and reload request …
Browse files Browse the repository at this point in the history
…in foreground (#375)
  • Loading branch information
duguyihou authored Oct 28, 2024
1 parent 77d1e6f commit a0f0228
Showing 1 changed file with 32 additions and 7 deletions.
39 changes: 32 additions & 7 deletions android/src/main/java/com/turboimage/TurboImageViewManager.kt
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import coil.memory.MemoryCache
import coil.size.Dimension
import coil.size.Size
import com.facebook.react.bridge.Arguments
import com.facebook.react.bridge.LifecycleEventListener
import com.facebook.react.bridge.ReactContext
import com.facebook.react.bridge.ReadableMap
import com.facebook.react.common.MapBuilder
Expand All @@ -29,9 +30,11 @@ import com.turboimage.events.interceptor.ProgressInterceptor
import com.turboimage.events.interceptor.ProgressListener
import okhttp3.OkHttpClient

class TurboImageViewManager : SimpleViewManager<TurboImageView>() {
class TurboImageViewManager : SimpleViewManager<TurboImageView>(), LifecycleEventListener {
override fun getName() = REACT_CLASS

private lateinit var imageView: TurboImageView
private var isInBackground = false
override fun getExportedCustomDirectEventTypeConstants(): MutableMap<String, Any>? {
return MapBuilder.of(
"onStart", MapBuilder.of("registrationName", "onStart"),
Expand All @@ -43,11 +46,22 @@ class TurboImageViewManager : SimpleViewManager<TurboImageView>() {
}

override fun createViewInstance(reactContext: ThemedReactContext): TurboImageView {
return TurboImageView(reactContext)
reactContext.addLifecycleEventListener(this)
imageView = TurboImageView(reactContext)
return imageView
}

override fun onAfterUpdateTransaction(view: TurboImageView) {
super.onAfterUpdateTransaction(view)
reloadImage(view)
}

override fun onDropViewInstance(view: TurboImageView) {
super.onDropViewInstance(view)
view.dispose()
}

private fun reloadImage(view: TurboImageView) {
val defaultCrossfade = if (view.thumbhashDrawable != null || view.blurhashDrawable != null) {
0
} else {
Expand Down Expand Up @@ -129,12 +143,8 @@ class TurboImageViewManager : SimpleViewManager<TurboImageView>() {
}
}
size(view.resize ?: Size.ORIGINAL)
}
}

override fun onDropViewInstance(view: TurboImageView) {
super.onDropViewInstance(view)
view.dispose()
}
}

@ReactProp(name = "source")
Expand Down Expand Up @@ -240,4 +250,19 @@ class TurboImageViewManager : SimpleViewManager<TurboImageView>() {
"center" to ScaleType.CENTER_INSIDE
)
}

override fun onHostResume() {
if (isInBackground) {
reloadImage(imageView)
}
}

override fun onHostPause() {
imageView.dispose()
isInBackground = true
}

override fun onHostDestroy() {
imageView.dispose()
}
}

0 comments on commit a0f0228

Please sign in to comment.