react-native-navigation的迁移库

RctActivityModule.java 5.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. package com.reactnativenavigation.modules;
  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import com.facebook.react.bridge.ReactApplicationContext;
  6. import com.facebook.react.bridge.ReactContextBaseJavaModule;
  7. import com.facebook.react.bridge.ReactMethod;
  8. import com.facebook.react.bridge.ReadableArray;
  9. import com.facebook.react.bridge.ReadableMap;
  10. import com.reactnativenavigation.activities.BaseReactActivity;
  11. import com.reactnativenavigation.activities.SingleScreenActivity;
  12. import com.reactnativenavigation.activities.TabActivity;
  13. import com.reactnativenavigation.controllers.ModalController;
  14. import com.reactnativenavigation.core.objects.Screen;
  15. import com.reactnativenavigation.modal.RnnModal;
  16. import com.reactnativenavigation.utils.ContextProvider;
  17. import java.util.ArrayList;
  18. /**
  19. * Created by guyc on 10/03/16.
  20. */
  21. public class RctActivityModule extends ReactContextBaseJavaModule {
  22. public static final String REACT_CLASS = "RctActivity";
  23. public RctActivityModule(ReactApplicationContext reactContext) {
  24. super(reactContext);
  25. }
  26. @Override
  27. public String getName() {
  28. return REACT_CLASS;
  29. }
  30. @ReactMethod
  31. public void startTabBasedApp(ReadableArray screens) {
  32. Activity context = ContextProvider.getActivityContext();
  33. if (context != null && !context.isFinishing()) {
  34. Intent intent = new Intent(context, TabActivity.class);
  35. intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
  36. Bundle extras = new Bundle();
  37. extras.putSerializable(TabActivity.EXTRA_SCREENS, createScreens(screens));
  38. intent.putExtras(extras);
  39. context.startActivity(intent);
  40. }
  41. }
  42. private ArrayList<Screen> createScreens(ReadableArray screens) {
  43. ArrayList<Screen> ret = new ArrayList<>();
  44. for(int i = 0; i < screens.size(); i++) {
  45. ret.add(new Screen(screens.getMap(i)));
  46. }
  47. return ret;
  48. }
  49. @ReactMethod
  50. public void startSingleScreenApp(ReadableMap screen) {
  51. BaseReactActivity context = ContextProvider.getActivityContext();
  52. if (context != null && !context.isFinishing()) {
  53. Intent intent = new Intent(context, SingleScreenActivity.class);
  54. intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
  55. Bundle extras = new Bundle();
  56. extras.putSerializable(SingleScreenActivity.EXTRA_SCREEN, new Screen(screen));
  57. intent.putExtras(extras);
  58. context.startActivity(intent);
  59. }
  60. }
  61. @ReactMethod
  62. public void navigatorPush(final ReadableMap skreen) {
  63. final Screen screen = new Screen(skreen);
  64. final BaseReactActivity context = ContextProvider.getActivityContext();
  65. if (context == null || context.isFinishing()) {
  66. return;
  67. }
  68. // First, check is the screen should be displayed in a Modal
  69. ModalController modalController = ModalController.getInstance();
  70. if (modalController.isModalDisplayed(screen.navigatorId)) {
  71. final RnnModal modal = modalController.get(screen.navigatorId);
  72. if (modal != null) {
  73. context.runOnUiThread(new Runnable() {
  74. @Override
  75. public void run() {
  76. modal.push(screen);
  77. }
  78. });
  79. }
  80. return;
  81. }
  82. // No Modal is displayed, Push to activity
  83. context.runOnUiThread(new Runnable() {
  84. @Override
  85. public void run() {
  86. context.push(screen);
  87. }
  88. });
  89. }
  90. @ReactMethod
  91. public void navigatorPop(final ReadableMap navigator) {
  92. final String navigatorId = navigator.getString("navigatorID");
  93. final BaseReactActivity context = ContextProvider.getActivityContext();
  94. if (context == null || context.isFinishing()) {
  95. return;
  96. }
  97. // First, check if the screen should be popped from a Modal
  98. ModalController modalController = ModalController.getInstance();
  99. if (modalController.isModalDisplayed(navigatorId)) {
  100. final RnnModal modal = modalController.get(navigatorId);
  101. if (modal != null) {
  102. context.runOnUiThread(new Runnable() {
  103. @Override
  104. public void run() {
  105. modal.pop();
  106. }
  107. });
  108. }
  109. return;
  110. }
  111. context.runOnUiThread(new Runnable() {
  112. @Override
  113. public void run() {
  114. context.pop(navigatorId);
  115. }
  116. });
  117. }
  118. @ReactMethod
  119. public void showModal(final ReadableMap screen) {
  120. final BaseReactActivity context = ContextProvider.getActivityContext();
  121. if (context != null && !context.isFinishing()) {
  122. context.runOnUiThread(new Runnable() {
  123. @Override
  124. public void run() {
  125. new RnnModal(context, new Screen(screen)).show();
  126. }
  127. });
  128. }
  129. }
  130. @ReactMethod
  131. public void dismissAllModals(final ReadableMap params) {
  132. final BaseReactActivity context = ContextProvider.getActivityContext();
  133. if (context != null && !context.isFinishing()) {
  134. context.runOnUiThread(new Runnable() {
  135. @Override
  136. public void run() {
  137. ModalController modalController = ModalController.getInstance();
  138. if (modalController.isModalDisplayed()) {
  139. modalController.dismissAllModals();
  140. }
  141. }
  142. });
  143. }
  144. }
  145. }