Skip to content

Commit 4c87fc0

Browse files
committed
Enables prefetching images
1 parent 1d25cb2 commit 4c87fc0

File tree

4 files changed

+58
-3
lines changed

4 files changed

+58
-3
lines changed

FastImage.js

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import React, { PropTypes, Component } from 'react'
2-
import { requireNativeComponent, Image, View } from 'react-native'
2+
import { requireNativeComponent, Image, NativeModules, View } from 'react-native'
33

44
const resolveAssetSource = require('react-native/Libraries/Image/resolveAssetSource')
55

@@ -50,6 +50,15 @@ FastImage.priority = {
5050
high: 'high',
5151
}
5252

53+
FastImage.prefetch = function(source) {
54+
let urls = source;
55+
if (typeof source === 'string') {
56+
urls = [source];
57+
}
58+
59+
NativeModules.FastImageView.prefetch(urls);
60+
}
61+
5362
const FastImageSourcePropType = PropTypes.shape({
5463
uri: PropTypes.string,
5564
headers: PropTypes.objectOf(PropTypes.string),
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package com.dylanvann.fastimage;
2+
3+
import android.app.Activity;
4+
5+
import com.bumptech.glide.Glide;
6+
import com.bumptech.glide.load.engine.DiskCacheStrategy;
7+
8+
import com.facebook.react.bridge.ReadableArray;
9+
import com.facebook.react.bridge.ReactApplicationContext;
10+
import com.facebook.react.bridge.ReactContextBaseJavaModule;
11+
import com.facebook.react.bridge.ReactMethod;
12+
13+
public class FastImageViewModule extends ReactContextBaseJavaModule {
14+
public FastImageViewModule(ReactApplicationContext reactContext) {
15+
super(reactContext);
16+
}
17+
18+
@Override
19+
public String getName() {
20+
return "FastImageView";
21+
}
22+
23+
@ReactMethod
24+
public void prefetch(final ReadableArray urls) {
25+
final Activity activity = getCurrentActivity();
26+
activity.runOnUiThread(new Runnable() {
27+
@Override
28+
public void run() {
29+
for (int i = 0; i < urls.size(); i++) {
30+
Glide
31+
.with(activity.getApplicationContext())
32+
.load(urls.getString(i))
33+
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
34+
.preload();
35+
}
36+
}
37+
});
38+
}
39+
}

android/src/main/java/com/dylanvann/fastimage/FastImageViewPackage.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.dylanvann.fastimage;
22

3+
import com.dylanvann.fastimage.FastImageViewModule;
4+
35
import com.facebook.react.ReactPackage;
46
import com.facebook.react.bridge.NativeModule;
57
import com.facebook.react.bridge.JavaScriptModule;
@@ -10,10 +12,9 @@
1012
import java.util.List;
1113

1214
public class FastImageViewPackage implements ReactPackage {
13-
1415
@Override
1516
public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
16-
return Collections.emptyList();
17+
return Collections.<NativeModule>singletonList(new FastImageViewModule(reactContext));
1718
}
1819

1920
@Override

ios/FastImage/FFFastImageViewManager.m

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
#import "FFFastImageViewManager.h"
22
#import "FFFastImageView.h"
33

4+
#import <SDWebImage/SDWebImagePrefetcher.h>
5+
46
@implementation FFFastImageViewManager
57

68
RCT_EXPORT_MODULE(FastImageView)
@@ -16,5 +18,9 @@ - (FFFastImageView*)view {
1618
RCT_EXPORT_VIEW_PROPERTY(resizeMode, RCTResizeMode);
1719
RCT_EXPORT_VIEW_PROPERTY(onFastImageError, RCTDirectEventBlock);
1820
RCT_EXPORT_VIEW_PROPERTY(onFastImageLoad, RCTDirectEventBlock);
21+
RCT_EXPORT_METHOD(prefetch:(nonnull NSArray<NSURL *> *)urls)
22+
{
23+
[[SDWebImagePrefetcher sharedImagePrefetcher] prefetchURLs:urls];
24+
}
1925

2026
@end

0 commit comments

Comments
 (0)