react-native-navigation的迁移库

NavigationCommandsHandler.java 13KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367
  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 com.reactnativenavigation.views.SideMenu.Side;
  15. import java.util.List;
  16. public class NavigationCommandsHandler {
  17. private static final String ACTIVITY_PARAMS_BUNDLE = "ACTIVITY_PARAMS_BUNDLE";
  18. static ActivityParams parseActivityParams(Intent intent) {
  19. return ActivityParamsParser.parse(intent.getBundleExtra(NavigationCommandsHandler.ACTIVITY_PARAMS_BUNDLE));
  20. }
  21. /**
  22. * start a new activity with CLEAR_TASK | NEW_TASK
  23. *
  24. * @param params ActivityParams as bundle
  25. */
  26. public static void startApp(Bundle params, boolean portraitOnlyMode, boolean landscapeOnlyMode) {
  27. Intent intent;
  28. if (portraitOnlyMode) {
  29. intent = new Intent(NavigationApplication.instance, PortraitNavigationActivity.class);
  30. } else if (landscapeOnlyMode) {
  31. intent = new Intent(NavigationApplication.instance, LandscapeNavigationActivity.class);
  32. } else {
  33. intent = new Intent(NavigationApplication.instance, NavigationActivity.class);
  34. }
  35. IntentDataHandler.setIntentData(intent);
  36. intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
  37. intent.putExtra(ACTIVITY_PARAMS_BUNDLE, params);
  38. NavigationApplication.instance.startActivity(intent);
  39. }
  40. public static void push(Bundle screenParams) {
  41. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  42. if (currentActivity == null) {
  43. return;
  44. }
  45. final ScreenParams params = ScreenParamsParser.parse(screenParams);
  46. NavigationApplication.instance.runOnMainThread(new Runnable() {
  47. @Override
  48. public void run() {
  49. currentActivity.push(params);
  50. }
  51. });
  52. }
  53. public static void pop(Bundle screenParams) {
  54. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  55. if (currentActivity == null) {
  56. return;
  57. }
  58. final ScreenParams params = ScreenParamsParser.parse(screenParams);
  59. NavigationApplication.instance.runOnMainThread(new Runnable() {
  60. @Override
  61. public void run() {
  62. currentActivity.pop(params);
  63. }
  64. });
  65. }
  66. public static void popToRoot(Bundle screenParams) {
  67. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  68. if (currentActivity == null) {
  69. return;
  70. }
  71. final ScreenParams params = ScreenParamsParser.parse(screenParams);
  72. NavigationApplication.instance.runOnMainThread(new Runnable() {
  73. @Override
  74. public void run() {
  75. currentActivity.popToRoot(params);
  76. }
  77. });
  78. }
  79. public static void newStack(Bundle screenParams) {
  80. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  81. if (currentActivity == null) {
  82. return;
  83. }
  84. final ScreenParams params = ScreenParamsParser.parse(screenParams);
  85. NavigationApplication.instance.runOnMainThread(new Runnable() {
  86. @Override
  87. public void run() {
  88. currentActivity.newStack(params);
  89. }
  90. });
  91. }
  92. public static void setTopBarVisible(final String screenInstanceID, 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.setTopBarVisible(screenInstanceID, hidden, animated);
  101. }
  102. });
  103. }
  104. public static void setBottomTabsVisible(final boolean hidden, final boolean animated) {
  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.setBottomTabsVisible(hidden, animated);
  113. }
  114. });
  115. }
  116. public static void setScreenTitleBarTitle(final String screenInstanceId, final String title) {
  117. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  118. if (currentActivity == null) {
  119. return;
  120. }
  121. NavigationApplication.instance.runOnMainThread(new Runnable() {
  122. @Override
  123. public void run() {
  124. currentActivity.setTitleBarTitle(screenInstanceId, title);
  125. }
  126. });
  127. }
  128. public static void setScreenTitleBarSubtitle(final String screenInstanceId, final String subtitle) {
  129. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  130. if (currentActivity == null) {
  131. return;
  132. }
  133. NavigationApplication.instance.runOnMainThread(new Runnable() {
  134. @Override
  135. public void run() {
  136. currentActivity.setTitleBarSubtitle(screenInstanceId, subtitle);
  137. }
  138. });
  139. }
  140. public static void showModal(Bundle params) {
  141. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  142. if (currentActivity == null) {
  143. return;
  144. }
  145. final ScreenParams screenParams = ScreenParamsParser.parse(params);
  146. NavigationApplication.instance.runOnMainThread(new Runnable() {
  147. @Override
  148. public void run() {
  149. currentActivity.showModal(screenParams);
  150. }
  151. });
  152. }
  153. public static void setScreenTitleBarRightButtons(final String screenInstanceId,
  154. final String navigatorEventId,
  155. final List<TitleBarButtonParams> titleBarButtons) {
  156. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  157. if (currentActivity == null) {
  158. return;
  159. }
  160. NavigationApplication.instance.runOnMainThread(new Runnable() {
  161. @Override
  162. public void run() {
  163. currentActivity.setTitleBarButtons(screenInstanceId, navigatorEventId, titleBarButtons);
  164. }
  165. });
  166. }
  167. public static void setScreenTitleBarLeftButtons(final String screenInstanceId,
  168. final String navigatorEventId,
  169. final TitleBarLeftButtonParams titleBarButtons) {
  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.setTitleBarLeftButton(screenInstanceId, navigatorEventId, titleBarButtons);
  178. }
  179. });
  180. }
  181. public static void dismissTopModal() {
  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.dismissTopModal();
  190. }
  191. });
  192. }
  193. public static void dismissAllModals() {
  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.dismissAllModals();
  202. }
  203. });
  204. }
  205. public static void toggleSideMenuVisible(final boolean animated, final Side side) {
  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.toggleSideMenuVisible(animated, side);
  214. }
  215. });
  216. }
  217. public static void setSideMenuVisible(final boolean animated, final boolean visible, final Side side) {
  218. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  219. if (currentActivity == null) {
  220. return;
  221. }
  222. NavigationApplication.instance.runOnMainThread(new Runnable() {
  223. @Override
  224. public void run() {
  225. currentActivity.setSideMenuVisible(animated, visible, side);
  226. }
  227. });
  228. }
  229. public static void selectBottomTabByTabIndex(final Integer index) {
  230. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  231. if (currentActivity == null) {
  232. return;
  233. }
  234. NavigationApplication.instance.runOnMainThread(new Runnable() {
  235. @Override
  236. public void run() {
  237. currentActivity.selectBottomTabByTabIndex(index);
  238. }
  239. });
  240. }
  241. public static void selectBottomTabByNavigatorId(final String navigatorId) {
  242. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  243. if (currentActivity == null) {
  244. return;
  245. }
  246. NavigationApplication.instance.runOnMainThread(new Runnable() {
  247. @Override
  248. public void run() {
  249. currentActivity.selectBottomTabByNavigatorId(navigatorId);
  250. }
  251. });
  252. }
  253. public static void setBottomTabBadgeByIndex(final Integer index, final String badge) {
  254. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  255. if (currentActivity == null) {
  256. return;
  257. }
  258. NavigationApplication.instance.runOnMainThread(new Runnable() {
  259. @Override
  260. public void run() {
  261. currentActivity.setBottomTabBadgeByIndex(index, badge);
  262. }
  263. });
  264. }
  265. public static void setBottomTabBadgeByNavigatorId(final String navigatorId, final String badge) {
  266. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  267. if (currentActivity == null) {
  268. return;
  269. }
  270. NavigationApplication.instance.runOnMainThread(new Runnable() {
  271. @Override
  272. public void run() {
  273. currentActivity.setBottomTabBadgeByNavigatorId(navigatorId, badge);
  274. }
  275. });
  276. }
  277. public static void showSnackbar(final SnackbarParams params) {
  278. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  279. if (currentActivity == null) {
  280. return;
  281. }
  282. NavigationApplication.instance.runOnMainThread(new Runnable() {
  283. @Override
  284. public void run() {
  285. currentActivity.showSnackbar(params);
  286. }
  287. });
  288. }
  289. public static void showContextualMenu(final String screenInstanceId, final ContextualMenuParams params, final Callback onButtonClicked) {
  290. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  291. if (currentActivity == null) {
  292. return;
  293. }
  294. NavigationApplication.instance.runOnMainThread(new Runnable() {
  295. @Override
  296. public void run() {
  297. currentActivity.showContextualMenu(screenInstanceId, params, onButtonClicked);
  298. }
  299. });
  300. }
  301. public static void dismissContextualMenu(final String screenInstanceId) {
  302. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  303. if (currentActivity == null) {
  304. return;
  305. }
  306. NavigationApplication.instance.runOnMainThread(new Runnable() {
  307. @Override
  308. public void run() {
  309. currentActivity.dismissContextualMenu(screenInstanceId);
  310. }
  311. });
  312. }
  313. }