ReactNativeFlipper.java 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  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.navmelon;
  8. import android.content.Context;
  9. import com.facebook.flipper.android.AndroidFlipperClient;
  10. import com.facebook.flipper.android.utils.FlipperUtils;
  11. import com.facebook.flipper.core.FlipperClient;
  12. import com.facebook.flipper.plugins.crashreporter.CrashReporterPlugin;
  13. import com.facebook.flipper.plugins.databases.DatabasesFlipperPlugin;
  14. import com.facebook.flipper.plugins.fresco.FrescoFlipperPlugin;
  15. import com.facebook.flipper.plugins.inspector.DescriptorMapping;
  16. import com.facebook.flipper.plugins.inspector.InspectorFlipperPlugin;
  17. import com.facebook.flipper.plugins.network.FlipperOkhttpInterceptor;
  18. import com.facebook.flipper.plugins.network.NetworkFlipperPlugin;
  19. import com.facebook.flipper.plugins.sharedpreferences.SharedPreferencesFlipperPlugin;
  20. import com.facebook.react.ReactInstanceEventListener;
  21. import com.facebook.react.ReactInstanceManager;
  22. import com.facebook.react.bridge.ReactContext;
  23. import com.facebook.react.modules.network.NetworkingModule;
  24. import okhttp3.OkHttpClient;
  25. /**
  26. * Class responsible of loading Flipper inside your React Native application. This is the debug
  27. * flavor of it. Here you can add your own plugins and customize the Flipper setup.
  28. */
  29. public class ReactNativeFlipper {
  30. public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) {
  31. if (FlipperUtils.shouldEnableFlipper(context)) {
  32. final FlipperClient client = AndroidFlipperClient.getInstance(context);
  33. client.addPlugin(new InspectorFlipperPlugin(context, DescriptorMapping.withDefaults()));
  34. client.addPlugin(new DatabasesFlipperPlugin(context));
  35. client.addPlugin(new SharedPreferencesFlipperPlugin(context));
  36. client.addPlugin(CrashReporterPlugin.getInstance());
  37. NetworkFlipperPlugin networkFlipperPlugin = new NetworkFlipperPlugin();
  38. NetworkingModule.setCustomClientBuilder(
  39. new NetworkingModule.CustomClientBuilder() {
  40. @Override
  41. public void apply(OkHttpClient.Builder builder) {
  42. builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin));
  43. }
  44. });
  45. client.addPlugin(networkFlipperPlugin);
  46. client.start();
  47. // Fresco Plugin needs to ensure that ImagePipelineFactory is initialized
  48. // Hence we run if after all native modules have been initialized
  49. ReactContext reactContext = reactInstanceManager.getCurrentReactContext();
  50. if (reactContext == null) {
  51. reactInstanceManager.addReactInstanceEventListener(
  52. new ReactInstanceEventListener() {
  53. @Override
  54. public void onReactContextInitialized(ReactContext reactContext) {
  55. reactInstanceManager.removeReactInstanceEventListener(this);
  56. reactContext.runOnNativeModulesQueueThread(
  57. new Runnable() {
  58. @Override
  59. public void run() {
  60. client.addPlugin(new FrescoFlipperPlugin());
  61. }
  62. });
  63. }
  64. });
  65. } else {
  66. client.addPlugin(new FrescoFlipperPlugin());
  67. }
  68. }
  69. }
  70. }