react-native-navigation的迁移库

NavigationReactGateway.java 4.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. package com.reactnativenavigation.react;
  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import com.facebook.react.ReactInstanceManager;
  5. import com.facebook.react.ReactPackage;
  6. import com.facebook.react.bridge.ReactContext;
  7. import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler;
  8. import com.facebook.react.shell.MainReactPackage;
  9. import com.reactnativenavigation.NavigationApplication;
  10. import com.reactnativenavigation.bridge.NavigationReactEventEmitter;
  11. import com.reactnativenavigation.bridge.NavigationReactPackage;
  12. import java.util.ArrayList;
  13. import java.util.List;
  14. public class NavigationReactGateway extends ReactGatewayHost implements ReactInstanceManager.ReactInstanceEventListener {
  15. private OnJsDevReloadListener onJsDevReloadListener;
  16. private ReactInstanceManager reactInstanceManager;
  17. private NavigationReactEventEmitter reactEventEmitter;
  18. public NavigationReactGateway() {
  19. super(NavigationApplication.instance);
  20. reactInstanceManager = createReactInstanceManager();
  21. }
  22. @Override
  23. public void startReactContextOnceInBackgroundAndExecuteJS() {
  24. if (reactInstanceManager == null) {
  25. reactInstanceManager = createReactInstanceManager();
  26. }
  27. if (!reactInstanceManager.hasStartedCreatingInitialContext()) {
  28. reactInstanceManager.createReactContextInBackground();
  29. }
  30. }
  31. public boolean isInitialized() {
  32. return reactInstanceManager != null && reactInstanceManager.getCurrentReactContext() != null;
  33. }
  34. public ReactContext getReactContext() {
  35. return reactInstanceManager.getCurrentReactContext();
  36. }
  37. public NavigationReactEventEmitter getReactEventEmitter() {
  38. return reactEventEmitter;
  39. }
  40. public ReactInstanceManager getReactInstanceManager() {
  41. return reactInstanceManager;
  42. }
  43. public void onBackPressed() {
  44. reactInstanceManager.onBackPressed();
  45. }
  46. public void onDestroyApp() {
  47. reactInstanceManager.onHostDestroy();
  48. reactInstanceManager.destroy();
  49. reactInstanceManager.removeReactInstanceEventListener(this);
  50. reactInstanceManager = null;
  51. }
  52. public void onPauseActivity() {
  53. reactInstanceManager.onHostPause();
  54. onJsDevReloadListener = null;
  55. }
  56. public void onResumeActivity(Activity activity, DefaultHardwareBackBtnHandler defaultHardwareBackBtnHandler, OnJsDevReloadListener onJsDevReloadListener) {
  57. this.onJsDevReloadListener = onJsDevReloadListener;
  58. reactInstanceManager.onHostResume(activity, defaultHardwareBackBtnHandler);
  59. }
  60. public void onActivityResult(int requestCode, int resultCode, Intent data) {
  61. reactInstanceManager.onActivityResult(requestCode, resultCode, data);
  62. }
  63. private void replaceJsDevReloadListener(ReactInstanceManager manager) {
  64. new JsDevReloadListenerReplacer(manager, new JsDevReloadListenerReplacer.Listener() {
  65. @Override
  66. public void onJsDevReload() {
  67. if (onJsDevReloadListener != null)
  68. onJsDevReloadListener.onJsDevReload();
  69. }
  70. }).replace();
  71. }
  72. @Override
  73. protected ReactInstanceManager createReactInstanceManager() {
  74. ReactInstanceManager manager = super.createReactInstanceManager();
  75. if (NavigationApplication.instance.isDebug()) {
  76. replaceJsDevReloadListener(manager);
  77. }
  78. manager.addReactInstanceEventListener(this);
  79. return manager;
  80. }
  81. @Override
  82. protected boolean getUseDeveloperSupport() {
  83. return NavigationApplication.instance.isDebug();
  84. }
  85. @Override
  86. protected List<ReactPackage> getPackages() {
  87. return createReactPackages();
  88. }
  89. private List<ReactPackage> createReactPackages() {
  90. List<ReactPackage> list = new ArrayList<>();
  91. list.add(new MainReactPackage());
  92. list.add(new NavigationReactPackage());
  93. addAdditionalReactPackagesIfNeeded(list);
  94. return list;
  95. }
  96. private void addAdditionalReactPackagesIfNeeded(List<ReactPackage> list) {
  97. List<ReactPackage> additionalReactPackages = NavigationApplication.instance.createAdditionalReactPackages();
  98. if (additionalReactPackages == null) {
  99. return;
  100. }
  101. for (ReactPackage reactPackage : additionalReactPackages) {
  102. if (reactPackage instanceof MainReactPackage)
  103. throw new RuntimeException("Do not create a new MainReactPackage. This is created for you.");
  104. if (reactPackage instanceof NavigationReactPackage)
  105. throw new RuntimeException("Do not create a new NavigationReactPackage. This is created for you.");
  106. }
  107. list.addAll(additionalReactPackages);
  108. }
  109. @Override
  110. public void onReactContextInitialized(ReactContext context) {
  111. reactEventEmitter = new NavigationReactEventEmitter(context);
  112. NavigationApplication.instance.onReactInitialized(context);
  113. }
  114. }