1 /** 2 * Copyright (c) Meta Platforms, Inc. and affiliates. 3 * 4 * <p>This source code is licensed under the MIT license found in the LICENSE file in the root 5 * directory of this source tree. 6 */ 7 package com.helloworld; 8 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; 15 import com.facebook.flipper.plugins.fresco.FrescoFlipperPlugin; 16 import com.facebook.flipper.plugins.inspector.DescriptorMapping; 17 import com.facebook.flipper.plugins.inspector.InspectorFlipperPlugin; 18 import com.facebook.flipper.plugins.network.FlipperOkhttpInterceptor; 19 import com.facebook.flipper.plugins.network.NetworkFlipperPlugin; 20 import com.facebook.flipper.plugins.sharedpreferences.SharedPreferencesFlipperPlugin; 21 import com.facebook.react.ReactInstanceEventListener; 22 import com.facebook.react.ReactInstanceManager; 23 import com.facebook.react.bridge.ReactContext; 24 import com.facebook.react.modules.network.NetworkingModule; 25 import okhttp3.OkHttpClient; 26 27 /** 28 * Class responsible of loading Flipper inside your React Native application. This is the debug 29 * flavor of it. Here you can add your own plugins and customize the Flipper setup. 30 */ 31 public class ReactNativeFlipper { initializeFlipper(Context context, ReactInstanceManager reactInstanceManager)32 public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) { 33 if (FlipperUtils.shouldEnableFlipper(context)) { 34 final FlipperClient client = AndroidFlipperClient.getInstance(context); 35 36 client.addPlugin(new InspectorFlipperPlugin(context, DescriptorMapping.withDefaults())); 37 client.addPlugin(new DatabasesFlipperPlugin(context)); 38 client.addPlugin(new SharedPreferencesFlipperPlugin(context)); 39 client.addPlugin(CrashReporterPlugin.getInstance()); 40 41 NetworkFlipperPlugin networkFlipperPlugin = new NetworkFlipperPlugin(); 42 NetworkingModule.setCustomClientBuilder( 43 new NetworkingModule.CustomClientBuilder() { 44 @Override 45 public void apply(OkHttpClient.Builder builder) { 46 builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin)); 47 } 48 }); 49 client.addPlugin(networkFlipperPlugin); 50 client.start(); 51 52 // Fresco Plugin needs to ensure that ImagePipelineFactory is initialized 53 // Hence we run if after all native modules have been initialized 54 ReactContext reactContext = reactInstanceManager.getCurrentReactContext(); 55 if (reactContext == null) { 56 reactInstanceManager.addReactInstanceEventListener( 57 new ReactInstanceEventListener() { 58 @Override 59 public void onReactContextInitialized(ReactContext reactContext) { 60 reactInstanceManager.removeReactInstanceEventListener(this); 61 reactContext.runOnNativeModulesQueueThread( 62 new Runnable() { 63 @Override 64 public void run() { 65 client.addPlugin(new FrescoFlipperPlugin()); 66 } 67 }); 68 } 69 }); 70 } else { 71 client.addPlugin(new FrescoFlipperPlugin()); 72 } 73 } 74 } 75 } 76