react-native-navigation的迁移库

NavigationReactModule.java 9.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. package com.reactnativenavigation.bridge;
  2. import com.facebook.react.bridge.Callback;
  3. import com.facebook.react.bridge.Promise;
  4. import com.facebook.react.bridge.ReactApplicationContext;
  5. import com.facebook.react.bridge.ReactContextBaseJavaModule;
  6. import com.facebook.react.bridge.ReactMethod;
  7. import com.facebook.react.bridge.ReadableArray;
  8. import com.facebook.react.bridge.ReadableMap;
  9. import com.reactnativenavigation.controllers.NavigationCommandsHandler;
  10. import com.reactnativenavigation.params.ContextualMenuParams;
  11. import com.reactnativenavigation.params.FabParams;
  12. import com.reactnativenavigation.params.LightBoxParams;
  13. import com.reactnativenavigation.params.SlidingOverlayParams;
  14. import com.reactnativenavigation.params.SnackbarParams;
  15. import com.reactnativenavigation.params.TitleBarButtonParams;
  16. import com.reactnativenavigation.params.TitleBarLeftButtonParams;
  17. import com.reactnativenavigation.params.parsers.ContextualMenuParamsParser;
  18. import com.reactnativenavigation.params.parsers.FabParamsParser;
  19. import com.reactnativenavigation.params.parsers.LightBoxParamsParser;
  20. import com.reactnativenavigation.params.parsers.SlidingOverlayParamsParser;
  21. import com.reactnativenavigation.params.parsers.SnackbarParamsParser;
  22. import com.reactnativenavigation.params.parsers.TitleBarButtonParamsParser;
  23. import com.reactnativenavigation.params.parsers.TitleBarLeftButtonParamsParser;
  24. import com.reactnativenavigation.views.SideMenu.Side;
  25. import java.util.List;
  26. /**
  27. * The basic abstract components we will expose:
  28. * BottomTabs (app) - boolean
  29. * TopBar (per screen)
  30. * - TitleBar
  31. * - - RightButtons
  32. * - - LeftButton
  33. * - TopTabs (segmented control / view pager tabs)
  34. * DeviceStatusBar (app) (colors are per screen)
  35. * AndroidNavigationBar (app) (colors are per screen)
  36. * SideMenu (app) - boolean, (menu icon is screen-based)
  37. */
  38. public class NavigationReactModule extends ReactContextBaseJavaModule {
  39. public static final String NAME = "NavigationReactModule";
  40. public NavigationReactModule(ReactApplicationContext reactContext) {
  41. super(reactContext);
  42. }
  43. @Override
  44. public String getName() {
  45. return NAME;
  46. }
  47. @ReactMethod
  48. public void startApp(final ReadableMap params) {
  49. NavigationCommandsHandler.startApp(BundleConverter.toBundle(params));
  50. }
  51. @ReactMethod
  52. public void setScreenTitleBarTitle(String screenInstanceId, String title) {
  53. NavigationCommandsHandler.setScreenTitleBarTitle(screenInstanceId, title);
  54. }
  55. @ReactMethod
  56. public void setScreenTitleBarSubtitle(String screenInstanceId, String subtitle) {
  57. NavigationCommandsHandler.setScreenTitleBarSubtitle(screenInstanceId, subtitle);
  58. }
  59. @ReactMethod
  60. public void setScreenButtons(String screenInstanceId, String navigatorEventId,
  61. ReadableArray rightButtonsParams, ReadableMap leftButtonParams, ReadableMap fab) {
  62. if (rightButtonsParams != null) {
  63. setScreenTitleBarRightButtons(screenInstanceId, navigatorEventId, rightButtonsParams);
  64. }
  65. if (leftButtonParams != null) {
  66. setScreenTitleBarLeftButton(screenInstanceId, navigatorEventId, leftButtonParams);
  67. }
  68. if (fab != null) {
  69. setScreenFab(screenInstanceId, navigatorEventId, fab);
  70. }
  71. }
  72. private void setScreenTitleBarRightButtons(String screenInstanceId, String navigatorEventId, ReadableArray rightButtonsParams) {
  73. List<TitleBarButtonParams> rightButtons = new TitleBarButtonParamsParser()
  74. .parseButtons(BundleConverter.toBundle(rightButtonsParams));
  75. NavigationCommandsHandler.setScreenTitleBarRightButtons(screenInstanceId, navigatorEventId, rightButtons);
  76. }
  77. private void setScreenTitleBarLeftButton(String screenInstanceId, String navigatorEventId, ReadableMap leftButtonParams) {
  78. TitleBarLeftButtonParams leftButton = new TitleBarLeftButtonParamsParser()
  79. .parseSingleButton(BundleConverter.toBundle(leftButtonParams));
  80. NavigationCommandsHandler.setScreenTitleBarLeftButtons(screenInstanceId, navigatorEventId, leftButton);
  81. }
  82. private void setScreenFab(String screenInstanceId, String navigatorEventId, ReadableMap fab) {
  83. FabParams fabParams = new FabParamsParser().parse(BundleConverter.toBundle(fab), navigatorEventId, screenInstanceId);
  84. NavigationCommandsHandler.setScreenFab(screenInstanceId, navigatorEventId, fabParams);
  85. }
  86. @ReactMethod
  87. public void setScreenStyle(String screenInstanceId, ReadableMap style) {
  88. NavigationCommandsHandler.setScreenStyle(screenInstanceId, BundleConverter.toBundle(style));
  89. }
  90. @ReactMethod
  91. public void setBottomTabBadgeByIndex(Integer index, String badge) {
  92. NavigationCommandsHandler.setBottomTabBadgeByIndex(index, badge);
  93. }
  94. @ReactMethod
  95. public void setBottomTabBadgeByNavigatorId(String navigatorId, String badge) {
  96. NavigationCommandsHandler.setBottomTabBadgeByNavigatorId(navigatorId, badge);
  97. }
  98. @ReactMethod
  99. public void setBottomTabButtonByIndex(Integer index, final ReadableMap params) {
  100. NavigationCommandsHandler.setBottomTabButtonByIndex(index, BundleConverter.toBundle(params));
  101. }
  102. @ReactMethod
  103. public void setBottomTabButtonByNavigatorId(String navigatorId, final ReadableMap params) {
  104. NavigationCommandsHandler.setBottomTabButtonByNavigatorId(navigatorId, BundleConverter.toBundle(params));
  105. }
  106. @ReactMethod
  107. public void selectBottomTabByTabIndex(Integer index) {
  108. NavigationCommandsHandler.selectBottomTabByTabIndex(index);
  109. }
  110. @ReactMethod
  111. public void selectBottomTabByNavigatorId(String navigatorId) {
  112. NavigationCommandsHandler.selectBottomTabByNavigatorId(navigatorId);
  113. }
  114. @ReactMethod
  115. public void selectTopTabByTabIndex(String screenInstanceId, int index) {
  116. NavigationCommandsHandler.selectTopTabByTabIndex(screenInstanceId, index);
  117. }
  118. @ReactMethod
  119. public void selectTopTabByScreen(String screenInstanceId) {
  120. NavigationCommandsHandler.selectTopTabByScreen(screenInstanceId);
  121. }
  122. @ReactMethod
  123. public void toggleSideMenuVisible(boolean animated, String side) {
  124. NavigationCommandsHandler.toggleSideMenuVisible(animated, Side.fromString(side));
  125. }
  126. @ReactMethod
  127. public void setSideMenuVisible(boolean animated, boolean visible, String side) {
  128. NavigationCommandsHandler.setSideMenuVisible(animated, visible, Side.fromString(side));
  129. }
  130. @ReactMethod
  131. public void setSideMenuEnabled(boolean enabled, String side) {
  132. NavigationCommandsHandler.setSideMenuEnabled(enabled, Side.fromString(side));
  133. }
  134. @ReactMethod
  135. public void toggleTopBarVisible(final ReadableMap params) {
  136. }
  137. @ReactMethod
  138. public void setTopBarVisible(String screenInstanceId, boolean hidden, boolean animated) {
  139. NavigationCommandsHandler.setTopBarVisible(screenInstanceId, hidden, animated);
  140. }
  141. @ReactMethod
  142. public void toggleBottomTabsVisible(final ReadableMap params) {
  143. }
  144. @ReactMethod
  145. public void setBottomTabsVisible(boolean hidden, boolean animated) {
  146. NavigationCommandsHandler.setBottomTabsVisible(hidden, animated);
  147. }
  148. @ReactMethod
  149. public void push(final ReadableMap params) {
  150. NavigationCommandsHandler.push(BundleConverter.toBundle(params));
  151. }
  152. @ReactMethod
  153. public void pop(final ReadableMap params) {
  154. NavigationCommandsHandler.pop(BundleConverter.toBundle(params));
  155. }
  156. @ReactMethod
  157. public void popToRoot(final ReadableMap params) {
  158. NavigationCommandsHandler.popToRoot(BundleConverter.toBundle(params));
  159. }
  160. @ReactMethod
  161. public void newStack(final ReadableMap params) {
  162. NavigationCommandsHandler.newStack(BundleConverter.toBundle(params));
  163. }
  164. @ReactMethod
  165. public void showModal(final ReadableMap params) {
  166. NavigationCommandsHandler.showModal(BundleConverter.toBundle(params));
  167. }
  168. @ReactMethod
  169. public void showLightBox(final ReadableMap params) {
  170. LightBoxParams lbp = new LightBoxParamsParser(BundleConverter.toBundle(params)).parse();
  171. NavigationCommandsHandler.showLightBox(lbp);
  172. }
  173. @ReactMethod
  174. public void dismissLightBox() {
  175. NavigationCommandsHandler.dismissLightBox();
  176. }
  177. @ReactMethod
  178. public void dismissAllModals() {
  179. NavigationCommandsHandler.dismissAllModals();
  180. }
  181. @ReactMethod
  182. public void dismissTopModal() {
  183. NavigationCommandsHandler.dismissTopModal();
  184. }
  185. @ReactMethod
  186. public void showSlidingOverlay(final ReadableMap params) {
  187. SlidingOverlayParams slidingOverlayParams = new SlidingOverlayParamsParser().parse(BundleConverter.toBundle(params));
  188. NavigationCommandsHandler.showSlidingOverlay(slidingOverlayParams);
  189. }
  190. @ReactMethod
  191. public void hideSlidingOverlay(final ReadableMap params) {
  192. NavigationCommandsHandler.hideSlidingOverlay();
  193. }
  194. @ReactMethod
  195. public void showSnackbar(final ReadableMap params) {
  196. SnackbarParams snackbarParams = new SnackbarParamsParser().parse(BundleConverter.toBundle(params));
  197. NavigationCommandsHandler.showSnackbar(snackbarParams);
  198. }
  199. @ReactMethod
  200. public void dismissSnackbar() {
  201. NavigationCommandsHandler.dismissSnackbar();
  202. }
  203. @ReactMethod
  204. public void showContextualMenu(final String screenInstanceId, final ReadableMap params, final Callback onButtonClicked) {
  205. ContextualMenuParams contextualMenuParams =
  206. new ContextualMenuParamsParser().parse(BundleConverter.toBundle(params));
  207. NavigationCommandsHandler.showContextualMenu(screenInstanceId, contextualMenuParams, onButtonClicked);
  208. }
  209. @ReactMethod
  210. public void dismissContextualMenu(String screenInstanceId) {
  211. NavigationCommandsHandler.dismissContextualMenu(screenInstanceId);
  212. }
  213. @ReactMethod
  214. public void getOrientation(Promise promise) {
  215. NavigationCommandsHandler.getOrientation(promise);
  216. }
  217. }