From 202defe34620453e98ee1324f7eb871499b5e7a1 Mon Sep 17 00:00:00 2001 From: Guy Carmeli Date: Mon, 25 Dec 2017 17:38:44 +0200 Subject: [PATCH 1/3] Implement titleFontFamily in topTab option --- .../parse/LayoutFactory.java | 10 ++++--- .../parse/LayoutNode.java | 4 +++ .../parse/NavigationOptions.java | 11 ++++---- .../parse/TopTabOptions.java | 11 +++++++- .../parse/TopTabsOptions.java | 9 ++++-- .../presentation/OptionsPresenter.java | 12 ++++++-- .../react/NavigationModule.java | 4 +-- .../utils/TypefaceLoader.java | 11 ++++---- .../utils/ViewUtils.java | 25 +++++++++++++++++ .../toptabs/TopTabController.java | 4 +++ .../reactnativenavigation/views/TopBar.java | 8 ++++-- .../reactnativenavigation/views/TopTabs.java | 7 +++++ .../views/TopTabsStyleHelper.java | 26 ++++++++++++++++++ lib/src/params/options/TopTab.js | 13 +++++++++ lib/src/params/options/TopTab.test.js | 14 ++++++++++ .../src/main/assets/fonts/Dosis-Regular.ttf | Bin 0 -> 136940 bytes playground/src/containers/WelcomeScreen.js | 3 +- 17 files changed, 147 insertions(+), 25 deletions(-) create mode 100644 lib/android/app/src/main/java/com/reactnativenavigation/utils/ViewUtils.java create mode 100644 lib/android/app/src/main/java/com/reactnativenavigation/views/TopTabsStyleHelper.java create mode 100644 lib/src/params/options/TopTab.js create mode 100644 lib/src/params/options/TopTab.test.js create mode 100755 playground/android/app/src/main/assets/fonts/Dosis-Regular.ttf diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/parse/LayoutFactory.java b/lib/android/app/src/main/java/com/reactnativenavigation/parse/LayoutFactory.java index de1372adcb3..538a31f5cb6 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/parse/LayoutFactory.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/parse/LayoutFactory.java @@ -92,7 +92,7 @@ private ViewController createSideMenuRight(LayoutNode node) { private ViewController createContainer(LayoutNode node) { String id = node.id; String name = node.data.optString("name"); - NavigationOptions navigationOptions = NavigationOptions.parse(node.data.optJSONObject("navigationOptions"), defaultOptions); + NavigationOptions navigationOptions = NavigationOptions.parse(activity, node.data.optJSONObject("navigationOptions"), defaultOptions); return new ContainerViewController(activity, id, name, @@ -128,8 +128,10 @@ private ViewController createDialogContainer(LayoutNode node) { private ViewController createTopTabs(LayoutNode node) { final List tabs = new ArrayList<>(); - for (LayoutNode child : node.children) { - tabs.add((TopTabController) create(child)); + for (int i = 0; i < node.children.size(); i++) { + TopTabController tabController = (TopTabController) create(node.children.get(i)); + tabController.setTabIndex(i); + tabs.add(tabController); } return new TopTabsController(activity, node.id, tabs); } @@ -137,7 +139,7 @@ private ViewController createTopTabs(LayoutNode node) { private ViewController createTopTab(LayoutNode node) { String id = node.id; String name = node.data.optString("name"); - NavigationOptions navigationOptions = NavigationOptions.parse(node.data.optJSONObject("navigationOptions"), defaultOptions); + NavigationOptions navigationOptions = NavigationOptions.parse(activity, node.getNavigationOptions(), defaultOptions); return new TopTabController(activity, id, name, diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/parse/LayoutNode.java b/lib/android/app/src/main/java/com/reactnativenavigation/parse/LayoutNode.java index 8ffabd77a96..c5539912f93 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/parse/LayoutNode.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/parse/LayoutNode.java @@ -35,4 +35,8 @@ public enum Type { this.data = data; this.children = children; } + + JSONObject getNavigationOptions() { + return data.optJSONObject("navigationOptions"); + } } diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/parse/NavigationOptions.java b/lib/android/app/src/main/java/com/reactnativenavigation/parse/NavigationOptions.java index 5faf803ee8d..970c79185ab 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/parse/NavigationOptions.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/parse/NavigationOptions.java @@ -1,5 +1,6 @@ package com.reactnativenavigation.parse; +import android.content.Context; import android.support.annotation.NonNull; import org.json.JSONObject; @@ -22,18 +23,18 @@ static BooleanOptions parse(String value) { } @NonNull - public static NavigationOptions parse(JSONObject json) { - return parse(json, new NavigationOptions()); + public static NavigationOptions parse(Context context, JSONObject json) { + return parse(context, json, new NavigationOptions()); } @NonNull - public static NavigationOptions parse(JSONObject json, @NonNull NavigationOptions defaultOptions) { + public static NavigationOptions parse(Context context, JSONObject json, @NonNull NavigationOptions defaultOptions) { NavigationOptions result = new NavigationOptions(); if (json == null) return result; result.topBarOptions = TopBarOptions.parse(json.optJSONObject("topBar")); result.topTabsOptions = TopTabsOptions.parse(json.optJSONObject("topTabs")); - result.topTabOptions = TopTabOptions.parse(json.optJSONObject("topTab")); + result.topTabOptions = TopTabOptions.parse(context, json.optJSONObject("topTab")); result.bottomTabsOptions = BottomTabsOptions.parse(json.optJSONObject("bottomTabs")); result.rightButtons = Button.parseJsonArray(json.optJSONArray("rightButtons")); result.leftButtons = Button.parseJsonArray(json.optJSONArray("leftButtons")); @@ -42,7 +43,7 @@ public static NavigationOptions parse(JSONObject json, @NonNull NavigationOption } @NonNull public TopBarOptions topBarOptions = new TopBarOptions(); - @NonNull private TopTabsOptions topTabsOptions = new TopTabsOptions(); + @NonNull public TopTabsOptions topTabsOptions = new TopTabsOptions(); @NonNull public TopTabOptions topTabOptions = new TopTabOptions(); @NonNull public BottomTabsOptions bottomTabsOptions = new BottomTabsOptions(); public ArrayList