package com.reactnativenavigation.params.parsers; import android.graphics.Color; import android.os.Bundle; import com.reactnativenavigation.params.AppStyle; import com.reactnativenavigation.params.Orientation; import com.reactnativenavigation.params.StyleParams; public class StyleParamsParser { private Bundle params; public StyleParamsParser(Bundle params) { this.params = params; } public StyleParamsParser merge(Bundle b) { params.putAll(b); return this; } public StyleParams parse() { if (params == null) { return createDefaultStyleParams(); } StyleParams result = new StyleParams(params); result.orientation = Orientation.fromString(params.getString("orientation", getDefaultOrientation())); result.statusBarColor = getColor("statusBarColor", getDefaultStatusBarColor()); result.contextualMenuStatusBarColor = getColor("contextualMenuStatusBarColor", getDefaultContextualMenuStatusBarColor()); result.contextualMenuButtonsColor = getColor("contextualMenuButtonsColor", getDefaultContextualMenuButtonsColor()); result.contextualMenuBackgroundColor = getColor("contextualMenuBackgroundColor", getDefaultContextualMenuBackgroundColor()); result.topBarColor = getColor("topBarColor", getDefaultTopBarColor()); result.titleBarHideOnScroll = getBoolean("titleBarHideOnScroll", getDefaultTitleBarHideOnScroll()); result.topBarTransparent = getBoolean("topBarTransparent", getDefaultTopBarHidden()); result.topBarCollapseOnScroll = getBoolean("topBarCollapseOnScroll", false); result.drawScreenBelowTopBar = params.getBoolean("drawBelowTopBar", getDefaultScreenBelowTopBar()); if (result.topBarTransparent) { result.drawScreenBelowTopBar = false; } result.collapsingTopBarParams = new CollapsingTopBarParamsParser(params, result.titleBarHideOnScroll, result.drawScreenBelowTopBar).parse(); result.titleBarHidden = getBoolean("titleBarHidden", getDefaultTopBarHidden()); result.topBarElevationShadowEnabled = getBoolean("topBarElevationShadowEnabled", getDefaultTopBarElevationShadowEnabled()); result.titleBarTitleColor = getColor("titleBarTitleColor", getDefaultTitleBarColor()); result.topBarTranslucent = getBoolean("topBarTranslucent", getDefaultTopBarTranslucent()); result.titleBarSubtitleColor = getColor("titleBarSubtitleColor", getDefaultSubtitleBarColor()); result.titleBarButtonColor = getColor("titleBarButtonColor", getTitleBarButtonColor()); result.titleBarDisabledButtonColor = getColor("titleBarDisabledButtonColor", getTitleBarDisabledButtonColor()); result.titleBarTitleFont = getFont("titleBarTitleFontFamily", getDefaultTitleTextFontFamily()); result.titleBarTitleTextCentered = getBoolean("titleBarTitleTextCentered", getDefaultTitleBarTextCentered()); result.backButtonHidden = getBoolean("backButtonHidden", getDefaultBackButtonHidden()); result.topTabsHidden = getBoolean("topTabsHidden", getDefaultTopTabsHidden()); result.topTabTextColor = getColor("topTabTextColor", getDefaultTopTabTextColor()); result.topTabIconColor = getColor("topTabIconColor", getDefaultTopTabIconColor()); result.selectedTopTabIconColor = getColor("selectedTopTabIconColor", getDefaultSelectedTopTabIconColor()); result.selectedTopTabTextColor = getColor("selectedTopTabTextColor", getDefaultSelectedTopTabTextColor()); result.selectedTopTabIndicatorHeight = getInt("selectedTopTabIndicatorHeight", getDefaultSelectedTopTabIndicatorHeight()); result.selectedTopTabIndicatorColor = getColor("selectedTopTabIndicatorColor", getDefaultSelectedTopTabIndicatorColor()); result.topTabsScrollable = getBoolean("topTabsScrollable", getDefaultTopTabsScrollable()); result.screenBackgroundColor = getColor("screenBackgroundColor", getDefaultScreenBackgroundColor()); result.bottomTabsHidden = getBoolean("bottomTabsHidden", getDefaultBottomTabsHidden()); result.drawScreenAboveBottomTabs = !result.bottomTabsHidden && params.getBoolean("drawScreenAboveBottomTabs", getDefaultDrawScreenAboveBottomTabs()); if (result.titleBarHideOnScroll) { result.drawScreenAboveBottomTabs = false; } result.bottomTabsHiddenOnScroll = getBoolean("bottomTabsHiddenOnScroll", getDefaultBottomTabsHiddenOnScroll()); result.bottomTabsColor = getColor("bottomTabsColor", getDefaultBottomTabsColor()); result.bottomTabsButtonColor = getColor("bottomTabsButtonColor", getDefaultBottomTabsButtonColor()); result.selectedBottomTabsButtonColor = getColor("bottomTabsSelectedButtonColor", getDefaultSelectedBottomTabsButtonColor()); result.bottomTabBadgeTextColor = getColor("bottomTabBadgeTextColor", getBottomTabBadgeTextColor()); result.bottomTabBadgeBackgroundColor = getColor("bottomTabBadgeBackgroundColor", getBottomTabBadgeBackgroundColor()); result.navigationBarColor = getColor("navigationBarColor", getDefaultNavigationColor()); result.forceTitlesDisplay = getBoolean("forceTitlesDisplay", getDefaultForceTitlesDisplay()); result.bottomTabFontFamily = getFont("bottomTabFontFamily", getDefaultBottomTabsFontFamily()); return result; } private String getDefaultOrientation() { return AppStyle.appStyle == null ? null : AppStyle.appStyle.orientation.name; } private StyleParams createDefaultStyleParams() { StyleParams result = new StyleParams(Bundle.EMPTY); result.titleBarDisabledButtonColor = getTitleBarDisabledButtonColor(); result.topBarElevationShadowEnabled = true; result.titleBarHideOnScroll = false; result.orientation = Orientation.auto; result.bottomTabFontFamily = new StyleParams.Font(); return result; } private StyleParams.Color getDefaultContextualMenuStatusBarColor() { return new StyleParams.Color(Color.parseColor("#7c7c7c")); } private StyleParams.Color getDefaultContextualMenuBackgroundColor() { return new StyleParams.Color(Color.WHITE); } private StyleParams.Color getDefaultContextualMenuButtonsColor() { return new StyleParams.Color(Color.parseColor("#757575")); } private boolean getDefaultDrawScreenAboveBottomTabs() { return AppStyle.appStyle == null || AppStyle.appStyle.drawScreenAboveBottomTabs; } private StyleParams.Color getDefaultSelectedTopTabIndicatorColor() { return AppStyle.appStyle == null ? new StyleParams.Color() : AppStyle.appStyle.selectedTopTabIndicatorColor; } private int getDefaultSelectedTopTabIndicatorHeight() { return AppStyle.appStyle == null ? -1 : AppStyle.appStyle.selectedTopTabIndicatorHeight; } private StyleParams.Color getDefaultSelectedTopTabTextColor() { return AppStyle.appStyle == null ? new StyleParams.Color() : AppStyle.appStyle.selectedTopTabTextColor; } private StyleParams.Color getDefaultSelectedTopTabIconColor() { return AppStyle.appStyle == null ? new StyleParams.Color() : AppStyle.appStyle.selectedTopTabIconColor; } private StyleParams.Color getDefaultNavigationColor() { return AppStyle.appStyle == null ? new StyleParams.Color() : AppStyle.appStyle.navigationBarColor; } private boolean getDefaultForceTitlesDisplay() { return AppStyle.appStyle != null && AppStyle.appStyle.forceTitlesDisplay; } private StyleParams.Color getDefaultSelectedBottomTabsButtonColor() { return AppStyle.appStyle == null ? new StyleParams.Color() : AppStyle.appStyle.selectedBottomTabsButtonColor; } private StyleParams.Color getBottomTabBadgeTextColor() { return new StyleParams.Color(); } private StyleParams.Color getBottomTabBadgeBackgroundColor() { return new StyleParams.Color(); } private StyleParams.Color getDefaultBottomTabsButtonColor() { return AppStyle.appStyle == null ? new StyleParams.Color() : AppStyle.appStyle.bottomTabsButtonColor; } private StyleParams.Color getDefaultBottomTabsColor() { return AppStyle.appStyle == null ? new StyleParams.Color() : AppStyle.appStyle.bottomTabsColor; } private boolean getDefaultBottomTabsHiddenOnScroll() { return AppStyle.appStyle != null && AppStyle.appStyle.bottomTabsHiddenOnScroll; } private boolean getDefaultBottomTabsHidden() { return AppStyle.appStyle != null && AppStyle.appStyle.bottomTabsHidden; } private boolean getDefaultScreenBelowTopBar() { return AppStyle.appStyle != null && AppStyle.appStyle.drawScreenBelowTopBar; } private StyleParams.Color getDefaultScreenBackgroundColor() { return AppStyle.appStyle != null ? AppStyle.appStyle.screenBackgroundColor : getColor("screenBackgroundColor", new StyleParams.Color()); } private boolean getDefaultTopTabsHidden() { return AppStyle.appStyle != null && AppStyle.appStyle.topTabsHidden; } private StyleParams.Color getDefaultTopTabTextColor() { return AppStyle.appStyle == null ? new StyleParams.Color() : AppStyle.appStyle.topTabTextColor; } private boolean getDefaultTopTabsScrollable() { return AppStyle.appStyle != null && AppStyle.appStyle.topTabsScrollable; } private StyleParams.Color getDefaultTopTabIconColor() { return AppStyle.appStyle == null ? new StyleParams.Color() : AppStyle.appStyle.topTabIconColor; } private boolean getDefaultBackButtonHidden() { return AppStyle.appStyle != null && AppStyle.appStyle.backButtonHidden; } private StyleParams.Color getDefaultTitleBarColor() { return AppStyle.appStyle == null ? new StyleParams.Color() : AppStyle.appStyle.titleBarTitleColor; } private StyleParams.Color getDefaultSubtitleBarColor() { return AppStyle.appStyle == null ? new StyleParams.Color() : AppStyle.appStyle.titleBarSubtitleColor; } private StyleParams.Color getTitleBarButtonColor() { return AppStyle.appStyle == null ? new StyleParams.Color() : AppStyle.appStyle.titleBarButtonColor; } private StyleParams.Color getTitleBarDisabledButtonColor() { return AppStyle.appStyle == null ? new StyleParams.Color(Color.LTGRAY) : AppStyle.appStyle.titleBarDisabledButtonColor; } private boolean getDefaultTopBarHidden() { return AppStyle.appStyle != null && AppStyle.appStyle.topBarTransparent; } private boolean getDefaultTopBarElevationShadowEnabled() { return AppStyle.appStyle == null || AppStyle.appStyle.topBarElevationShadowEnabled; } private boolean getDefaultTopBarTranslucent() { return AppStyle.appStyle != null && AppStyle.appStyle.topBarTranslucent; } private boolean getDefaultTitleBarHideOnScroll() { return AppStyle.appStyle != null && AppStyle.appStyle.titleBarHideOnScroll; } private StyleParams.Color getDefaultTopBarColor() { return AppStyle.appStyle == null ? new StyleParams.Color() : AppStyle.appStyle.topBarColor; } private StyleParams.Color getDefaultStatusBarColor() { return AppStyle.appStyle == null ? new StyleParams.Color() : AppStyle.appStyle.statusBarColor; } private StyleParams.Font getDefaultBottomTabsFontFamily() { return AppStyle.appStyle == null ? new StyleParams.Font() : AppStyle.appStyle.bottomTabFontFamily; } private StyleParams.Font getDefaultTitleTextFontFamily() { return AppStyle.appStyle == null ? new StyleParams.Font() : AppStyle.appStyle.titleBarTitleFont; } private boolean getDefaultTitleBarTextCentered() { return AppStyle.appStyle != null && AppStyle.appStyle.titleBarTitleTextCentered; } private boolean getBoolean(String key, boolean defaultValue) { return params.containsKey(key) ? params.getBoolean(key) : defaultValue; } private StyleParams.Color getColor(String key, StyleParams.Color defaultColor) { StyleParams.Color color = StyleParams.Color.parse(params, key); if (color.hasColor()) { return color; } else { return defaultColor != null && defaultColor.hasColor() ? defaultColor : color; } } private StyleParams.Font getFont(String titleBarTitleFontFamily, StyleParams.Font defaultFont) { StyleParams.Font font = new StyleParams.Font(params.getString(titleBarTitleFontFamily)); return font.hasFont() ? font : defaultFont; } private int getInt(String key, int defaultValue) { return params.containsKey(key) ? params.getInt(key) : defaultValue; } }