react-native-navigation的迁移库

NavigationReactModule.java 6.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. package com.reactnativenavigation.bridge;
  2. import com.facebook.react.bridge.ReactApplicationContext;
  3. import com.facebook.react.bridge.ReactContextBaseJavaModule;
  4. import com.facebook.react.bridge.ReactMethod;
  5. import com.facebook.react.bridge.ReadableArray;
  6. import com.facebook.react.bridge.ReadableMap;
  7. import com.reactnativenavigation.controllers.NavigationCommandsHandler;
  8. import com.reactnativenavigation.params.SnackbarParams;
  9. import com.reactnativenavigation.params.TitleBarButtonParams;
  10. import com.reactnativenavigation.params.TitleBarLeftButtonParams;
  11. import com.reactnativenavigation.params.parsers.SnackbarParamsParser;
  12. import com.reactnativenavigation.params.parsers.TitleBarButtonParamsParser;
  13. import com.reactnativenavigation.params.parsers.TitleBarLeftButtonParamsParser;
  14. import java.util.List;
  15. /**
  16. * The basic abstract components we will expose:
  17. * BottomTabs (app) - boolean
  18. * TopBar (per screen)
  19. * - TitleBar
  20. * - - RightButtons
  21. * - - LeftButton
  22. * - TopTabs (segmented control / view pager tabs)
  23. * DeviceStatusBar (app) (colors are per screen)
  24. * AndroidNavigationBar (app) (colors are per screen)
  25. * SideMenu (app) - boolean, (menu icon is screen-based)
  26. */
  27. public class NavigationReactModule extends ReactContextBaseJavaModule {
  28. public static final String NAME = "NavigationReactModule";
  29. public NavigationReactModule(ReactApplicationContext reactContext) {
  30. super(reactContext);
  31. }
  32. @Override
  33. public String getName() {
  34. return NAME;
  35. }
  36. @ReactMethod
  37. public void startApp(final ReadableMap params) {
  38. boolean portraitOnlyMode = false;
  39. if (params.hasKey("portraitOnlyMode")) {
  40. portraitOnlyMode = params.getBoolean("portraitOnlyMode");
  41. }
  42. NavigationCommandsHandler.startApp(BundleConverter.toBundle(params), portraitOnlyMode);
  43. }
  44. @ReactMethod
  45. public void setScreenTitleBarTitle(String screenInstanceId, String title) {
  46. NavigationCommandsHandler.setScreenTitleBarTitle(screenInstanceId, title);
  47. }
  48. @ReactMethod
  49. public void setScreenTitleBarSubtitle(String screenInstanceId, String subtitle) {
  50. NavigationCommandsHandler.setScreenTitleBarSubtitle(screenInstanceId, subtitle);
  51. }
  52. @ReactMethod
  53. public void setScreenTitleBarButtons(String screenInstanceId, String navigatorEventId,
  54. ReadableArray rightButtonsParams, ReadableMap leftButtonParams) {
  55. if (rightButtonsParams != null) {
  56. setScreenTitleBarRightButtons(screenInstanceId, navigatorEventId, rightButtonsParams);
  57. }
  58. if (leftButtonParams != null) {
  59. setScreenTitleBarLeftButton(screenInstanceId, navigatorEventId, leftButtonParams);
  60. }
  61. }
  62. private void setScreenTitleBarRightButtons(String screenInstanceId, String navigatorEventId, ReadableArray rightButtonsParams) {
  63. List<TitleBarButtonParams> rightButtons = new TitleBarButtonParamsParser()
  64. .parseButtons(BundleConverter.toBundle(rightButtonsParams));
  65. NavigationCommandsHandler.setScreenTitleBarRightButtons(screenInstanceId, navigatorEventId, rightButtons);
  66. }
  67. private void setScreenTitleBarLeftButton(String screenInstanceId, String navigatorEventId, ReadableMap leftButtonParams) {
  68. TitleBarLeftButtonParams leftButton = new TitleBarLeftButtonParamsParser()
  69. .parseSingleButton(BundleConverter.toBundle(leftButtonParams));
  70. NavigationCommandsHandler.setScreenTitleBarLeftButtons(screenInstanceId, navigatorEventId, leftButton);
  71. }
  72. @ReactMethod
  73. public void setBottomTabBadgeByIndex(Integer index, String badge) {
  74. NavigationCommandsHandler.setBottomTabBadgeByIndex(index, badge);
  75. }
  76. @ReactMethod
  77. public void setBottomTabBadgeByNavigatorId(String navigatorId, String badge) {
  78. NavigationCommandsHandler.setBottomTabBadgeByNavigatorId(navigatorId, badge);
  79. }
  80. @ReactMethod
  81. public void selectBottomTabByTabIndex(Integer index) {
  82. NavigationCommandsHandler.selectBottomTabByTabIndex(index);
  83. }
  84. @ReactMethod
  85. public void selectBottomTabByNavigatorId(String navigatorId) {
  86. NavigationCommandsHandler.selectBottomTabByNavigatorId(navigatorId);
  87. }
  88. @ReactMethod
  89. public void toggleSideMenuVisible(boolean animated) {
  90. NavigationCommandsHandler.toggleSideMenuVisible(animated);
  91. }
  92. @ReactMethod
  93. public void setSideMenuVisible(boolean animated, boolean visible) {
  94. NavigationCommandsHandler.setSideMenuVisible(animated, visible);
  95. }
  96. @ReactMethod
  97. public void toggleTopBarVisible(final ReadableMap params) {
  98. }
  99. @ReactMethod
  100. public void setTopBarVisible(String screenInstanceId, boolean hidden, boolean animated) {
  101. NavigationCommandsHandler.setTopBarVisible(screenInstanceId, hidden, animated);
  102. }
  103. @ReactMethod
  104. public void toggleBottomTabsVisible(final ReadableMap params) {
  105. }
  106. @ReactMethod
  107. public void setBottomTabsVisible(boolean hidden, boolean animated) {
  108. NavigationCommandsHandler.setBottomTabsVisible(hidden, animated);
  109. }
  110. @ReactMethod
  111. public void push(final ReadableMap params) {
  112. NavigationCommandsHandler.push(BundleConverter.toBundle(params));
  113. }
  114. @ReactMethod
  115. public void pop(final ReadableMap params) {
  116. NavigationCommandsHandler.pop(BundleConverter.toBundle(params));
  117. }
  118. @ReactMethod
  119. public void popToRoot(final ReadableMap params) {
  120. NavigationCommandsHandler.popToRoot(BundleConverter.toBundle(params));
  121. }
  122. @ReactMethod
  123. public void newStack(final ReadableMap params) {
  124. NavigationCommandsHandler.newStack(BundleConverter.toBundle(params));
  125. }
  126. @ReactMethod
  127. public void showModal(final ReadableMap params) {
  128. NavigationCommandsHandler.showModal(BundleConverter.toBundle(params));
  129. }
  130. @ReactMethod
  131. public void dismissAllModals() {
  132. NavigationCommandsHandler.dismissAllModals();
  133. }
  134. @ReactMethod
  135. public void dismissTopModal() {
  136. NavigationCommandsHandler.dismissTopModal();
  137. }
  138. @ReactMethod
  139. public void showSnackbar(final ReadableMap params) {
  140. SnackbarParams snackbarParams = new SnackbarParamsParser().parse(BundleConverter.toBundle(params));
  141. NavigationCommandsHandler.showSnackbar(snackbarParams);
  142. }
  143. }