react-native-navigation的迁移库

NavigationCommandsHandler.java 12KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348
  1. package com.reactnativenavigation.controllers;
  2. import android.content.Intent;
  3. import android.os.Bundle;
  4. import com.facebook.react.bridge.Callback;
  5. import com.reactnativenavigation.NavigationApplication;
  6. import com.reactnativenavigation.params.ActivityParams;
  7. import com.reactnativenavigation.params.ContextualMenuParams;
  8. import com.reactnativenavigation.params.ScreenParams;
  9. import com.reactnativenavigation.params.SnackbarParams;
  10. import com.reactnativenavigation.params.TitleBarButtonParams;
  11. import com.reactnativenavigation.params.TitleBarLeftButtonParams;
  12. import com.reactnativenavigation.params.parsers.ActivityParamsParser;
  13. import com.reactnativenavigation.params.parsers.ScreenParamsParser;
  14. import java.util.List;
  15. public class NavigationCommandsHandler {
  16. private static final String ACTIVITY_PARAMS_BUNDLE = "ACTIVITY_PARAMS_BUNDLE";
  17. static ActivityParams parseActivityParams(Intent intent) {
  18. return ActivityParamsParser.parse(intent.getBundleExtra(NavigationCommandsHandler.ACTIVITY_PARAMS_BUNDLE));
  19. }
  20. /**
  21. * start a new activity with CLEAR_TASK | NEW_TASK
  22. *
  23. * @param params ActivityParams as bundle
  24. */
  25. public static void startApp(Bundle params, boolean portraitOnlyMode) {
  26. Intent intent;
  27. if (portraitOnlyMode) {
  28. intent = new Intent(NavigationApplication.instance, PortraitNavigationActivity.class);
  29. } else {
  30. intent = new Intent(NavigationApplication.instance, NavigationActivity.class);
  31. }
  32. intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
  33. intent.putExtra(ACTIVITY_PARAMS_BUNDLE, params);
  34. NavigationApplication.instance.startActivity(intent);
  35. }
  36. public static void push(Bundle screenParams) {
  37. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  38. if (currentActivity == null) {
  39. return;
  40. }
  41. final ScreenParams params = ScreenParamsParser.parse(screenParams);
  42. NavigationApplication.instance.runOnMainThread(new Runnable() {
  43. @Override
  44. public void run() {
  45. currentActivity.push(params);
  46. }
  47. });
  48. }
  49. public static void pop(Bundle screenParams) {
  50. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  51. if (currentActivity == null) {
  52. return;
  53. }
  54. final ScreenParams params = ScreenParamsParser.parse(screenParams);
  55. NavigationApplication.instance.runOnMainThread(new Runnable() {
  56. @Override
  57. public void run() {
  58. currentActivity.pop(params);
  59. }
  60. });
  61. }
  62. public static void popToRoot(Bundle screenParams) {
  63. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  64. if (currentActivity == null) {
  65. return;
  66. }
  67. final ScreenParams params = ScreenParamsParser.parse(screenParams);
  68. NavigationApplication.instance.runOnMainThread(new Runnable() {
  69. @Override
  70. public void run() {
  71. currentActivity.popToRoot(params);
  72. }
  73. });
  74. }
  75. public static void newStack(Bundle screenParams) {
  76. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  77. if (currentActivity == null) {
  78. return;
  79. }
  80. final ScreenParams params = ScreenParamsParser.parse(screenParams);
  81. NavigationApplication.instance.runOnMainThread(new Runnable() {
  82. @Override
  83. public void run() {
  84. currentActivity.newStack(params);
  85. }
  86. });
  87. }
  88. public static void setTopBarVisible(final String screenInstanceID, final boolean hidden, final boolean animated) {
  89. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  90. if (currentActivity == null) {
  91. return;
  92. }
  93. NavigationApplication.instance.runOnMainThread(new Runnable() {
  94. @Override
  95. public void run() {
  96. currentActivity.setTopBarVisible(screenInstanceID, hidden, animated);
  97. }
  98. });
  99. }
  100. public static void setBottomTabsVisible(final boolean hidden, final boolean animated) {
  101. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  102. if (currentActivity == null) {
  103. return;
  104. }
  105. NavigationApplication.instance.runOnMainThread(new Runnable() {
  106. @Override
  107. public void run() {
  108. currentActivity.setBottomTabsVisible(hidden, animated);
  109. }
  110. });
  111. }
  112. public static void setScreenTitleBarTitle(final String screenInstanceId, final String title) {
  113. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  114. if (currentActivity == null) {
  115. return;
  116. }
  117. NavigationApplication.instance.runOnMainThread(new Runnable() {
  118. @Override
  119. public void run() {
  120. currentActivity.setTitleBarTitle(screenInstanceId, title);
  121. }
  122. });
  123. }
  124. public static void setScreenTitleBarSubtitle(final String screenInstanceId, final String subtitle) {
  125. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  126. if (currentActivity == null) {
  127. return;
  128. }
  129. NavigationApplication.instance.runOnMainThread(new Runnable() {
  130. @Override
  131. public void run() {
  132. currentActivity.setTitleBarSubtitle(screenInstanceId, subtitle);
  133. }
  134. });
  135. }
  136. public static void showModal(Bundle params) {
  137. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  138. if (currentActivity == null) {
  139. return;
  140. }
  141. final ScreenParams screenParams = ScreenParamsParser.parse(params);
  142. NavigationApplication.instance.runOnMainThread(new Runnable() {
  143. @Override
  144. public void run() {
  145. currentActivity.showModal(screenParams);
  146. }
  147. });
  148. }
  149. public static void setScreenTitleBarRightButtons(final String screenInstanceId,
  150. final String navigatorEventId,
  151. final List<TitleBarButtonParams> titleBarButtons) {
  152. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  153. if (currentActivity == null) {
  154. return;
  155. }
  156. NavigationApplication.instance.runOnMainThread(new Runnable() {
  157. @Override
  158. public void run() {
  159. currentActivity.setTitleBarButtons(screenInstanceId, navigatorEventId, titleBarButtons);
  160. }
  161. });
  162. }
  163. public static void setScreenTitleBarLeftButtons(final String screenInstanceId,
  164. final String navigatorEventId,
  165. final TitleBarLeftButtonParams titleBarButtons) {
  166. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  167. if (currentActivity == null) {
  168. return;
  169. }
  170. NavigationApplication.instance.runOnMainThread(new Runnable() {
  171. @Override
  172. public void run() {
  173. currentActivity.setTitleBarLeftButton(screenInstanceId, navigatorEventId, titleBarButtons);
  174. }
  175. });
  176. }
  177. public static void dismissTopModal() {
  178. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  179. if (currentActivity == null) {
  180. return;
  181. }
  182. NavigationApplication.instance.runOnMainThread(new Runnable() {
  183. @Override
  184. public void run() {
  185. currentActivity.dismissTopModal();
  186. }
  187. });
  188. }
  189. public static void dismissAllModals() {
  190. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  191. if (currentActivity == null) {
  192. return;
  193. }
  194. NavigationApplication.instance.runOnMainThread(new Runnable() {
  195. @Override
  196. public void run() {
  197. currentActivity.dismissAllModals();
  198. }
  199. });
  200. }
  201. public static void toggleSideMenuVisible(final boolean animated) {
  202. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  203. if (currentActivity == null) {
  204. return;
  205. }
  206. NavigationApplication.instance.runOnMainThread(new Runnable() {
  207. @Override
  208. public void run() {
  209. currentActivity.toggleSideMenuVisible(animated);
  210. }
  211. });
  212. }
  213. public static void setSideMenuVisible(final boolean animated, final boolean visible) {
  214. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  215. if (currentActivity == null) {
  216. return;
  217. }
  218. NavigationApplication.instance.runOnMainThread(new Runnable() {
  219. @Override
  220. public void run() {
  221. currentActivity.setSideMenuVisible(animated, visible);
  222. }
  223. });
  224. }
  225. public static void selectBottomTabByTabIndex(final Integer index) {
  226. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  227. if (currentActivity == null) {
  228. return;
  229. }
  230. NavigationApplication.instance.runOnMainThread(new Runnable() {
  231. @Override
  232. public void run() {
  233. currentActivity.selectBottomTabByTabIndex(index);
  234. }
  235. });
  236. }
  237. public static void selectBottomTabByNavigatorId(final String navigatorId) {
  238. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  239. if (currentActivity == null) {
  240. return;
  241. }
  242. NavigationApplication.instance.runOnMainThread(new Runnable() {
  243. @Override
  244. public void run() {
  245. currentActivity.selectBottomTabByNavigatorId(navigatorId);
  246. }
  247. });
  248. }
  249. public static void setBottomTabBadgeByIndex(final Integer index, final String badge) {
  250. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  251. if (currentActivity == null) {
  252. return;
  253. }
  254. NavigationApplication.instance.runOnMainThread(new Runnable() {
  255. @Override
  256. public void run() {
  257. currentActivity.setBottomTabBadgeByIndex(index, badge);
  258. }
  259. });
  260. }
  261. public static void setBottomTabBadgeByNavigatorId(final String navigatorId, final String badge) {
  262. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  263. if (currentActivity == null) {
  264. return;
  265. }
  266. NavigationApplication.instance.runOnMainThread(new Runnable() {
  267. @Override
  268. public void run() {
  269. currentActivity.setBottomTabBadgeByNavigatorId(navigatorId, badge);
  270. }
  271. });
  272. }
  273. public static void showSnackbar(final SnackbarParams params) {
  274. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  275. if (currentActivity == null) {
  276. return;
  277. }
  278. NavigationApplication.instance.runOnMainThread(new Runnable() {
  279. @Override
  280. public void run() {
  281. currentActivity.showSnackbar(params);
  282. }
  283. });
  284. }
  285. public static void showContextualMenu(final ContextualMenuParams params, final Callback onButtonClicked) {
  286. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  287. if (currentActivity == null) {
  288. return;
  289. }
  290. NavigationApplication.instance.runOnMainThread(new Runnable() {
  291. @Override
  292. public void run() {
  293. currentActivity.showContextualMenu(params, onButtonClicked);
  294. }
  295. });
  296. }
  297. }