package com.reactnativenavigation.views; import android.content.Context; import android.graphics.Color; import android.text.TextUtils; import com.aurelhubert.ahbottomnavigation.AHBottomNavigation; import com.aurelhubert.ahbottomnavigation.AHBottomNavigationItem; import com.reactnativenavigation.animation.VisibilityAnimator; import com.reactnativenavigation.params.AppStyle; import com.reactnativenavigation.params.ScreenParams; import com.reactnativenavigation.params.StyleParams; import com.reactnativenavigation.utils.ViewUtils; import java.util.List; public class BottomTabs extends AHBottomNavigation { private VisibilityAnimator visibilityAnimator; public BottomTabs(Context context) { super(context); setForceTint(true); setId(ViewUtils.generateViewId()); createVisibilityAnimator(); setStyle(); setFontFamily(); } public void addTabs(List<ScreenParams> params, OnTabSelectedListener onTabSelectedListener) { for (ScreenParams screenParams : params) { AHBottomNavigationItem item = new AHBottomNavigationItem(screenParams.tabLabel, screenParams.tabIcon, Color.GRAY); addItem(item); setOnTabSelectedListener(onTabSelectedListener); } setTitlesDisplayState(); } public void setStyleFromScreen(StyleParams params) { if (params.bottomTabsColor.hasColor()) { setBackgroundColor(params.bottomTabsColor); } if (params.bottomTabsButtonColor.hasColor()) { setInactiveColor(params.bottomTabsButtonColor.getColor()); } if (params.selectedBottomTabsButtonColor.hasColor()) { setAccentColor(params.selectedBottomTabsButtonColor.getColor()); } setVisibility(params.bottomTabsHidden, true); } public void setTabButton(ScreenParams params, Integer index) { if (params.tabIcon != null) { AHBottomNavigationItem item = this.getItem(index); item.setDrawable(params.tabIcon); refresh(); } } private void setTitlesDisplayState() { if (AppStyle.appStyle.forceTitlesDisplay) { setTitleState(TitleState.ALWAYS_SHOW); } else if (hasTabsWithLabels()) { setTitleState(TitleState.SHOW_WHEN_ACTIVE); } else { setTitleState(TitleState.ALWAYS_HIDE); } } private boolean hasTabsWithLabels() { for (int i = 0; i < getItemsCount(); i++) { String title = getItem(0).getTitle(getContext()); if (!TextUtils.isEmpty(title)) { return true; } } return false; } public void setVisibility(boolean hidden, boolean animated) { if (visibilityAnimator != null) { visibilityAnimator.setVisible(!hidden, animated); } else { setVisibility(hidden); } } private void setBackgroundColor(StyleParams.Color bottomTabsColor) { if (bottomTabsColor.hasColor()) { setDefaultBackgroundColor(bottomTabsColor.getColor()); } else { setDefaultBackgroundColor(Color.WHITE); } } private void setVisibility(boolean bottomTabsHidden) { setVisibility(bottomTabsHidden ? GONE : VISIBLE); } private void createVisibilityAnimator() { ViewUtils.runOnPreDraw(this, new Runnable() { @Override public void run() { visibilityAnimator = new VisibilityAnimator(BottomTabs.this, VisibilityAnimator.HideDirection.Down, getHeight()); } }); } private void setStyle() { if (hasBadgeBackgroundColor()) { setNotificationBackgroundColor(AppStyle.appStyle.bottomTabBadgeBackgroundColor.getColor()); } if (hasBadgeTextColor()) { setNotificationTextColor(AppStyle.appStyle.bottomTabBadgeTextColor.getColor()); } } private boolean hasBadgeTextColor() { return AppStyle.appStyle.bottomTabBadgeTextColor != null && AppStyle.appStyle.bottomTabBadgeTextColor.hasColor(); } private boolean hasBadgeBackgroundColor() { return AppStyle.appStyle.bottomTabBadgeBackgroundColor != null && AppStyle.appStyle.bottomTabBadgeBackgroundColor.hasColor(); } private void setFontFamily() { if (AppStyle.appStyle.bottomTabFontFamily.hasFont()) { setTitleTypeface(AppStyle.appStyle.bottomTabFontFamily.get()); } } }