From 5a929681d52e2d7ccfd5f8beb7c62448b9bd6aad Mon Sep 17 00:00:00 2001 From: Guy Carmeli Date: Fri, 29 Dec 2017 08:47:25 +0200 Subject: [PATCH] Support changing TopTabs font size * Currently doesn't work - need to implement custom TopTab view --- docs/_sidebar.md | 1 + docs/docs/Container.md | 1 + docs/docs/Navigation.md | 6 ++-- docs/docs/options/BottomTabs.md | 1 + docs/docs/options/NavigationOptions.md | 1 + docs/docs/options/TopBar.md | 1 + docs/docs/options/TopTabs.md | 10 +++++++ .../reactnativenavigation/parse/Color.java | 16 ++++++++++ .../parse/ColorParser.java | 3 -- .../{views/style => parse}/NullColor.java | 8 ++--- .../parse/NullNumber.java | 12 ++++++++ .../reactnativenavigation/parse/Number.java | 8 +++++ .../parse/NumberParser.java | 9 ++++++ .../reactnativenavigation/parse/Param.java | 20 +++++++++++++ .../parse/TopTabsOptions.java | 23 +++++--------- .../presentation/OptionsPresenter.java | 1 + .../reactnativenavigation/views/TopBar.java | 7 ++++- .../reactnativenavigation/views/TopTabs.java | 7 ++++- .../views/TopTabsStyleHelper.java | 16 +++++++--- .../views/style/Color.java | 30 ------------------- lib/src/params/options/TopTabs.js | 2 ++ lib/src/params/options/TopTabs.test.js | 4 ++- playground/src/containers/WelcomeScreen.js | 3 +- 23 files changed, 127 insertions(+), 63 deletions(-) create mode 100644 docs/docs/options/TopTabs.md create mode 100644 lib/android/app/src/main/java/com/reactnativenavigation/parse/Color.java rename lib/android/app/src/main/java/com/reactnativenavigation/{views/style => parse}/NullColor.java (55%) create mode 100644 lib/android/app/src/main/java/com/reactnativenavigation/parse/NullNumber.java create mode 100644 lib/android/app/src/main/java/com/reactnativenavigation/parse/Number.java create mode 100644 lib/android/app/src/main/java/com/reactnativenavigation/parse/NumberParser.java create mode 100644 lib/android/app/src/main/java/com/reactnativenavigation/parse/Param.java delete mode 100644 lib/android/app/src/main/java/com/reactnativenavigation/views/style/Color.java diff --git a/docs/_sidebar.md b/docs/_sidebar.md index fc134f2d956..51f0e12188f 100644 --- a/docs/_sidebar.md +++ b/docs/_sidebar.md @@ -11,6 +11,7 @@ - Options - [NavigationOptions](/docs/options/NavigationOptions) - [TopBar](/docs/options/TopBar) + - [TopTabs](/docs/options/TopTabs) - [TopTab](/docs/options/TopTab) - [Button](/docs/options/Button) - [BottomTabs](/docs/options/BottomTabs) diff --git a/docs/docs/Container.md b/docs/docs/Container.md index 130d00b60e4..a9cc7f7b471 100644 --- a/docs/docs/Container.md +++ b/docs/docs/Container.md @@ -5,6 +5,7 @@ | Name | Type | Description | | --- | --- | --- | | name | string | The container's registered name | +| topTabs | [Array.<Container>](#Container) | | | passProps | object | props | | navigationOptions | NavigationOptions | | diff --git a/docs/docs/Navigation.md b/docs/docs/Navigation.md index 1f5549ed05a..88ff4308c16 100644 --- a/docs/docs/Navigation.md +++ b/docs/docs/Navigation.md @@ -10,7 +10,7 @@ * [.showModal(params)](#Navigation+showModal) * [.dismissModal(containerId)](#Navigation+dismissModal) * [.dismissAllModals()](#Navigation+dismissAllModals) - * [.push(containerId, params)](#Navigation+push) + * [.push(containerId, container)](#Navigation+push) * [.pop(containerId, params)](#Navigation+pop) * [.popTo(containerId)](#Navigation+popTo) * [.popToRoot(containerId)](#Navigation+popToRoot) @@ -109,14 +109,14 @@ Dismiss all Modals -## navigation.push(containerId, params) +## navigation.push(containerId, container) Push a new screen into this screen's navigation stack. | Param | Type | Description | | --- | --- | --- | | containerId | string | The container's id. | -| params | * | | +| container | Container | | * * * diff --git a/docs/docs/options/BottomTabs.md b/docs/docs/options/BottomTabs.md index 6ac26dc8696..0095bc038bf 100644 --- a/docs/docs/options/BottomTabs.md +++ b/docs/docs/options/BottomTabs.md @@ -9,4 +9,5 @@ | hidden | boolean | | animateHide | boolean | | testID | string | +| drawUnder | boolean | diff --git a/docs/docs/options/NavigationOptions.md b/docs/docs/options/NavigationOptions.md index 01820dfaaad..21406e09e40 100644 --- a/docs/docs/options/NavigationOptions.md +++ b/docs/docs/options/NavigationOptions.md @@ -8,6 +8,7 @@ | bottomTabs | BottomTabs | | bottomTab | BottomTab | | orientation | string | +| topTabs | TopTabs | | rightButtons | Button[] | | leftButtons | Button[] | diff --git a/docs/docs/options/TopBar.md b/docs/docs/options/TopBar.md index 8706212b4a4..99eddd3a38b 100644 --- a/docs/docs/options/TopBar.md +++ b/docs/docs/options/TopBar.md @@ -19,4 +19,5 @@ | blur | boolean | | noBorder | boolean | | largeTitle | boolean | +| drawUnder | boolean | diff --git a/docs/docs/options/TopTabs.md b/docs/docs/options/TopTabs.md new file mode 100644 index 00000000000..00f48a34591 --- /dev/null +++ b/docs/docs/options/TopTabs.md @@ -0,0 +1,10 @@ +

TopTabs

+ +**Properties** + +| Name | Type | Description | +| --- | --- | --- | +| selectedTabColor | string | Selected tab color | +| unselectedTabColor | string | Unselected tab color | +| fontSize | int | | + diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/parse/Color.java b/lib/android/app/src/main/java/com/reactnativenavigation/parse/Color.java new file mode 100644 index 00000000000..23b2e290277 --- /dev/null +++ b/lib/android/app/src/main/java/com/reactnativenavigation/parse/Color.java @@ -0,0 +1,16 @@ +package com.reactnativenavigation.parse; + +import android.support.annotation.ColorInt; + +public class Color extends Param{ + + public Color(@ColorInt int color) { + super(color); + } + + @SuppressWarnings("MagicNumber") + @Override + public String toString() { + return String.format("#%06X", (0xFFFFFF & get())); + } +} diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/parse/ColorParser.java b/lib/android/app/src/main/java/com/reactnativenavigation/parse/ColorParser.java index 7c5826d6636..59c7d814100 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/parse/ColorParser.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/parse/ColorParser.java @@ -1,8 +1,5 @@ package com.reactnativenavigation.parse; -import com.reactnativenavigation.views.style.Color; -import com.reactnativenavigation.views.style.NullColor; - import org.json.JSONObject; public class ColorParser { diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/views/style/NullColor.java b/lib/android/app/src/main/java/com/reactnativenavigation/parse/NullColor.java similarity index 55% rename from lib/android/app/src/main/java/com/reactnativenavigation/views/style/NullColor.java rename to lib/android/app/src/main/java/com/reactnativenavigation/parse/NullColor.java index 3513b0e1460..fd8256515c1 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/views/style/NullColor.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/parse/NullColor.java @@ -1,16 +1,16 @@ -package com.reactnativenavigation.views.style; +package com.reactnativenavigation.parse; public class NullColor extends Color { - public NullColor() { + NullColor() { super(0); } - public boolean hasColor() { + @Override + public boolean hasValue() { return false; } - @SuppressWarnings("MagicNumber") @Override public String toString() { return "Null Color"; diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/parse/NullNumber.java b/lib/android/app/src/main/java/com/reactnativenavigation/parse/NullNumber.java new file mode 100644 index 00000000000..aa5cd252b74 --- /dev/null +++ b/lib/android/app/src/main/java/com/reactnativenavigation/parse/NullNumber.java @@ -0,0 +1,12 @@ +package com.reactnativenavigation.parse; + +public class NullNumber extends Number { + public NullNumber() { + super(0); + } + + @Override + public boolean hasValue() { + return false; + } +} diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/parse/Number.java b/lib/android/app/src/main/java/com/reactnativenavigation/parse/Number.java new file mode 100644 index 00000000000..9438fb21c46 --- /dev/null +++ b/lib/android/app/src/main/java/com/reactnativenavigation/parse/Number.java @@ -0,0 +1,8 @@ +package com.reactnativenavigation.parse; + +public class Number extends Param { + + public Number(int value) { + super(value); + } +} diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/parse/NumberParser.java b/lib/android/app/src/main/java/com/reactnativenavigation/parse/NumberParser.java new file mode 100644 index 00000000000..070e581e6d0 --- /dev/null +++ b/lib/android/app/src/main/java/com/reactnativenavigation/parse/NumberParser.java @@ -0,0 +1,9 @@ +package com.reactnativenavigation.parse; + +import org.json.JSONObject; + +public class NumberParser { + public static Number parse(JSONObject json, String number) { + return json.has(number) ? new Number(json.optInt(number)) : new NullNumber(); + } +} diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/parse/Param.java b/lib/android/app/src/main/java/com/reactnativenavigation/parse/Param.java new file mode 100644 index 00000000000..4b0c1870315 --- /dev/null +++ b/lib/android/app/src/main/java/com/reactnativenavigation/parse/Param.java @@ -0,0 +1,20 @@ +package com.reactnativenavigation.parse; + +public abstract class Param { + protected T value; + + public Param(T value) { + this.value = value; + } + + public T get() { + if (hasValue()) { + return value; + } + throw new RuntimeException("Tried to get null value!"); + } + + public boolean hasValue() { + return value != null; + } +} diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/parse/TopTabsOptions.java b/lib/android/app/src/main/java/com/reactnativenavigation/parse/TopTabsOptions.java index 1717682ff1a..c5f88274bff 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/parse/TopTabsOptions.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/parse/TopTabsOptions.java @@ -3,39 +3,32 @@ import android.support.annotation.NonNull; import android.support.annotation.Nullable; -import com.reactnativenavigation.views.style.Color; -import com.reactnativenavigation.views.style.NullColor; - import org.json.JSONObject; public class TopTabsOptions implements DEFAULT_VALUES { @NonNull public Color selectedTabColor = new NullColor(); @NonNull public Color unselectedTabColor = new NullColor(); + @NonNull public Number fontSize = new NullNumber(); public static TopTabsOptions parse(@Nullable JSONObject json) { TopTabsOptions result = new TopTabsOptions(); if (json == null) return result; result.selectedTabColor = ColorParser.parse(json, "selectedTabColor"); result.unselectedTabColor = ColorParser.parse(json, "unselectedTabColor"); + result.fontSize = NumberParser.parse(json, "fontSize"); return result; } void mergeWith(TopTabsOptions other) { - if (other.selectedTabColor.hasColor()) { - selectedTabColor = other.selectedTabColor; - } - if (other.unselectedTabColor.hasColor()) { - unselectedTabColor = other.unselectedTabColor; - } + if (other.selectedTabColor.hasValue()) selectedTabColor = other.selectedTabColor; + if (other.unselectedTabColor.hasValue()) unselectedTabColor = other.unselectedTabColor; + if (other.fontSize.hasValue()) fontSize = other.fontSize; } void mergeWithDefault(TopTabsOptions defaultOptions) { - if (!selectedTabColor.hasColor()) { - selectedTabColor = defaultOptions.selectedTabColor; - } - if (!unselectedTabColor.hasColor()) { - unselectedTabColor = defaultOptions.unselectedTabColor; - } + if (!selectedTabColor.hasValue()) selectedTabColor = defaultOptions.selectedTabColor; + if (!unselectedTabColor.hasValue()) unselectedTabColor = defaultOptions.unselectedTabColor; + if (!fontSize.hasValue()) fontSize = defaultOptions.fontSize; } } diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/presentation/OptionsPresenter.java b/lib/android/app/src/main/java/com/reactnativenavigation/presentation/OptionsPresenter.java index 46218990e63..03a55fa63eb 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/presentation/OptionsPresenter.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/presentation/OptionsPresenter.java @@ -74,6 +74,7 @@ private void applyButtons(ArrayList