123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- package com.reactnativenavigation.views;
-
- import android.content.Context;
- import android.graphics.Color;
- import android.view.View;
-
- import com.balysv.materialmenu.MaterialMenuDrawable;
- import com.reactnativenavigation.NavigationApplication;
- import com.reactnativenavigation.params.TitleBarButtonParams;
- import com.reactnativenavigation.params.TitleBarLeftButtonParams;
- import com.reactnativenavigation.utils.ViewUtils;
-
- class LeftButton extends MaterialMenuDrawable implements View.OnClickListener {
-
- private static int getColor(TitleBarButtonParams params) {
- return params != null && params.color.hasColor() ?
- params.color.getColor() :
- Color.BLACK;
- }
-
- private TitleBarLeftButtonParams params;
- private final LeftButtonOnClickListener onClickListener;
- private String navigatorEventId;
- private final boolean overrideBackPressInJs;
-
- LeftButton(Context context,
- TitleBarLeftButtonParams params,
- LeftButtonOnClickListener onClickListener,
- String navigatorEventId,
- boolean overrideBackPressInJs) {
- super(context, getColor(params), Stroke.THIN);
- this.params = params;
- this.onClickListener = onClickListener;
- this.navigatorEventId = navigatorEventId;
- this.overrideBackPressInJs = overrideBackPressInJs;
- setInitialState();
- setColor();
- }
-
- void setIconState(TitleBarLeftButtonParams params) {
- this.params = params;
- setColor();
- animateIconState(params.iconState);
- }
-
- void setCustomIcon(TitleBarLeftButtonParams params) {
- this.params = params;
- setColor();
- }
-
- @Override
- public void onClick(View v) {
- if (isBackButton()) {
- handleBackButtonClick();
- } else if (isSideMenuButton()) {
- onClickListener.onSideMenuButtonClick();
- } else {
- sendClickEvent();
- }
- }
-
- private void handleBackButtonClick() {
- if (overrideBackPressInJs) {
- NavigationApplication.instance.getEventEmitter().sendNavigatorEvent("backPress", navigatorEventId);
- } else {
- onClickListener.onTitleBarBackButtonClick();
- }
- }
-
- private void setInitialState() {
- if (params != null) {
- if (params.iconState != null) {
- setIconState(params.iconState);
- }
- } else {
- setVisible(false);
- }
- }
-
- private void setColor() {
- if (!params.color.hasColor()) {
- return;
- }
- if (params.hasDefaultIcon()) {
- setColor(params.color.getColor());
- } else if (params.hasCustomIcon()) {
- ViewUtils.tintDrawable(params.icon, params.color.getColor(), true);
- }
- }
-
- @Override
- public void setColor(int color) {
- if (params.hasDefaultIcon()) {
- super.setColor(color);
- } else {
- ViewUtils.tintDrawable(params.icon, color, true );
- }
- }
-
- private boolean isBackButton() {
- return params.hasDefaultIcon() && getIconState() == IconState.ARROW;
- }
-
- private boolean isSideMenuButton() {
- return params.hasDefaultIcon() && getIconState() == IconState.BURGER;
- }
-
- private void sendClickEvent() {
- NavigationApplication.instance.getEventEmitter().sendNavigatorEvent(params.eventId, navigatorEventId);
- }
-
- void updateNavigatorEventId(String navigatorEventId) {
- this.navigatorEventId = navigatorEventId;
- }
- }
|