|
|
@@ -0,0 +1,503 @@
|
|
|
+/*
|
|
|
+ * COPYRIGHT (c) 2018 All rights reserved by HANWHA LIFE.
|
|
|
+ */
|
|
|
+package kr.co.zumo.app.lifeplus.manager;
|
|
|
+
|
|
|
+import android.content.Context;
|
|
|
+import android.support.annotation.StringRes;
|
|
|
+import android.support.v4.graphics.drawable.DrawableCompat;
|
|
|
+import android.view.LayoutInflater;
|
|
|
+import android.view.View;
|
|
|
+import android.widget.ImageView;
|
|
|
+import android.widget.TextView;
|
|
|
+
|
|
|
+import java.util.HashMap;
|
|
|
+
|
|
|
+import kr.co.zumo.app.R;
|
|
|
+import kr.co.zumo.app.lifeplus.util.ResourceUtil;
|
|
|
+
|
|
|
+/**
|
|
|
+ * NavigationBar
|
|
|
+ * <pre>
|
|
|
+ * </pre>
|
|
|
+ *
|
|
|
+ * @author 민효동
|
|
|
+ * @version 1.0
|
|
|
+ * @history 민효동 [2018. 10. 24.] [최초 작성]
|
|
|
+ * @since 2018. 10. 24.
|
|
|
+ */
|
|
|
+public class NavigationBar {
|
|
|
+ private View view;
|
|
|
+
|
|
|
+ private TextView actionBarTitle;
|
|
|
+ private ImageView imageBi;
|
|
|
+ private ImageView buttonBack;
|
|
|
+ private ImageView buttonSearch;
|
|
|
+ private ImageView buttonMenu;
|
|
|
+
|
|
|
+ private ImageView buttonArrow;
|
|
|
+ private ImageView buttonHome;
|
|
|
+ private ImageView buttonNotification;
|
|
|
+ private ImageView buttonSetting;
|
|
|
+ private ImageView buttonClose;
|
|
|
+ private TextView textButton;
|
|
|
+
|
|
|
+ private boolean isArrowOpened = false;
|
|
|
+
|
|
|
+ private HashMap<View, INavigationBarListener> clickListenerMap;
|
|
|
+
|
|
|
+ private NavigationBar(Context context) {
|
|
|
+
|
|
|
+ LayoutInflater inflater = LayoutInflater.from(context);
|
|
|
+ this.view = inflater.inflate(R.layout.action_bar, null);
|
|
|
+
|
|
|
+ init();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private void init() {
|
|
|
+ clickListenerMap = new HashMap<>();
|
|
|
+
|
|
|
+ actionBarTitle = view.findViewById(R.id.action_bar_title);
|
|
|
+ buttonArrow = view.findViewById(R.id.button_open_arrow);
|
|
|
+ imageBi = view.findViewById(R.id.image_bi);
|
|
|
+ buttonSearch = view.findViewById(R.id.button_search);
|
|
|
+ buttonMenu = view.findViewById(R.id.button_menu);
|
|
|
+ buttonBack = view.findViewById(R.id.button_back);
|
|
|
+
|
|
|
+ buttonHome = view.findViewById(R.id.button_home);
|
|
|
+ buttonNotification = view.findViewById(R.id.button_notification);
|
|
|
+ buttonSetting = view.findViewById(R.id.button_setting);
|
|
|
+ buttonClose = view.findViewById(R.id.button_close);
|
|
|
+ textButton = view.findViewById(R.id.text_sub);
|
|
|
+
|
|
|
+ setClickListener(buttonBack);
|
|
|
+ setClickListener(buttonSearch);
|
|
|
+ setClickListener(buttonMenu);
|
|
|
+ setClickListener(actionBarTitle);
|
|
|
+ setClickListener(buttonHome);
|
|
|
+ setClickListener(buttonNotification);
|
|
|
+ setClickListener(buttonSetting);
|
|
|
+ setClickListener(buttonClose);
|
|
|
+ setClickListener(textButton);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private void setClickListener(View view) {
|
|
|
+ view.setOnClickListener(v -> {
|
|
|
+ INavigationBarListener listener = clickListenerMap.get(v);
|
|
|
+ if (null != listener) {
|
|
|
+ listener.onClick(this);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ private void mapClickListener(View view, INavigationBarListener listener) {
|
|
|
+ clickListenerMap.put(view, listener);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * actionbar 제목 설정
|
|
|
+ *
|
|
|
+ * @param stringId
|
|
|
+ */
|
|
|
+ private void setTitle(@StringRes int stringId) {
|
|
|
+ actionBarTitle.setText(stringId);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 타이틀 보이기
|
|
|
+ * - setTitle() 해서 설정도 해줘야함.
|
|
|
+ *
|
|
|
+ * @param isVisible
|
|
|
+ */
|
|
|
+ private void setTitleVisible(boolean isVisible) {
|
|
|
+ setViewVisible(actionBarTitle, isVisible);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 백 버튼 보이기
|
|
|
+ *
|
|
|
+ * @param isVisible
|
|
|
+ */
|
|
|
+ private void setBackVisible(boolean isVisible) {
|
|
|
+ setViewVisible(buttonBack, isVisible);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * BI(Lifeplus) 보이기
|
|
|
+ *
|
|
|
+ * @param isVisible
|
|
|
+ */
|
|
|
+ private void setBiVisible(boolean isVisible) {
|
|
|
+ setViewVisible(imageBi, isVisible);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 검색 버튼 보이기
|
|
|
+ *
|
|
|
+ * @param isVisible
|
|
|
+ */
|
|
|
+ private void setSearchVisible(boolean isVisible) {
|
|
|
+ setViewVisible(buttonSearch, isVisible);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void setHomeVisible(boolean isVisible) {
|
|
|
+ setViewVisible(buttonHome, isVisible);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void setAlarmVisible(boolean isVisible) {
|
|
|
+ setViewVisible(buttonNotification, isVisible);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void setSettingVisible(boolean isVisible) {
|
|
|
+ setViewVisible(buttonSetting, isVisible);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void setCloseVisible(boolean isVisible) {
|
|
|
+ setViewVisible(buttonClose, isVisible);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void setTextButtonVisible(boolean isVisible) {
|
|
|
+ setViewVisible(textButton, isVisible);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void setArrowVisible(boolean isVisible) {
|
|
|
+ setViewVisible(buttonArrow, isVisible, View.GONE);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 메뉴 버튼 보이기
|
|
|
+ *
|
|
|
+ * @param isVisible
|
|
|
+ */
|
|
|
+ private void setMenuVisible(boolean isVisible) {
|
|
|
+ setViewVisible(buttonMenu, isVisible);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void setViewVisible(View view, boolean isVisible) {
|
|
|
+ if (null != view) {
|
|
|
+ setViewVisible(view, isVisible, View.INVISIBLE);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void setViewVisible(View view, boolean isVisible, int visibility) {
|
|
|
+ if (null != view) {
|
|
|
+ view.setVisibility(isVisible ? View.VISIBLE : visibility);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void setBackgroundTransparent(boolean isTransparent) {
|
|
|
+ view.setBackgroundResource(isTransparent ? android.R.color.transparent : R.color.C80FFFFFF);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void set(Builder newBuilder) {
|
|
|
+ setMenuVisible(newBuilder.isVisibleMenu);
|
|
|
+ mapClickListener(buttonMenu, newBuilder.menuListener);
|
|
|
+
|
|
|
+ setSearchVisible(newBuilder.isVisibleSearch);
|
|
|
+ mapClickListener(buttonSearch, newBuilder.searchListener);
|
|
|
+
|
|
|
+ setBiVisible(newBuilder.isVisibleBi);
|
|
|
+
|
|
|
+ setBackVisible(newBuilder.isVisibleBack);
|
|
|
+ mapClickListener(buttonBack, newBuilder.backListener);
|
|
|
+
|
|
|
+ setTitleVisible(newBuilder.isVisibleTitle);
|
|
|
+ setTitle(newBuilder.title);
|
|
|
+ mapClickListener(actionBarTitle, newBuilder.titleListener);
|
|
|
+
|
|
|
+ setBackgroundTransparent(newBuilder.isTransparentBackground);
|
|
|
+
|
|
|
+ setWhiteUi(newBuilder.isWhite);
|
|
|
+
|
|
|
+ setHomeVisible(newBuilder.isVisibleHome);
|
|
|
+ mapClickListener(buttonHome, newBuilder.homeListener);
|
|
|
+
|
|
|
+ setAlarmVisible(newBuilder.isVisibleNotification);
|
|
|
+ mapClickListener(buttonNotification, newBuilder.notificationListener);
|
|
|
+
|
|
|
+ setSettingVisible(newBuilder.isVisibleSetting);
|
|
|
+ mapClickListener(buttonSetting, newBuilder.settingListener);
|
|
|
+
|
|
|
+ setCloseVisible(newBuilder.isVisibleClose);
|
|
|
+ mapClickListener(buttonClose, newBuilder.closeListener);
|
|
|
+
|
|
|
+ setTextButtonVisible(newBuilder.isVisibleTextButton);
|
|
|
+ textButton.setText(newBuilder.text);
|
|
|
+ mapClickListener(textButton, newBuilder.textButtonListener);
|
|
|
+
|
|
|
+ setArrowVisible(newBuilder.isVisibleArrow);
|
|
|
+ if (null != newBuilder.arrowListener) {
|
|
|
+ buttonArrow.setOnClickListener(v -> {
|
|
|
+ if (isArrowOpened) {
|
|
|
+ // to close
|
|
|
+ buttonArrow.setImageResource(R.drawable.icon_h_down);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ // to open
|
|
|
+ buttonArrow.setImageResource(R.drawable.icon_header_up);
|
|
|
+ }
|
|
|
+ isArrowOpened = !isArrowOpened;
|
|
|
+ newBuilder.arrowListener.onClick(NavigationBar.this);
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void setWhiteUi(boolean isWhite) {
|
|
|
+ int color;
|
|
|
+ if (isWhite) {
|
|
|
+ color = ResourceUtil.getColor(R.color.CFFFFFF);
|
|
|
+ actionBarTitle.setTextColor(color);
|
|
|
+ DrawableCompat.setTint(buttonBack.getDrawable(), color);
|
|
|
+ DrawableCompat.setTint(imageBi.getDrawable(), color);
|
|
|
+ DrawableCompat.setTint(buttonBack.getDrawable(), color);
|
|
|
+ DrawableCompat.setTint(buttonSearch.getDrawable(), color);
|
|
|
+ DrawableCompat.setTint(buttonMenu.getDrawable(), color);
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ color = ResourceUtil.getColor(R.color.C000000);
|
|
|
+ actionBarTitle.setTextColor(color);
|
|
|
+ DrawableCompat.setTint(buttonBack.getDrawable(), color);
|
|
|
+ DrawableCompat.setTint(imageBi.getDrawable(), color);
|
|
|
+ DrawableCompat.setTint(buttonBack.getDrawable(), color);
|
|
|
+ DrawableCompat.setTint(buttonSearch.getDrawable(), color);
|
|
|
+ DrawableCompat.setTint(buttonMenu.getDrawable(), color);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /***********************************
|
|
|
+ * public
|
|
|
+ ***********************************/
|
|
|
+ /**
|
|
|
+ * show
|
|
|
+ */
|
|
|
+ public void show() {
|
|
|
+ setViewVisible(view, true, View.GONE);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * hide
|
|
|
+ */
|
|
|
+ public void hide() {
|
|
|
+ setViewVisible(view, false, View.GONE);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * view 반환
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public View getView() {
|
|
|
+ return view;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 화살표 (타이틀 옆) 열림/닫힘 확인
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public boolean isArrowOpened() {
|
|
|
+ return isArrowOpened;
|
|
|
+ }
|
|
|
+
|
|
|
+ /***********************************
|
|
|
+ * Builder
|
|
|
+ ***********************************/
|
|
|
+ public static class Builder {
|
|
|
+
|
|
|
+ private final Context context;
|
|
|
+ private boolean isVisibleTitle = false;
|
|
|
+ private boolean isVisibleBack = false;
|
|
|
+ private boolean isVisibleBi = false;
|
|
|
+ private boolean isVisibleSearch = false;
|
|
|
+ private boolean isVisibleMenu = false;
|
|
|
+ private int title = R.string.empty_string;
|
|
|
+ private boolean isTransparentBackground = false;
|
|
|
+ private boolean isWhite = false;
|
|
|
+ private boolean isVisibleArrow = false;
|
|
|
+
|
|
|
+ private boolean isVisibleHome = false;
|
|
|
+ private boolean isVisibleNotification = false;
|
|
|
+ private boolean isVisibleSetting = false;
|
|
|
+ private boolean isVisibleClose = false;
|
|
|
+ private boolean isVisibleTextButton = false;
|
|
|
+ private int text = R.string.empty_string;
|
|
|
+
|
|
|
+ private INavigationBarListener backListener = null;
|
|
|
+ private INavigationBarListener bookmarkListener = null;
|
|
|
+ private INavigationBarListener likeListener = null;
|
|
|
+ private INavigationBarListener menuListener = null;
|
|
|
+ private INavigationBarListener searchListener = null;
|
|
|
+ private INavigationBarListener shareListener = null;
|
|
|
+ private INavigationBarListener titleListener = null;
|
|
|
+
|
|
|
+ private INavigationBarListener homeListener = null;
|
|
|
+ private INavigationBarListener notificationListener = null;
|
|
|
+ private INavigationBarListener settingListener = null;
|
|
|
+ private INavigationBarListener closeListener = null;
|
|
|
+ private INavigationBarListener textButtonListener = null;
|
|
|
+ private INavigationBarListener arrowListener = null;
|
|
|
+
|
|
|
+ public Builder(Context context) {
|
|
|
+ this.context = context;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 타이틀 표시
|
|
|
+ *
|
|
|
+ * @param stringId @StringRes
|
|
|
+ * @return Builder
|
|
|
+ */
|
|
|
+ public Builder title(@StringRes int stringId, INavigationBarListener titleListener) {
|
|
|
+ this.title = stringId;
|
|
|
+ isVisibleTitle = true;
|
|
|
+ this.titleListener = titleListener;
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ public Builder title(@StringRes int stringId) {
|
|
|
+ return title(stringId, null);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * back button
|
|
|
+ *
|
|
|
+ * @return Builder
|
|
|
+ */
|
|
|
+ public Builder back(INavigationBarListener backListener) {
|
|
|
+ isVisibleBack = true;
|
|
|
+ this.backListener = backListener;
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * logo
|
|
|
+ *
|
|
|
+ * @return Builder
|
|
|
+ */
|
|
|
+ public Builder logo() {
|
|
|
+ isVisibleBi = true;
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * search button
|
|
|
+ *
|
|
|
+ * @return Builder
|
|
|
+ */
|
|
|
+ public Builder search(INavigationBarListener searchListener) {
|
|
|
+ isVisibleSearch = true;
|
|
|
+ this.searchListener = searchListener;
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * menu (burger)
|
|
|
+ *
|
|
|
+ * @return Builder
|
|
|
+ */
|
|
|
+ public Builder menu(INavigationBarListener menuListener) {
|
|
|
+ isVisibleMenu = true;
|
|
|
+ this.menuListener = menuListener;
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 배경 투명하게
|
|
|
+ *
|
|
|
+ * @return Builder
|
|
|
+ */
|
|
|
+ public Builder transparent() {
|
|
|
+ isTransparentBackground = true;
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 홈
|
|
|
+ *
|
|
|
+ * @return Builder
|
|
|
+ */
|
|
|
+ public Builder home(INavigationBarListener homeListener) {
|
|
|
+ isVisibleHome = true;
|
|
|
+ this.homeListener = homeListener;
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 알림
|
|
|
+ *
|
|
|
+ * @return Builder
|
|
|
+ */
|
|
|
+ public Builder notification(INavigationBarListener notificationListener) {
|
|
|
+ isVisibleNotification = true;
|
|
|
+ this.notificationListener = notificationListener;
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 세팅
|
|
|
+ *
|
|
|
+ * @return Builder
|
|
|
+ */
|
|
|
+ public Builder setting(INavigationBarListener settingListener) {
|
|
|
+ isVisibleSetting = true;
|
|
|
+ this.settingListener = settingListener;
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 닫기
|
|
|
+ *
|
|
|
+ * @return Builder
|
|
|
+ */
|
|
|
+ public Builder close(INavigationBarListener closeListener) {
|
|
|
+ isVisibleClose = true;
|
|
|
+ this.closeListener = closeListener;
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 텍스트 버튼 (닫기 버튼 옆)
|
|
|
+ *
|
|
|
+ * @return Builder
|
|
|
+ */
|
|
|
+ public Builder textButton(@StringRes int stringId, INavigationBarListener textButtonListener) {
|
|
|
+ text = stringId;
|
|
|
+ isVisibleTextButton = true;
|
|
|
+ this.textButtonListener = textButtonListener;
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * arrow (타이틀 옆)
|
|
|
+ *
|
|
|
+ * @return Builder
|
|
|
+ */
|
|
|
+ public Builder arrow(INavigationBarListener arrowListener) {
|
|
|
+ isVisibleArrow = true;
|
|
|
+ this.arrowListener = arrowListener;
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * UI 흰색 사용
|
|
|
+ *
|
|
|
+ * @return Builder
|
|
|
+ */
|
|
|
+ public Builder white() {
|
|
|
+ isWhite = true;
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+
|
|
|
+ public NavigationBar build() {
|
|
|
+ NavigationBar navigationBar = new NavigationBar(context);
|
|
|
+ navigationBar.set(this);
|
|
|
+ navigationBar.show();
|
|
|
+ return navigationBar;
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+}
|
|
|
+
|