react-native-navigation的迁移库

ModalController.java 2.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. package com.reactnativenavigation.controllers;
  2. import android.support.v7.app.AppCompatActivity;
  3. import com.reactnativenavigation.layouts.ScreenStackContainer;
  4. import com.reactnativenavigation.params.ScreenParams;
  5. import com.reactnativenavigation.params.TitleBarButtonParams;
  6. import com.reactnativenavigation.params.TitleBarLeftButtonParams;
  7. import java.util.List;
  8. import java.util.Stack;
  9. public class ModalController implements ScreenStackContainer, Modal.OnModalDismissedListener {
  10. private final AppCompatActivity activity;
  11. private Stack<Modal> stack = new Stack<>();
  12. public ModalController(AppCompatActivity activity) {
  13. this.activity = activity;
  14. }
  15. public void showModal(ScreenParams screenParams) {
  16. Modal modal = new Modal(activity, this, screenParams);
  17. modal.show();
  18. stack.add(modal);
  19. }
  20. public void dismissTopModal() {
  21. if (isShowing()) {
  22. stack.pop().dismiss();
  23. }
  24. }
  25. public void dismissAllModals() {
  26. while (isShowing()) {
  27. dismissTopModal();
  28. }
  29. }
  30. public boolean isShowing() {
  31. return !stack.empty();
  32. }
  33. public void push(ScreenParams params) {
  34. stack.peek().push(params);
  35. }
  36. @Override
  37. public void pop(ScreenParams screenParams) {
  38. stack.peek().pop(screenParams);
  39. }
  40. @Override
  41. public void popToRoot(ScreenParams params) {
  42. stack.peek().popToRoot(params);
  43. }
  44. @Override
  45. public void newStack(ScreenParams params) {
  46. stack.peek().newStack(params);
  47. }
  48. @Override
  49. public void destroy() {
  50. for (Modal modal : stack) {
  51. modal.destroy();
  52. modal.dismiss();
  53. }
  54. stack.clear();
  55. }
  56. @Override
  57. public void onModalDismissed(Modal modal) {
  58. stack.remove(modal);
  59. }
  60. public void setTopBarVisible(String screenInstanceId, boolean hidden, boolean animated) {
  61. for (Modal modal : stack) {
  62. modal.setTopBarVisible(screenInstanceId, hidden, animated);
  63. }
  64. }
  65. public void setTitleBarTitle(String screenInstanceId, String title) {
  66. for (Modal modal : stack) {
  67. modal.setTitleBarTitle(screenInstanceId, title);
  68. }
  69. }
  70. public void setTitleBarRightButtons(String screenInstanceId, String navigatorEventId, List<TitleBarButtonParams> titleBarButtons) {
  71. for (Modal modal : stack) {
  72. modal.setTitleBarRightButtons(screenInstanceId, navigatorEventId, titleBarButtons);
  73. }
  74. }
  75. public void setTitleBarLeftButton(String screenInstanceId, String navigatorEventId, TitleBarLeftButtonParams titleBarLeftButton) {
  76. for (Modal modal : stack) {
  77. modal.setTitleBarLeftButton(screenInstanceId, navigatorEventId, titleBarLeftButton);
  78. }
  79. }
  80. @Override
  81. public void onTitleBarBackPress() {
  82. // Do nothing and let the layout handle the back press
  83. }
  84. }