Skip to content

Commit 24de443

Browse files
axe-fbfacebook-github-bot
authored andcommitted
Add Fresco Image Plugin
Reviewed By: mdvacca Differential Revision: D15751118 fbshipit-source-id: 75a8b65b276968462f8e3e3cff6d8f95fd62e8cd
1 parent 86d3bd7 commit 24de443

File tree

2 files changed

+34
-11
lines changed

2 files changed

+34
-11
lines changed

template/android/app/src/debug/java/com/helloworld/ReactNativeFlipper.java

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,23 +6,20 @@
66
*/
77
package com.helloworld;
88

9-
import android.content.Context;
10-
import com.facebook.flipper.android.AndroidFlipperClient;
11-
import com.facebook.flipper.android.utils.FlipperUtils;
12-
import com.facebook.flipper.core.FlipperClient;
13-
import com.facebook.flipper.plugins.crashreporter.CrashReporterPlugin;
14-
import com.facebook.flipper.plugins.databases.DatabasesFlipperPlugin;
9+
import com.facebook.flipper.plugins.fresco.FrescoFlipperPlugin;
1510
import com.facebook.flipper.plugins.inspector.DescriptorMapping;
1611
import com.facebook.flipper.plugins.inspector.InspectorFlipperPlugin;
1712
import com.facebook.flipper.plugins.network.FlipperOkhttpInterceptor;
1813
import com.facebook.flipper.plugins.network.NetworkFlipperPlugin;
1914
import com.facebook.flipper.plugins.react.ReactFlipperPlugin;
2015
import com.facebook.flipper.plugins.sharedpreferences.SharedPreferencesFlipperPlugin;
16+
import com.facebook.react.ReactInstanceManager;
17+
import com.facebook.react.bridge.ReactContext;
2118
import com.facebook.react.modules.network.NetworkingModule;
2219
import okhttp3.OkHttpClient;
2320

2421
public class ReactNativeFlipper {
25-
public static void initializeFlipper(Context context) {
22+
public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) {
2623
if (FlipperUtils.shouldEnableFlipper(context)) {
2724
final FlipperClient client = AndroidFlipperClient.getInstance(context);
2825

@@ -41,8 +38,29 @@ public void apply(OkHttpClient.Builder builder) {
4138
}
4239
});
4340
client.addPlugin(networkFlipperPlugin);
44-
4541
client.start();
42+
43+
// Fresco Plugin needs to ensure that ImagePipelineFactory is initialized
44+
// Hence we run if after all native modules have been initialized
45+
ReactContext reactContext = reactInstanceManager.getCurrentReactContext();
46+
if (reactContext == null) {
47+
reactInstanceManager.addReactInstanceEventListener(
48+
new ReactInstanceManager.ReactInstanceEventListener() {
49+
@Override
50+
public void onReactContextInitialized(ReactContext reactContext) {
51+
reactInstanceManager.removeReactInstanceEventListener(this);
52+
reactContext.runOnNativeModulesQueueThread(
53+
new Runnable() {
54+
@Override
55+
public void run() {
56+
client.addPlugin(new FrescoFlipperPlugin());
57+
}
58+
});
59+
}
60+
});
61+
} else {
62+
client.addPlugin(new FrescoFlipperPlugin());
63+
}
4664
}
4765
}
4866
}

template/android/app/src/main/java/com/helloworld/MainApplication.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import android.content.Context;
55
import com.facebook.react.PackageList;
66
import com.facebook.react.ReactApplication;
7+
import com.facebook.react.ReactInstanceManager;
78
import com.facebook.react.ReactNativeHost;
89
import com.facebook.react.ReactPackage;
910
import com.facebook.soloader.SoLoader;
@@ -46,19 +47,23 @@ public void onCreate() {
4647
}
4748

4849
/**
49-
* Loads Flipper in React Native templates.
50+
* Loads Flipper in React Native templates. Call this in the onCreate method with something like
51+
* initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
5052
*
5153
* @param context
5254
*/
53-
private static void initializeFlipper(Context context) {
55+
private static void initializeFlipper(
56+
Context context, ReactInstanceManager reactInstanceManager) {
5457
if (BuildConfig.DEBUG) {
5558
try {
5659
/*
5760
We use reflection here to pick up the class that initializes Flipper,
5861
since Flipper library is not available in release mode
5962
*/
6063
Class<?> aClass = Class.forName("com.helloworld.ReactNativeFlipper");
61-
aClass.getMethod("initializeFlipper", Context.class).invoke(null, context);
64+
aClass
65+
.getMethod("initializeFlipper", Context.class, ReactInstanceManager.class)
66+
.invoke(null, context, reactInstanceManager);
6267
} catch (ClassNotFoundException e) {
6368
e.printStackTrace();
6469
} catch (NoSuchMethodException e) {

0 commit comments

Comments
 (0)