diff --git a/ReactAndroid/src/main/java/com/facebook/react/modules/image/ImageLoaderModule.java b/ReactAndroid/src/main/java/com/facebook/react/modules/image/ImageLoaderModule.java index 6ee149cb895..71fb0a809c8 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/modules/image/ImageLoaderModule.java +++ b/ReactAndroid/src/main/java/com/facebook/react/modules/image/ImageLoaderModule.java @@ -44,22 +44,21 @@ public class ImageLoaderModule extends NativeImageLoaderAndroidSpec private static final String ERROR_PREFETCH_FAILURE = "E_PREFETCH_FAILURE"; private static final String ERROR_GET_SIZE_FAILURE = "E_GET_SIZE_FAILURE"; public static final String NAME = "ImageLoader"; - private static final Object DEFAULT_CALLER_CONTEXT = new Object(); private @Nullable final Object mCallerContext; private final Object mEnqueuedRequestMonitor = new Object(); private final SparseArray> mEnqueuedRequests = new SparseArray<>(); - private final ImagePipeline mImagePipeline; + private @Nullable ImagePipeline mImagePipeline = null; private @Nullable ReactCallerContextFactory mCallerContextFactory; public ImageLoaderModule(ReactApplicationContext reactContext) { - this(reactContext, DEFAULT_CALLER_CONTEXT); + super(reactContext); + mCallerContext = this; } public ImageLoaderModule(ReactApplicationContext reactContext, Object callerContext) { super(reactContext); mCallerContext = callerContext; - mImagePipeline = Fresco.getImagePipeline(); } public ImageLoaderModule( @@ -84,6 +83,10 @@ public class ImageLoaderModule extends NativeImageLoaderAndroidSpec return NAME; } + private ImagePipeline getImagePipeline() { + return mImagePipeline != null ? mImagePipeline : Fresco.getImagePipeline(); + } + /** * Fetch the width and height of the given image. * @@ -102,7 +105,7 @@ public class ImageLoaderModule extends NativeImageLoaderAndroidSpec ImageRequest request = ImageRequestBuilder.newBuilderWithSource(source.getUri()).build(); DataSource> dataSource = - mImagePipeline.fetchDecodedImage(request, getCallerContext()); + getImagePipeline().fetchDecodedImage(request, getCallerContext()); DataSubscriber> dataSubscriber = new BaseDataSubscriber>() { @@ -163,7 +166,7 @@ public class ImageLoaderModule extends NativeImageLoaderAndroidSpec ReactNetworkImageRequest.fromBuilderWithHeaders(imageRequestBuilder, headers); DataSource> dataSource = - mImagePipeline.fetchDecodedImage(request, getCallerContext()); + getImagePipeline().fetchDecodedImage(request, getCallerContext()); DataSubscriber> dataSubscriber = new BaseDataSubscriber>() { @@ -223,7 +226,7 @@ public class ImageLoaderModule extends NativeImageLoaderAndroidSpec ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri).build(); DataSource prefetchSource = - mImagePipeline.prefetchToDiskCache(request, getCallerContext()); + getImagePipeline().prefetchToDiskCache(request, getCallerContext()); DataSubscriber prefetchSubscriber = new BaseDataSubscriber() { @Override @@ -270,7 +273,7 @@ public class ImageLoaderModule extends NativeImageLoaderAndroidSpec @Override protected void doInBackgroundGuarded(Void... params) { WritableMap result = Arguments.createMap(); - ImagePipeline imagePipeline = mImagePipeline; + ImagePipeline imagePipeline = getImagePipeline(); for (int i = 0; i < uris.size(); i++) { String uriString = uris.getString(i); final Uri uri = Uri.parse(uriString);