react-native-navigation的迁移库

BottomTabOptionsPresenter.java 3.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. package com.reactnativenavigation.presentation;
  2. import android.content.Context;
  3. import android.support.annotation.VisibleForTesting;
  4. import android.support.v4.content.ContextCompat;
  5. import com.reactnativenavigation.parse.BottomTabOptions;
  6. import com.reactnativenavigation.parse.Options;
  7. import com.reactnativenavigation.viewcontrollers.ViewController;
  8. import com.reactnativenavigation.viewcontrollers.bottomtabs.BottomTabFinder;
  9. import com.reactnativenavigation.views.BottomTabs;
  10. import com.reactnativenavigation.views.Component;
  11. import java.util.List;
  12. public class BottomTabOptionsPresenter {
  13. private Options defaultOptions;
  14. private final BottomTabFinder bottomTabFinder;
  15. private BottomTabs bottomTabs;
  16. private final int defaultSelectedTextColor;
  17. private final int defaultTextColor;
  18. private final List<ViewController> tabs;
  19. public BottomTabOptionsPresenter(Context context, List<ViewController> tabs, Options defaultOptions) {
  20. this.tabs = tabs;
  21. this.bottomTabFinder = new BottomTabFinder(tabs);
  22. this.defaultOptions = defaultOptions;
  23. defaultSelectedTextColor = defaultOptions.bottomTabOptions.selectedIconColor.get(ContextCompat.getColor(context, com.aurelhubert.ahbottomnavigation.R.color.colorBottomNavigationAccent));
  24. defaultTextColor = defaultOptions.bottomTabOptions.iconColor.get(ContextCompat.getColor(context, com.aurelhubert.ahbottomnavigation.R.color.colorBottomNavigationInactive));
  25. }
  26. public void setDefaultOptions(Options defaultOptions) {
  27. this.defaultOptions = defaultOptions;
  28. }
  29. public void bindView(BottomTabs bottomTabs) {
  30. this.bottomTabs = bottomTabs;
  31. }
  32. public void present() {
  33. for (int i = 0; i < tabs.size(); i++) {
  34. BottomTabOptions tab = tabs.get(i).options.copy().withDefaultOptions(defaultOptions).bottomTabOptions;
  35. bottomTabs.setBadge(i, tab.badge.get(""));
  36. bottomTabs.setTitleTypeface(i, tab.fontFamily);
  37. bottomTabs.setIconActiveColor(i, tab.selectedIconColor.get(null));
  38. bottomTabs.setIconInactiveColor(i, tab.iconColor.get(null));
  39. bottomTabs.setTitleActiveColor(i, tab.selectedTextColor.get(null));
  40. bottomTabs.setTitleInactiveColor(i, tab.textColor.get(null));
  41. bottomTabs.setTitleInactiveTextSizeInSp(i, tab.fontSize.hasValue() ? Float.valueOf(tab.fontSize.get()) : null);
  42. bottomTabs.setTitleActiveTextSizeInSp(i, tab.selectedFontSize.hasValue() ? Float.valueOf(tab.selectedFontSize.get()) : null);
  43. }
  44. }
  45. public void mergeChildOptions(Options options, Component child) {
  46. BottomTabOptions withDefaultOptions = options.withDefaultOptions(defaultOptions).bottomTabOptions;
  47. int index = bottomTabFinder.findByComponent(child);
  48. if (withDefaultOptions.badge.hasValue()) bottomTabs.setBadge(index, withDefaultOptions.badge.get());
  49. if (withDefaultOptions.fontFamily != null) bottomTabs.setTitleTypeface(index, withDefaultOptions.fontFamily);
  50. if (withDefaultOptions.selectedIconColor.hasValue()) bottomTabs.setIconActiveColor(index, withDefaultOptions.selectedIconColor.get());
  51. if (withDefaultOptions.iconColor.hasValue()) bottomTabs.setIconInactiveColor(index, withDefaultOptions.iconColor.get());
  52. if (withDefaultOptions.selectedTextColor.hasValue()) bottomTabs.setTitleActiveColor(index, withDefaultOptions.selectedTextColor.get());
  53. if (withDefaultOptions.textColor.hasValue()) bottomTabs.setTitleInactiveColor(index, withDefaultOptions.textColor.get());
  54. }
  55. @VisibleForTesting
  56. public int getDefaultSelectedTextColor() {
  57. return defaultSelectedTextColor;
  58. }
  59. @VisibleForTesting
  60. public int getDefaultTextColor() {
  61. return defaultTextColor;
  62. }
  63. }