react-native-navigation的迁移库

NavigationCommandsHandler.java 19KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555
  1. package com.reactnativenavigation.controllers;
  2. import android.content.*;
  3. import android.os.*;
  4. import com.facebook.react.bridge.*;
  5. import com.reactnativenavigation.*;
  6. import com.reactnativenavigation.params.*;
  7. import com.reactnativenavigation.params.parsers.*;
  8. import com.reactnativenavigation.react.*;
  9. import com.reactnativenavigation.utils.*;
  10. import com.reactnativenavigation.views.SideMenu.*;
  11. import java.util.*;
  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. public static void startApp(Bundle params, Promise promise) {
  18. Intent intent = new Intent(NavigationApplication.instance, NavigationActivity.class);
  19. IntentDataHandler.onStartApp(intent);
  20. intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
  21. intent.putExtra(ACTIVITY_PARAMS_BUNDLE, params);
  22. intent.putExtra("animationType", params.getString("animationType"));
  23. NavigationActivity.setStartAppPromise(promise);
  24. NavigationApplication.instance.startActivity(intent);
  25. }
  26. public static void push(Bundle screenParams, final Promise onPushComplete) {
  27. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  28. if (currentActivity == null) {
  29. return;
  30. }
  31. final ScreenParams params = ScreenParamsParser.parse(screenParams);
  32. NavigationApplication.instance.runOnMainThread(new Runnable() {
  33. @Override
  34. public void run() {
  35. currentActivity.push(params, onPushComplete);
  36. }
  37. });
  38. }
  39. public static void pop(Bundle screenParams) {
  40. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  41. if (currentActivity == null) {
  42. return;
  43. }
  44. final ScreenParams params = ScreenParamsParser.parse(screenParams);
  45. NavigationApplication.instance.runOnMainThread(new Runnable() {
  46. @Override
  47. public void run() {
  48. currentActivity.pop(params);
  49. }
  50. });
  51. }
  52. public static void popToRoot(Bundle screenParams) {
  53. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  54. if (currentActivity == null) {
  55. return;
  56. }
  57. final ScreenParams params = ScreenParamsParser.parse(screenParams);
  58. NavigationApplication.instance.runOnMainThread(new Runnable() {
  59. @Override
  60. public void run() {
  61. currentActivity.popToRoot(params);
  62. }
  63. });
  64. }
  65. public static void newStack(Bundle screenParams) {
  66. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  67. if (currentActivity == null) {
  68. return;
  69. }
  70. final ScreenParams params = ScreenParamsParser.parse(screenParams);
  71. NavigationApplication.instance.runOnMainThread(new Runnable() {
  72. @Override
  73. public void run() {
  74. currentActivity.newStack(params);
  75. }
  76. });
  77. }
  78. public static void setTopBarVisible(final String screenInstanceID, final boolean hidden, final boolean animated) {
  79. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  80. if (currentActivity == null) {
  81. return;
  82. }
  83. NavigationApplication.instance.runOnMainThread(new Runnable() {
  84. @Override
  85. public void run() {
  86. currentActivity.setTopBarVisible(screenInstanceID, hidden, animated);
  87. }
  88. });
  89. }
  90. public static void setBottomTabsVisible(final boolean hidden, final boolean animated) {
  91. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  92. if (currentActivity == null) {
  93. return;
  94. }
  95. NavigationApplication.instance.runOnMainThread(new Runnable() {
  96. @Override
  97. public void run() {
  98. currentActivity.setBottomTabsVisible(hidden, animated);
  99. }
  100. });
  101. }
  102. public static void setScreenTitleBarTitle(final String screenInstanceId, final String title) {
  103. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  104. if (currentActivity == null) {
  105. return;
  106. }
  107. NavigationApplication.instance.runOnMainThread(new Runnable() {
  108. @Override
  109. public void run() {
  110. currentActivity.setTitleBarTitle(screenInstanceId, title);
  111. }
  112. });
  113. }
  114. public static void setScreenTitleBarSubtitle(final String screenInstanceId, final String subtitle) {
  115. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  116. if (currentActivity == null) {
  117. return;
  118. }
  119. NavigationApplication.instance.runOnMainThread(new Runnable() {
  120. @Override
  121. public void run() {
  122. currentActivity.setTitleBarSubtitle(screenInstanceId, subtitle);
  123. }
  124. });
  125. }
  126. public static void showModal(final Bundle params) {
  127. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  128. if (currentActivity == null) {
  129. return;
  130. }
  131. NavigationApplication.instance.runOnMainThread(new Runnable() {
  132. @Override
  133. public void run() {
  134. currentActivity.showModal(ScreenParamsParser.parse(params));
  135. }
  136. });
  137. }
  138. public static void showLightBox(final LightBoxParams params) {
  139. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  140. if (currentActivity == null) {
  141. return;
  142. }
  143. NavigationApplication.instance.runOnMainThread(new Runnable() {
  144. @Override
  145. public void run() {
  146. currentActivity.showLightBox(params);
  147. }
  148. });
  149. }
  150. public static void dismissLightBox() {
  151. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  152. if (currentActivity == null) {
  153. return;
  154. }
  155. NavigationApplication.instance.runOnMainThread(new Runnable() {
  156. @Override
  157. public void run() {
  158. currentActivity.dismissLightBox();
  159. }
  160. });
  161. }
  162. public static void setScreenTitleBarRightButtons(final String screenInstanceId,
  163. final String navigatorEventId,
  164. final List<TitleBarButtonParams> titleBarButtons) {
  165. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  166. if (currentActivity == null) {
  167. return;
  168. }
  169. NavigationApplication.instance.runOnMainThread(new Runnable() {
  170. @Override
  171. public void run() {
  172. currentActivity.setTitleBarButtons(screenInstanceId, navigatorEventId, titleBarButtons);
  173. }
  174. });
  175. }
  176. public static void setScreenTitleBarLeftButtons(final String screenInstanceId,
  177. final String navigatorEventId,
  178. final TitleBarLeftButtonParams titleBarButtons) {
  179. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  180. if (currentActivity == null) {
  181. return;
  182. }
  183. NavigationApplication.instance.runOnMainThread(new Runnable() {
  184. @Override
  185. public void run() {
  186. currentActivity.setTitleBarLeftButton(screenInstanceId, navigatorEventId, titleBarButtons);
  187. }
  188. });
  189. }
  190. public static void setScreenFab(final String screenInstanceId, final String navigatorEventId, final FabParams fab) {
  191. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  192. if (currentActivity == null) {
  193. return;
  194. }
  195. NavigationApplication.instance.runOnMainThread(new Runnable() {
  196. @Override
  197. public void run() {
  198. currentActivity.setScreenFab(screenInstanceId, navigatorEventId, fab);
  199. }
  200. });
  201. }
  202. public static void setScreenStyle(final String screenInstanceId, final Bundle styleParams) {
  203. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  204. if (currentActivity == null) {
  205. return;
  206. }
  207. NavigationApplication.instance.runOnMainThread(new Runnable() {
  208. @Override
  209. public void run() {
  210. currentActivity.setScreenStyle(screenInstanceId, styleParams);
  211. }
  212. });
  213. }
  214. public static void dismissTopModal(final ScreenParams params) {
  215. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  216. if (currentActivity == null) {
  217. return;
  218. }
  219. NavigationApplication.instance.runOnMainThread(new Runnable() {
  220. @Override
  221. public void run() {
  222. currentActivity.dismissTopModal(params);
  223. }
  224. });
  225. }
  226. public static void dismissAllModals() {
  227. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  228. if (currentActivity == null) {
  229. return;
  230. }
  231. NavigationApplication.instance.runOnMainThread(new Runnable() {
  232. @Override
  233. public void run() {
  234. currentActivity.dismissAllModals();
  235. }
  236. });
  237. }
  238. public static void toggleSideMenuVisible(final boolean animated, final Side side) {
  239. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  240. if (currentActivity == null) {
  241. return;
  242. }
  243. NavigationApplication.instance.runOnMainThread(new Runnable() {
  244. @Override
  245. public void run() {
  246. currentActivity.toggleSideMenuVisible(animated, side);
  247. }
  248. });
  249. }
  250. public static void setSideMenuVisible(final boolean animated, final boolean visible, final Side side) {
  251. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  252. if (currentActivity == null) {
  253. return;
  254. }
  255. NavigationApplication.instance.runOnMainThread(new Runnable() {
  256. @Override
  257. public void run() {
  258. currentActivity.setSideMenuVisible(animated, visible, side);
  259. }
  260. });
  261. }
  262. public static void setSideMenuEnabled(final boolean enabled, final Side side) {
  263. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  264. if (currentActivity == null) {
  265. return;
  266. }
  267. NavigationApplication.instance.runOnMainThread(new Runnable() {
  268. @Override
  269. public void run() {
  270. currentActivity.setSideMenuEnabled(enabled, side);
  271. }
  272. });
  273. }
  274. public static void selectTopTabByTabIndex(final String screenInstanceId, final int index) {
  275. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  276. if (currentActivity == null) {
  277. return;
  278. }
  279. NavigationApplication.instance.runOnMainThread(new Runnable() {
  280. @Override
  281. public void run() {
  282. currentActivity.selectTopTabByTabIndex(screenInstanceId, index);
  283. }
  284. });
  285. }
  286. public static void selectTopTabByScreen(final String screenInstanceId) {
  287. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  288. if (currentActivity == null) {
  289. return;
  290. }
  291. NavigationApplication.instance.runOnMainThread(new Runnable() {
  292. @Override
  293. public void run() {
  294. currentActivity.selectTopTabByScreen(screenInstanceId);
  295. }
  296. });
  297. }
  298. public static void selectBottomTabByTabIndex(final Integer index) {
  299. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  300. if (currentActivity == null) {
  301. return;
  302. }
  303. NavigationApplication.instance.runOnMainThread(new Runnable() {
  304. @Override
  305. public void run() {
  306. currentActivity.selectBottomTabByTabIndex(index);
  307. }
  308. });
  309. }
  310. public static void selectBottomTabByNavigatorId(final String navigatorId) {
  311. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  312. if (currentActivity == null) {
  313. return;
  314. }
  315. NavigationApplication.instance.runOnMainThread(new Runnable() {
  316. @Override
  317. public void run() {
  318. currentActivity.selectBottomTabByNavigatorId(navigatorId);
  319. }
  320. });
  321. }
  322. public static void setBottomTabBadgeByIndex(final Integer index, final String badge) {
  323. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  324. if (currentActivity == null) {
  325. return;
  326. }
  327. NavigationApplication.instance.runOnMainThread(new Runnable() {
  328. @Override
  329. public void run() {
  330. currentActivity.setBottomTabBadgeByIndex(index, badge);
  331. }
  332. });
  333. }
  334. public static void setBottomTabBadgeByNavigatorId(final String navigatorId, final String badge) {
  335. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  336. if (currentActivity == null) {
  337. return;
  338. }
  339. NavigationApplication.instance.runOnMainThread(new Runnable() {
  340. @Override
  341. public void run() {
  342. currentActivity.setBottomTabBadgeByNavigatorId(navigatorId, badge);
  343. }
  344. });
  345. }
  346. public static void setBottomTabButtonByIndex(final Integer index, final Bundle screenParams) {
  347. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  348. if (currentActivity == null) {
  349. return;
  350. }
  351. final ScreenParams params = ScreenParamsParser.parse(screenParams);
  352. NavigationApplication.instance.runOnMainThread(new Runnable() {
  353. @Override
  354. public void run() {
  355. currentActivity.setBottomTabButtonByIndex(index, params);
  356. }
  357. });
  358. }
  359. public static void setBottomTabButtonByNavigatorId(final String navigatorId, final Bundle screenParams) {
  360. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  361. if (currentActivity == null) {
  362. return;
  363. }
  364. final ScreenParams params = ScreenParamsParser.parse(screenParams);
  365. NavigationApplication.instance.runOnMainThread(new Runnable() {
  366. @Override
  367. public void run() {
  368. currentActivity.setBottomTabButtonByNavigatorId(navigatorId, params);
  369. }
  370. });
  371. }
  372. public static void showSlidingOverlay(final SlidingOverlayParams params) {
  373. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  374. if (currentActivity == null) {
  375. return;
  376. }
  377. NavigationApplication.instance.runOnMainThread(new Runnable() {
  378. @Override
  379. public void run() {
  380. currentActivity.showSlidingOverlay(params);
  381. }
  382. });
  383. }
  384. public static void hideSlidingOverlay() {
  385. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  386. if (currentActivity == null) {
  387. return;
  388. }
  389. NavigationApplication.instance.runOnMainThread(new Runnable() {
  390. @Override
  391. public void run() {
  392. currentActivity.hideSlidingOverlay();
  393. }
  394. });
  395. }
  396. public static void showSnackbar(final SnackbarParams params) {
  397. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  398. if (currentActivity == null) {
  399. return;
  400. }
  401. NavigationApplication.instance.runOnMainThread(new Runnable() {
  402. @Override
  403. public void run() {
  404. currentActivity.showSnackbar(params);
  405. }
  406. });
  407. }
  408. public static void showContextualMenu(final String screenInstanceId, final ContextualMenuParams params, final Callback onButtonClicked) {
  409. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  410. if (currentActivity == null) {
  411. return;
  412. }
  413. NavigationApplication.instance.runOnMainThread(new Runnable() {
  414. @Override
  415. public void run() {
  416. currentActivity.showContextualMenu(screenInstanceId, params, onButtonClicked);
  417. }
  418. });
  419. }
  420. public static void dismissContextualMenu(final String screenInstanceId) {
  421. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  422. if (currentActivity == null) {
  423. return;
  424. }
  425. NavigationApplication.instance.runOnMainThread(new Runnable() {
  426. @Override
  427. public void run() {
  428. currentActivity.dismissContextualMenu(screenInstanceId);
  429. }
  430. });
  431. }
  432. public static void dismissSnackbar() {
  433. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  434. if (currentActivity == null) {
  435. return;
  436. }
  437. NavigationApplication.instance.runOnMainThread(new Runnable() {
  438. @Override
  439. public void run() {
  440. currentActivity.dismissSnackbar();
  441. }
  442. });
  443. }
  444. public static void getOrientation(Promise promise) {
  445. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  446. if (currentActivity == null) {
  447. return;
  448. }
  449. promise.resolve(OrientationHelper.getOrientation(currentActivity));
  450. }
  451. public static void isAppLaunched(Promise promise) {
  452. final boolean isAppLaunched = SplashActivity.isResumed || NavigationActivity.currentActivity != null;
  453. promise.resolve(isAppLaunched);
  454. }
  455. public static void isRootLaunched(Promise promise) {
  456. promise.resolve(NavigationActivity.currentActivity != null);
  457. }
  458. public static void getCurrentlyVisibleScreenId(final Promise promise) {
  459. final NavigationActivity currentActivity = NavigationActivity.currentActivity;
  460. if (currentActivity == null) {
  461. promise.resolve("");
  462. return;
  463. }
  464. NavigationApplication.instance.runOnMainThread(new Runnable() {
  465. @Override
  466. public void run() {
  467. WritableMap map = Arguments.createMap();
  468. map.putString("screenId", currentActivity.getCurrentlyVisibleScreenId());
  469. promise.resolve(map);
  470. }
  471. });
  472. }
  473. public static void getLaunchArgs(Promise promise) {
  474. Bundle bundle = LaunchArgs.instance.get();
  475. promise.resolve(Arguments.fromBundle(bundle));
  476. }
  477. }