react-native-navigation的迁移库

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. package com.reactnativenavigation.controllers;
  2. import android.app.Dialog;
  3. import android.content.DialogInterface;
  4. import android.support.v7.app.AppCompatActivity;
  5. import android.view.Window;
  6. import android.view.WindowManager;
  7. import com.facebook.react.bridge.Callback;
  8. import com.reactnativenavigation.R;
  9. import com.reactnativenavigation.layouts.Layout;
  10. import com.reactnativenavigation.layouts.ModalScreenLayout;
  11. import com.reactnativenavigation.layouts.ScreenStackContainer;
  12. import com.reactnativenavigation.params.AppStyle;
  13. import com.reactnativenavigation.params.ContextualMenuParams;
  14. import com.reactnativenavigation.params.Orientation;
  15. import com.reactnativenavigation.params.ScreenParams;
  16. import com.reactnativenavigation.params.TitleBarButtonParams;
  17. import com.reactnativenavigation.params.TitleBarLeftButtonParams;
  18. import java.util.List;
  19. public class Modal extends Dialog implements DialogInterface.OnDismissListener, ScreenStackContainer {
  20. private final AppCompatActivity activity;
  21. private final OnModalDismissedListener onModalDismissedListener;
  22. private final ScreenParams screenParams;
  23. private Layout layout;
  24. public void setTopBarVisible(String screenInstanceId, boolean hidden, boolean animated) {
  25. layout.setTopBarVisible(screenInstanceId, hidden, animated);
  26. }
  27. void setTitleBarTitle(String screenInstanceId, String title) {
  28. layout.setTitleBarTitle(screenInstanceId, title);
  29. }
  30. void setTitleBarSubtitle(String screenInstanceId, String subtitle) {
  31. layout.setTitleBarSubtitle(screenInstanceId, subtitle);
  32. }
  33. void setTitleBarRightButtons(String screenInstanceId, String navigatorEventId, List<TitleBarButtonParams> titleBarButtons) {
  34. layout.setTitleBarRightButtons(screenInstanceId, navigatorEventId, titleBarButtons);
  35. }
  36. public void setTitleBarLeftButton(String screenInstanceId, String navigatorEventId, TitleBarLeftButtonParams titleBarLeftButton) {
  37. layout.setTitleBarLeftButton(screenInstanceId, navigatorEventId, titleBarLeftButton);
  38. }
  39. public void showContextualMenu(String screenInstanceId, ContextualMenuParams params, Callback onButtonClicked) {
  40. layout.showContextualMenu(screenInstanceId, params, onButtonClicked);
  41. }
  42. public void dismissContextualMenu(String screenInstanceId) {
  43. layout.dismissContextualMenu(screenInstanceId);
  44. }
  45. @Override
  46. public boolean onTitleBarBackButtonClick() {
  47. if (!layout.onBackPressed()) {
  48. onBackPressed();
  49. }
  50. return true;
  51. }
  52. public void onSideMenuButtonClick() {
  53. }
  54. interface OnModalDismissedListener {
  55. void onModalDismissed(Modal modal);
  56. }
  57. public Modal(AppCompatActivity activity, OnModalDismissedListener onModalDismissedListener, ScreenParams screenParams) {
  58. super(activity, R.style.Modal);
  59. this.activity = activity;
  60. this.onModalDismissedListener = onModalDismissedListener;
  61. this.screenParams = screenParams;
  62. createContent();
  63. }
  64. public AppCompatActivity getActivity() {
  65. return activity;
  66. }
  67. private void createContent() {
  68. setCancelable(true);
  69. setOnDismissListener(this);
  70. requestWindowFeature(Window.FEATURE_NO_TITLE);
  71. layout = new ModalScreenLayout(getActivity(), screenParams, this);
  72. getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
  73. setOrientation(screenParams.styleParams.orientation);
  74. setContentView(layout.asView());
  75. }
  76. @Override
  77. public void push(ScreenParams params) {
  78. layout.push(params);
  79. }
  80. @Override
  81. public void pop(ScreenParams screenParams) {
  82. layout.pop(screenParams);
  83. }
  84. @Override
  85. public void popToRoot(ScreenParams params) {
  86. layout.popToRoot(params);
  87. }
  88. @Override
  89. public void newStack(ScreenParams params) {
  90. layout.newStack(params);
  91. }
  92. boolean containsNavigator(String navigatorId) {
  93. return layout.containsNavigator(navigatorId);
  94. }
  95. @Override
  96. public void destroy() {
  97. layout.destroy();
  98. }
  99. @Override
  100. public void onBackPressed() {
  101. if (!layout.onBackPressed()) {
  102. super.onBackPressed();
  103. }
  104. }
  105. @Override
  106. public void onDismiss(DialogInterface dialog) {
  107. destroy();
  108. setOrientation(AppStyle.appStyle.orientation);
  109. onModalDismissedListener.onModalDismissed(this);
  110. }
  111. void onModalDismissed() {
  112. layout.onModalDismissed();
  113. }
  114. private void setOrientation(Orientation orientation) {
  115. getActivity().setRequestedOrientation(orientation.orientationCode);
  116. }
  117. }