@@ -21,7 +21,15 @@ import android.provider.MediaStore
2121import android.text.TextUtils
2222import android.util.Base64
2323import androidx.exifinterface.media.ExifInterface
24+ import com.facebook.common.executors.CallerThreadExecutor
2425import com.facebook.common.logging.FLog
26+ import com.facebook.datasource.BaseDataSubscriber
27+ import com.facebook.datasource.DataSource
28+ import com.facebook.datasource.DataSubscriber
29+ import com.facebook.drawee.backends.pipeline.Fresco.getImagePipeline
30+ import com.facebook.imagepipeline.common.Priority
31+ import com.facebook.imagepipeline.request.ImageRequest
32+ import com.facebook.imagepipeline.request.ImageRequestBuilder
2533import com.facebook.infer.annotation.Assertions
2634import com.facebook.react.bridge.Arguments
2735import com.facebook.react.bridge.JSApplicationIllegalArgumentException
@@ -31,6 +39,7 @@ import com.facebook.react.bridge.ReadableMap
3139import com.facebook.react.bridge.ReadableType
3240import com.facebook.react.bridge.WritableMap
3341import com.facebook.react.common.ReactConstants
42+ import com.facebook.react.modules.fresco.ReactNetworkImageRequest
3443import java.io.ByteArrayInputStream
3544import java.io.File
3645import java.io.FileInputStream
@@ -461,6 +470,42 @@ class ImageEditorModuleImpl(private val reactContext: ReactApplicationContext) {
461470 )
462471
463472 // Utils
473+ private fun prefetchImage (uri : String , headers : ReadableMap ) {
474+ val uri = Uri .parse(uri)
475+ val imageRequestBuilder = ImageRequestBuilder .newBuilderWithSource(uri)
476+ val request: ImageRequest =
477+ ReactNetworkImageRequest .fromBuilderWithHeaders(imageRequestBuilder, headers)
478+
479+ val prefetchSource: DataSource <Void > =
480+ getImagePipeline().prefetchToDiskCache(request, null , Priority .HIGH )
481+ val prefetchSubscriber: DataSubscriber <Void > =
482+ object : BaseDataSubscriber <Void >() {
483+ override fun onNewResultImpl (dataSource : DataSource <Void >) {
484+ if (! dataSource.isFinished()) {
485+ return
486+ }
487+ try {
488+ val ref =
489+ getImagePipeline()
490+ .getCachedImage(getImagePipeline().getCacheKey(request, null ))
491+ val image = ref!! .get()
492+ // ???
493+ } catch (e: java.lang.Exception ) {} finally {
494+ dataSource.close()
495+ }
496+ }
497+
498+ override fun onFailureImpl (dataSource : DataSource <Void ?>) {
499+ try {
500+ // Error
501+ } finally {
502+ dataSource.close()
503+ }
504+ }
505+ }
506+ prefetchSource.subscribe(prefetchSubscriber, CallerThreadExecutor .getInstance())
507+ }
508+
464509 private fun getResultMap (
465510 resizedImage : File ,
466511 image : Bitmap ,
0 commit comments