react-native-navigation的迁移库

LeftButton.java 3.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. package com.reactnativenavigation.views;
  2. import android.content.Context;
  3. import android.graphics.Color;
  4. import android.view.View;
  5. import com.balysv.materialmenu.MaterialMenuDrawable;
  6. import com.reactnativenavigation.NavigationApplication;
  7. import com.reactnativenavigation.params.TitleBarButtonParams;
  8. import com.reactnativenavigation.params.TitleBarLeftButtonParams;
  9. import com.reactnativenavigation.utils.ViewUtils;
  10. class LeftButton extends MaterialMenuDrawable implements View.OnClickListener {
  11. private static int getColor(TitleBarButtonParams params) {
  12. return params != null && params.color.hasColor() ?
  13. params.color.getColor() :
  14. Color.BLACK;
  15. }
  16. private TitleBarLeftButtonParams params;
  17. private final LeftButtonOnClickListener onClickListener;
  18. private String navigatorEventId;
  19. private final boolean overrideBackPressInJs;
  20. LeftButton(Context context,
  21. TitleBarLeftButtonParams params,
  22. LeftButtonOnClickListener onClickListener,
  23. String navigatorEventId,
  24. boolean overrideBackPressInJs) {
  25. super(context, getColor(params), Stroke.THIN);
  26. this.params = params;
  27. this.onClickListener = onClickListener;
  28. this.navigatorEventId = navigatorEventId;
  29. this.overrideBackPressInJs = overrideBackPressInJs;
  30. setInitialState();
  31. setColor();
  32. }
  33. void setIconState(TitleBarLeftButtonParams params) {
  34. this.params = params;
  35. setColor();
  36. animateIconState(params.iconState);
  37. }
  38. void setCustomIcon(TitleBarLeftButtonParams params) {
  39. this.params = params;
  40. setColor();
  41. }
  42. @Override
  43. public void onClick(View v) {
  44. if (isBackButton()) {
  45. handleBackButtonClick();
  46. } else if (isSideMenuButton()) {
  47. onClickListener.onSideMenuButtonClick();
  48. } else {
  49. sendClickEvent();
  50. }
  51. }
  52. private void handleBackButtonClick() {
  53. if (overrideBackPressInJs) {
  54. NavigationApplication.instance.getEventEmitter().sendNavigatorEvent("backPress", navigatorEventId);
  55. } else {
  56. onClickListener.onTitleBarBackButtonClick();
  57. }
  58. }
  59. private void setInitialState() {
  60. if (params != null) {
  61. if (params.iconState != null) {
  62. setIconState(params.iconState);
  63. }
  64. } else {
  65. setVisible(false);
  66. }
  67. }
  68. private void setColor() {
  69. if (!params.color.hasColor()) {
  70. return;
  71. }
  72. if (params.hasDefaultIcon()) {
  73. setColor(params.color.getColor());
  74. } else if (params.hasCustomIcon()) {
  75. ViewUtils.tintDrawable(params.icon, params.color.getColor(), true);
  76. }
  77. }
  78. @Override
  79. public void setColor(int color) {
  80. if (params.hasDefaultIcon()) {
  81. super.setColor(color);
  82. } else {
  83. ViewUtils.tintDrawable(params.icon, color, true );
  84. }
  85. }
  86. private boolean isBackButton() {
  87. return params.hasDefaultIcon() && getIconState() == IconState.ARROW;
  88. }
  89. private boolean isSideMenuButton() {
  90. return params.hasDefaultIcon() && getIconState() == IconState.BURGER;
  91. }
  92. private void sendClickEvent() {
  93. NavigationApplication.instance.getEventEmitter().sendNavigatorEvent(params.eventId, navigatorEventId);
  94. }
  95. void updateNavigatorEventId(String navigatorEventId) {
  96. this.navigatorEventId = navigatorEventId;
  97. }
  98. }