react-native-navigation的迁移库

NavigationCommandsHandler.java 8.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  1. package com.reactnativenavigation.controllers;
  2. import android.content.Intent;
  3. import android.os.Bundle;
  4. import com.reactnativenavigation.NavigationApplication;
  5. import com.reactnativenavigation.params.ActivityParams;
  6. import com.reactnativenavigation.params.ScreenParams;
  7. import com.reactnativenavigation.params.TitleBarButtonParams;
  8. import com.reactnativenavigation.params.TitleBarLeftButtonParams;
  9. import com.reactnativenavigation.params.parsers.ActivityParamsParser;
  10. import com.reactnativenavigation.params.parsers.ScreenParamsParser;
  11. import java.util.List;
  12. public class NavigationCommandsHandler {
  13. private static final String ACTIVITY_PARAMS_BUNDLE = "ACTIVITY_PARAMS_BUNDLE";
  14. static ActivityParams parseActivityParams(Intent intent) {
  15. return ActivityParamsParser.parse(intent.getBundleExtra(NavigationCommandsHandler.ACTIVITY_PARAMS_BUNDLE));
  16. }
  17. /**
  18. * start a new activity with CLEAR_TASK | NEW_TASK
  19. *
  20. * @param params ActivityParams as bundle
  21. */
  22. public static void startApp(Bundle params) {
  23. Intent intent = new Intent(NavigationApplication.instance, NavigationActivity.class);
  24. intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
  25. intent.putExtra(ACTIVITY_PARAMS_BUNDLE, params);
  26. NavigationApplication.instance.startActivity(intent);
  27. }
  28. public static void push(Bundle screenParams) {
  29. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  30. if (currentActivity == null) {
  31. return;
  32. }
  33. final ScreenParams params = ScreenParamsParser.parse(screenParams);
  34. NavigationApplication.instance.runOnMainThread(new Runnable() {
  35. @Override
  36. public void run() {
  37. currentActivity.push(params);
  38. }
  39. });
  40. }
  41. public static void pop(Bundle screenParams) {
  42. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  43. if (currentActivity == null) {
  44. return;
  45. }
  46. final ScreenParams params = ScreenParamsParser.parse(screenParams);
  47. NavigationApplication.instance.runOnMainThread(new Runnable() {
  48. @Override
  49. public void run() {
  50. currentActivity.pop(params);
  51. }
  52. });
  53. }
  54. public static void popToRoot(Bundle screenParams) {
  55. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  56. if (currentActivity == null) {
  57. return;
  58. }
  59. final ScreenParams params = ScreenParamsParser.parse(screenParams);
  60. NavigationApplication.instance.runOnMainThread(new Runnable() {
  61. @Override
  62. public void run() {
  63. currentActivity.popToRoot(params);
  64. }
  65. });
  66. }
  67. public static void newStack(Bundle screenParams) {
  68. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  69. if (currentActivity == null) {
  70. return;
  71. }
  72. final ScreenParams params = ScreenParamsParser.parse(screenParams);
  73. NavigationApplication.instance.runOnMainThread(new Runnable() {
  74. @Override
  75. public void run() {
  76. currentActivity.newStack(params);
  77. }
  78. });
  79. }
  80. public static void setTopBarVisible(final String screenInstanceID, final boolean hidden, final boolean animated) {
  81. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  82. if (currentActivity == null) {
  83. return;
  84. }
  85. NavigationApplication.instance.runOnMainThread(new Runnable() {
  86. @Override
  87. public void run() {
  88. currentActivity.setTopBarVisible(screenInstanceID, hidden, animated);
  89. }
  90. });
  91. }
  92. public static void setBottomTabsVisible(final boolean hidden, final boolean animated) {
  93. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  94. if (currentActivity == null) {
  95. return;
  96. }
  97. NavigationApplication.instance.runOnMainThread(new Runnable() {
  98. @Override
  99. public void run() {
  100. currentActivity.setBottomTabsVisible(hidden, animated);
  101. }
  102. });
  103. }
  104. public static void setScreenTitleBarTitle(final String screenInstanceId, final String title) {
  105. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  106. if (currentActivity == null) {
  107. return;
  108. }
  109. NavigationApplication.instance.runOnMainThread(new Runnable() {
  110. @Override
  111. public void run() {
  112. currentActivity.setTitleBarTitle(screenInstanceId, title);
  113. }
  114. });
  115. }
  116. public static void showModal(Bundle params) {
  117. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  118. if (currentActivity == null) {
  119. return;
  120. }
  121. final ScreenParams screenParams = ScreenParamsParser.parse(params);
  122. NavigationApplication.instance.runOnMainThread(new Runnable() {
  123. @Override
  124. public void run() {
  125. currentActivity.showModal(screenParams);
  126. }
  127. });
  128. }
  129. public static void setScreenTitleBarRightButtons(final String screenInstanceId,
  130. final String navigatorEventId,
  131. final List<TitleBarButtonParams> titleBarButtons) {
  132. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  133. if (currentActivity == null) {
  134. return;
  135. }
  136. NavigationApplication.instance.runOnMainThread(new Runnable() {
  137. @Override
  138. public void run() {
  139. currentActivity.setTitleBarButtons(screenInstanceId, navigatorEventId, titleBarButtons);
  140. }
  141. });
  142. }
  143. public static void setScreenTitleBarLeftButtons(final String screenInstanceId,
  144. final String navigatorEventId,
  145. final TitleBarLeftButtonParams titleBarButtons) {
  146. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  147. if (currentActivity == null) {
  148. return;
  149. }
  150. NavigationApplication.instance.runOnMainThread(new Runnable() {
  151. @Override
  152. public void run() {
  153. currentActivity.setTitleBarLeftButton(screenInstanceId, navigatorEventId, titleBarButtons);
  154. }
  155. });
  156. }
  157. public static void dismissTopModal() {
  158. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  159. if (currentActivity == null) {
  160. return;
  161. }
  162. NavigationApplication.instance.runOnMainThread(new Runnable() {
  163. @Override
  164. public void run() {
  165. currentActivity.dismissTopModal();
  166. }
  167. });
  168. }
  169. public static void dismissAllModals() {
  170. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  171. if (currentActivity == null) {
  172. return;
  173. }
  174. NavigationApplication.instance.runOnMainThread(new Runnable() {
  175. @Override
  176. public void run() {
  177. currentActivity.dismissAllModals();
  178. }
  179. });
  180. }
  181. public static void toggleSideMenuVisible(final boolean animated) {
  182. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  183. if (currentActivity == null) {
  184. return;
  185. }
  186. NavigationApplication.instance.runOnMainThread(new Runnable() {
  187. @Override
  188. public void run() {
  189. currentActivity.toggleSideMenuVisible(animated);
  190. }
  191. });
  192. }
  193. public static void setSideMenuVisible(final boolean animated, final boolean visible) {
  194. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  195. if (currentActivity == null) {
  196. return;
  197. }
  198. NavigationApplication.instance.runOnMainThread(new Runnable() {
  199. @Override
  200. public void run() {
  201. currentActivity.setSideMenuVisible(animated, visible);
  202. }
  203. });
  204. }
  205. public static void selectBottomTab(final String navigatorId, final Integer index) {
  206. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  207. if (currentActivity == null) {
  208. return;
  209. }
  210. NavigationApplication.instance.runOnMainThread(new Runnable() {
  211. @Override
  212. public void run() {
  213. currentActivity.selectBottomTab(navigatorId, index);
  214. }
  215. });
  216. }
  217. }