package com.reactnativenavigation.params.parsers; import android.os.Bundle; import com.reactnativenavigation.params.CollapsingTopBarParams; import com.reactnativenavigation.params.StyleParams; import com.reactnativenavigation.views.collapsingToolbar.behaviours.CollapseBehaviour; import com.reactnativenavigation.views.collapsingToolbar.behaviours.CollapseTitleBarBehaviour; import com.reactnativenavigation.views.collapsingToolbar.behaviours.CollapseTopBarBehaviour; import com.reactnativenavigation.views.collapsingToolbar.behaviours.TitleBarHideOnScrollBehaviour; class CollapsingTopBarParamsParser extends Parser { private Bundle params; private boolean titleBarHideOnScroll; private boolean drawBelowTopBar; private final boolean hasReactView; private final boolean hasBackgroundImage; CollapsingTopBarParamsParser(Bundle params, boolean titleBarHideOnScroll, boolean drawBelowTopBar) { this.params = params; this.titleBarHideOnScroll = titleBarHideOnScroll; this.drawBelowTopBar = drawBelowTopBar; hasReactView = params.containsKey("collapsingToolBarComponent"); hasBackgroundImage = params.containsKey("collapsingToolBarImage"); } public CollapsingTopBarParams parse() { if (!validateParams()) { return null; } CollapsingTopBarParams result = new CollapsingTopBarParams(); result.imageUri = params.getString("collapsingToolBarImage", null); result.reactViewId = params.getString("collapsingToolBarComponent", null); result.expendOnTopTabChange = params.getBoolean("expendCollapsingToolBarOnTopTabChange"); result.scrimColor = getColor(params, "collapsingToolBarCollapsedColor", new StyleParams.Color()); result.expendedTitleBarColor = getColor(params, "collapsingToolBarExpendedColor", new StyleParams.Color()); result.showTitleWhenCollapsed = hasReactView; result.showTitleWhenExpended = params.getBoolean("showTitleWhenExpended", result.expendedTitleBarColor.hasColor()); result.collapseBehaviour = getCollapseBehaviour(); return result; } private boolean validateParams() { return titleBarHideOnScroll || hasImageOrReactView(); } private CollapseBehaviour getCollapseBehaviour() { if (hasImageOrReactView()) { return new CollapseTopBarBehaviour(); } if (titleBarHideOnScroll && drawBelowTopBar) { return new CollapseTitleBarBehaviour(); } return new TitleBarHideOnScrollBehaviour(); } private boolean hasImageOrReactView() { return hasBackgroundImage || hasReactView; } }