123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- package com.reactnativenavigation.presentation;
-
- import android.view.ViewGroup;
- import android.view.ViewGroup.MarginLayoutParams;
-
- import com.reactnativenavigation.anim.BottomTabsAnimator;
- import com.reactnativenavigation.parse.AnimationsOptions;
- import com.reactnativenavigation.parse.BottomTabsOptions;
- import com.reactnativenavigation.parse.Options;
- import com.reactnativenavigation.utils.UiUtils;
- import com.reactnativenavigation.viewcontrollers.ViewController;
- import com.reactnativenavigation.viewcontrollers.bottomtabs.BottomTabFinder;
- import com.reactnativenavigation.viewcontrollers.bottomtabs.TabSelector;
- import com.reactnativenavigation.views.BottomTabs;
- import com.reactnativenavigation.views.Component;
-
- import java.util.List;
-
- public class BottomTabsOptionsPresenter {
- private final BottomTabFinder bottomTabFinder;
- private final List<ViewController> tabs;
- private Options defaultOptions;
- private BottomTabs bottomTabs;
- private BottomTabsAnimator animator;
- private TabSelector tabSelector;
-
- public BottomTabsOptionsPresenter(List<ViewController> tabs, Options defaultOptions) {
- this.tabs = tabs;
- this.defaultOptions = defaultOptions;
- this.bottomTabFinder = new BottomTabFinder(tabs);
- }
-
- public void setDefaultOptions(Options defaultOptions) {
- this.defaultOptions = defaultOptions;
- }
-
- public void bindView(BottomTabs bottomTabs, TabSelector tabSelector) {
- this.bottomTabs = bottomTabs;
- this.tabSelector = tabSelector;
- animator = new BottomTabsAnimator(bottomTabs);
- }
-
- public void applyLayoutParamsOptions(Options options, int tabIndex) {
- Options withDefaultOptions = options.copy().withDefaultOptions(defaultOptions);
- applyDrawBehind(withDefaultOptions.bottomTabsOptions, tabIndex);
- }
-
- public void present(Options options) {
- Options withDefaultOptions = options.copy().withDefaultOptions(defaultOptions);
- applyBottomTabsOptions(withDefaultOptions.bottomTabsOptions, withDefaultOptions.animations);
- }
-
- public void presentChildOptions(Options options, Component child) {
- Options withDefaultOptions = options.copy().withDefaultOptions(defaultOptions);
- applyBottomTabsOptions(withDefaultOptions.bottomTabsOptions, withDefaultOptions.animations);
- int tabIndex = bottomTabFinder.findByComponent(child);
- applyDrawBehind(withDefaultOptions.bottomTabsOptions, tabIndex);
- }
-
- private void applyDrawBehind(BottomTabsOptions options, int tabIndex) {
- ViewGroup tab = tabs.get(tabIndex).getView();
- MarginLayoutParams lp = (MarginLayoutParams) tab.getLayoutParams();
- if (options.drawBehind.isTrue()) {
- lp.bottomMargin = 0;
- }
- if (options.visible.isTrueOrUndefined() && options.drawBehind.isFalseOrUndefined()) {
- if (bottomTabs.getHeight() == 0) {
- UiUtils.runOnPreDrawOnce(bottomTabs, () -> lp.bottomMargin = bottomTabs.getHeight());
- } else {
- lp.bottomMargin = bottomTabs.getHeight();
- }
- }
- }
-
- private void applyBottomTabsOptions(BottomTabsOptions options, AnimationsOptions animationsOptions) {
- if (options.titleDisplayMode.hasValue()) {
- bottomTabs.setTitleState(options.titleDisplayMode.toState());
- }
- if (options.backgroundColor.hasValue()) {
- bottomTabs.setBackgroundColor(options.backgroundColor.get());
- }
- if (options.currentTabIndex.hasValue()) {
- int tabIndex = options.currentTabIndex.get();
- if (tabIndex >= 0) tabSelector.selectTab(tabIndex);
- }
- if (options.testId.hasValue()) {
- bottomTabs.setTag(options.testId.get());
- }
- if (options.currentTabId.hasValue()) {
- int tabIndex = bottomTabFinder.findByControllerId(options.currentTabId.get());
- if (tabIndex >= 0) tabSelector.selectTab(tabIndex);
- }
- if (options.visible.isTrueOrUndefined()) {
- if (options.animate.isTrueOrUndefined()) {
- animator.show(animationsOptions);
- } else {
- bottomTabs.restoreBottomNavigation(false);
- }
- }
- if (options.visible.isFalse()) {
- if (options.animate.isTrueOrUndefined()) {
- animator.hide(animationsOptions);
- } else {
- bottomTabs.hideBottomNavigation(false);
- }
- }
- }
- }
|