react-native-navigation的迁移库

NavigationCommandsHandler.java 15KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424
  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.FabParams;
  9. import com.reactnativenavigation.params.ScreenParams;
  10. import com.reactnativenavigation.params.SlidingOverlayParams;
  11. import com.reactnativenavigation.params.SnackbarParams;
  12. import com.reactnativenavigation.params.TitleBarButtonParams;
  13. import com.reactnativenavigation.params.TitleBarLeftButtonParams;
  14. import com.reactnativenavigation.params.parsers.ActivityParamsParser;
  15. import com.reactnativenavigation.params.parsers.ScreenParamsParser;
  16. import com.reactnativenavigation.views.SideMenu.Side;
  17. import java.util.List;
  18. public class NavigationCommandsHandler {
  19. private static final String ACTIVITY_PARAMS_BUNDLE = "ACTIVITY_PARAMS_BUNDLE";
  20. static ActivityParams parseActivityParams(Intent intent) {
  21. return ActivityParamsParser.parse(intent.getBundleExtra(NavigationCommandsHandler.ACTIVITY_PARAMS_BUNDLE));
  22. }
  23. /**
  24. * start a new activity with CLEAR_TASK | NEW_TASK
  25. *
  26. * @param params ActivityParams as bundle
  27. */
  28. public static void startApp(Bundle params, boolean portraitOnlyMode, boolean landscapeOnlyMode) {
  29. Intent intent;
  30. if (portraitOnlyMode) {
  31. intent = new Intent(NavigationApplication.instance, PortraitNavigationActivity.class);
  32. } else if (landscapeOnlyMode) {
  33. intent = new Intent(NavigationApplication.instance, LandscapeNavigationActivity.class);
  34. } else {
  35. intent = new Intent(NavigationApplication.instance, NavigationActivity.class);
  36. }
  37. IntentDataHandler.onStartApp(intent);
  38. intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
  39. intent.putExtra(ACTIVITY_PARAMS_BUNDLE, params);
  40. NavigationApplication.instance.startActivity(intent);
  41. }
  42. public static void push(Bundle screenParams) {
  43. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  44. if (currentActivity == null) {
  45. return;
  46. }
  47. final ScreenParams params = ScreenParamsParser.parse(screenParams);
  48. NavigationApplication.instance.runOnMainThread(new Runnable() {
  49. @Override
  50. public void run() {
  51. currentActivity.push(params);
  52. }
  53. });
  54. }
  55. public static void pop(Bundle screenParams) {
  56. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  57. if (currentActivity == null) {
  58. return;
  59. }
  60. final ScreenParams params = ScreenParamsParser.parse(screenParams);
  61. NavigationApplication.instance.runOnMainThread(new Runnable() {
  62. @Override
  63. public void run() {
  64. currentActivity.pop(params);
  65. }
  66. });
  67. }
  68. public static void popToRoot(Bundle screenParams) {
  69. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  70. if (currentActivity == null) {
  71. return;
  72. }
  73. final ScreenParams params = ScreenParamsParser.parse(screenParams);
  74. NavigationApplication.instance.runOnMainThread(new Runnable() {
  75. @Override
  76. public void run() {
  77. currentActivity.popToRoot(params);
  78. }
  79. });
  80. }
  81. public static void newStack(Bundle screenParams) {
  82. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  83. if (currentActivity == null) {
  84. return;
  85. }
  86. final ScreenParams params = ScreenParamsParser.parse(screenParams);
  87. NavigationApplication.instance.runOnMainThread(new Runnable() {
  88. @Override
  89. public void run() {
  90. currentActivity.newStack(params);
  91. }
  92. });
  93. }
  94. public static void setTopBarVisible(final String screenInstanceID, final boolean hidden, final boolean animated) {
  95. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  96. if (currentActivity == null) {
  97. return;
  98. }
  99. NavigationApplication.instance.runOnMainThread(new Runnable() {
  100. @Override
  101. public void run() {
  102. currentActivity.setTopBarVisible(screenInstanceID, hidden, animated);
  103. }
  104. });
  105. }
  106. public static void setBottomTabsVisible(final boolean hidden, final boolean animated) {
  107. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  108. if (currentActivity == null) {
  109. return;
  110. }
  111. NavigationApplication.instance.runOnMainThread(new Runnable() {
  112. @Override
  113. public void run() {
  114. currentActivity.setBottomTabsVisible(hidden, animated);
  115. }
  116. });
  117. }
  118. public static void setScreenTitleBarTitle(final String screenInstanceId, final String title) {
  119. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  120. if (currentActivity == null) {
  121. return;
  122. }
  123. NavigationApplication.instance.runOnMainThread(new Runnable() {
  124. @Override
  125. public void run() {
  126. currentActivity.setTitleBarTitle(screenInstanceId, title);
  127. }
  128. });
  129. }
  130. public static void setScreenTitleBarSubtitle(final String screenInstanceId, final String subtitle) {
  131. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  132. if (currentActivity == null) {
  133. return;
  134. }
  135. NavigationApplication.instance.runOnMainThread(new Runnable() {
  136. @Override
  137. public void run() {
  138. currentActivity.setTitleBarSubtitle(screenInstanceId, subtitle);
  139. }
  140. });
  141. }
  142. public static void showModal(Bundle params) {
  143. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  144. if (currentActivity == null) {
  145. return;
  146. }
  147. final ScreenParams screenParams = ScreenParamsParser.parse(params);
  148. NavigationApplication.instance.runOnMainThread(new Runnable() {
  149. @Override
  150. public void run() {
  151. currentActivity.showModal(screenParams);
  152. }
  153. });
  154. }
  155. public static void setScreenTitleBarRightButtons(final String screenInstanceId,
  156. final String navigatorEventId,
  157. final List<TitleBarButtonParams> titleBarButtons) {
  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.setTitleBarButtons(screenInstanceId, navigatorEventId, titleBarButtons);
  166. }
  167. });
  168. }
  169. public static void setScreenTitleBarLeftButtons(final String screenInstanceId,
  170. final String navigatorEventId,
  171. final TitleBarLeftButtonParams titleBarButtons) {
  172. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  173. if (currentActivity == null) {
  174. return;
  175. }
  176. NavigationApplication.instance.runOnMainThread(new Runnable() {
  177. @Override
  178. public void run() {
  179. currentActivity.setTitleBarLeftButton(screenInstanceId, navigatorEventId, titleBarButtons);
  180. }
  181. });
  182. }
  183. public static void setScreenFab(final String screenInstanceId, final String navigatorEventId, final FabParams fab) {
  184. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  185. if (currentActivity == null) {
  186. return;
  187. }
  188. NavigationApplication.instance.runOnMainThread(new Runnable() {
  189. @Override
  190. public void run() {
  191. currentActivity.setScreenFab(screenInstanceId, navigatorEventId, fab);
  192. }
  193. });
  194. }
  195. public static void dismissTopModal() {
  196. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  197. if (currentActivity == null) {
  198. return;
  199. }
  200. NavigationApplication.instance.runOnMainThread(new Runnable() {
  201. @Override
  202. public void run() {
  203. currentActivity.dismissTopModal();
  204. }
  205. });
  206. }
  207. public static void dismissAllModals() {
  208. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  209. if (currentActivity == null) {
  210. return;
  211. }
  212. NavigationApplication.instance.runOnMainThread(new Runnable() {
  213. @Override
  214. public void run() {
  215. currentActivity.dismissAllModals();
  216. }
  217. });
  218. }
  219. public static void toggleSideMenuVisible(final boolean animated, final Side side) {
  220. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  221. if (currentActivity == null) {
  222. return;
  223. }
  224. NavigationApplication.instance.runOnMainThread(new Runnable() {
  225. @Override
  226. public void run() {
  227. currentActivity.toggleSideMenuVisible(animated, side);
  228. }
  229. });
  230. }
  231. public static void setSideMenuVisible(final boolean animated, final boolean visible, final Side side) {
  232. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  233. if (currentActivity == null) {
  234. return;
  235. }
  236. NavigationApplication.instance.runOnMainThread(new Runnable() {
  237. @Override
  238. public void run() {
  239. currentActivity.setSideMenuVisible(animated, visible, side);
  240. }
  241. });
  242. }
  243. public static void selectBottomTabByTabIndex(final Integer index) {
  244. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  245. if (currentActivity == null) {
  246. return;
  247. }
  248. NavigationApplication.instance.runOnMainThread(new Runnable() {
  249. @Override
  250. public void run() {
  251. currentActivity.selectBottomTabByTabIndex(index);
  252. }
  253. });
  254. }
  255. public static void selectBottomTabByNavigatorId(final String navigatorId) {
  256. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  257. if (currentActivity == null) {
  258. return;
  259. }
  260. NavigationApplication.instance.runOnMainThread(new Runnable() {
  261. @Override
  262. public void run() {
  263. currentActivity.selectBottomTabByNavigatorId(navigatorId);
  264. }
  265. });
  266. }
  267. public static void setBottomTabBadgeByIndex(final Integer index, final String badge) {
  268. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  269. if (currentActivity == null) {
  270. return;
  271. }
  272. NavigationApplication.instance.runOnMainThread(new Runnable() {
  273. @Override
  274. public void run() {
  275. currentActivity.setBottomTabBadgeByIndex(index, badge);
  276. }
  277. });
  278. }
  279. public static void setBottomTabBadgeByNavigatorId(final String navigatorId, final String badge) {
  280. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  281. if (currentActivity == null) {
  282. return;
  283. }
  284. NavigationApplication.instance.runOnMainThread(new Runnable() {
  285. @Override
  286. public void run() {
  287. currentActivity.setBottomTabBadgeByNavigatorId(navigatorId, badge);
  288. }
  289. });
  290. }
  291. public static void showSlidingOverlay(final SlidingOverlayParams params) {
  292. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  293. if (currentActivity == null) {
  294. return;
  295. }
  296. NavigationApplication.instance.runOnMainThread(new Runnable() {
  297. @Override
  298. public void run() {
  299. currentActivity.showSlidingOverlay(params);
  300. }
  301. });
  302. }
  303. public static void hideSlidingOverlay() {
  304. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  305. if (currentActivity == null) {
  306. return;
  307. }
  308. NavigationApplication.instance.runOnMainThread(new Runnable() {
  309. @Override
  310. public void run() {
  311. currentActivity.hideSlidingOverlay();
  312. }
  313. });
  314. }
  315. public static void showSnackbar(final SnackbarParams params) {
  316. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  317. if (currentActivity == null) {
  318. return;
  319. }
  320. NavigationApplication.instance.runOnMainThread(new Runnable() {
  321. @Override
  322. public void run() {
  323. currentActivity.showSnackbar(params);
  324. }
  325. });
  326. }
  327. public static void showContextualMenu(final String screenInstanceId, final ContextualMenuParams params, final Callback onButtonClicked) {
  328. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  329. if (currentActivity == null) {
  330. return;
  331. }
  332. NavigationApplication.instance.runOnMainThread(new Runnable() {
  333. @Override
  334. public void run() {
  335. currentActivity.showContextualMenu(screenInstanceId, params, onButtonClicked);
  336. }
  337. });
  338. }
  339. public static void dismissContextualMenu(final String screenInstanceId) {
  340. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  341. if (currentActivity == null) {
  342. return;
  343. }
  344. NavigationApplication.instance.runOnMainThread(new Runnable() {
  345. @Override
  346. public void run() {
  347. currentActivity.dismissContextualMenu(screenInstanceId);
  348. }
  349. });
  350. }
  351. public static void dismissSnackbar() {
  352. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  353. if (currentActivity == null) {
  354. return;
  355. }
  356. NavigationApplication.instance.runOnMainThread(new Runnable() {
  357. @Override
  358. public void run() {
  359. currentActivity.dismissSnackbar();
  360. }
  361. });
  362. }
  363. }