From a4cb7e8cb2a4bbcebfadbb71b8321d75f7f06f28 Mon Sep 17 00:00:00 2001 From: Jason Skuby Date: Sat, 25 Jun 2016 15:02:55 -0500 Subject: [PATCH 1/7] Fix android crash on device rotate --- android/app/src/main/AndroidManifest.xml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 4a8f6dcbfd6..a50effca6bf 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -2,11 +2,14 @@ package="com.reactnativenavigation"> - + + android:label="" + android:configChanges="keyboardHidden|orientation|screenSize"/> + android:label="" + android:configChanges="keyboardHidden|orientation|screenSize"/> From e77c8e2eb14e44418729d5ea21fd85a5048e1065 Mon Sep 17 00:00:00 2001 From: Jason Skuby Date: Sat, 25 Jun 2016 16:04:06 -0500 Subject: [PATCH 2/7] Fix menu icon after config change --- .../reactnativenavigation/activities/BaseReactActivity.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/android/app/src/main/java/com/reactnativenavigation/activities/BaseReactActivity.java b/android/app/src/main/java/com/reactnativenavigation/activities/BaseReactActivity.java index 51a0d2a6ac7..18b15f956be 100644 --- a/android/app/src/main/java/com/reactnativenavigation/activities/BaseReactActivity.java +++ b/android/app/src/main/java/com/reactnativenavigation/activities/BaseReactActivity.java @@ -291,6 +291,11 @@ public void onConfigurationChanged(Configuration newConfig) { if (mDrawerToggle != null) { mDrawerToggle.onConfigurationChanged(newConfig); } + + Screen currentScreen = getCurrentScreen(); + if (mToolbar != null && currentScreen != null) { + mToolbar.setNavUpButton(currentScreen); + } } @Override From d999b0bddd6bb3be1946f1dde183abc70b1df2f6 Mon Sep 17 00:00:00 2001 From: Jason Skuby Date: Sat, 25 Jun 2016 19:06:05 -0500 Subject: [PATCH 3/7] Make back explicit arg so state can be set on config change --- .../reactnativenavigation/activities/BaseReactActivity.java | 4 ++-- .../reactnativenavigation/activities/BottomTabActivity.java | 2 +- .../java/com/reactnativenavigation/views/RnnToolBar.java | 5 ++--- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/android/app/src/main/java/com/reactnativenavigation/activities/BaseReactActivity.java b/android/app/src/main/java/com/reactnativenavigation/activities/BaseReactActivity.java index 18b15f956be..f9ab2653218 100644 --- a/android/app/src/main/java/com/reactnativenavigation/activities/BaseReactActivity.java +++ b/android/app/src/main/java/com/reactnativenavigation/activities/BaseReactActivity.java @@ -234,7 +234,7 @@ public void push(Screen screen) { if (getCurrentNavigatorId().equals(screen.navigatorId) && getScreenStackSize() >= 1) { - mToolbar.setNavUpButton(screen); + mToolbar.setNavUpButton(screen, true); } } } @@ -294,7 +294,7 @@ public void onConfigurationChanged(Configuration newConfig) { Screen currentScreen = getCurrentScreen(); if (mToolbar != null && currentScreen != null) { - mToolbar.setNavUpButton(currentScreen); + mToolbar.setNavUpButton(currentScreen, getScreenStackSize() > 1); } } diff --git a/android/app/src/main/java/com/reactnativenavigation/activities/BottomTabActivity.java b/android/app/src/main/java/com/reactnativenavigation/activities/BottomTabActivity.java index fc3f9cee92b..3f203f49fd8 100644 --- a/android/app/src/main/java/com/reactnativenavigation/activities/BottomTabActivity.java +++ b/android/app/src/main/java/com/reactnativenavigation/activities/BottomTabActivity.java @@ -194,7 +194,7 @@ public void onTabSelected(int position, boolean wasSelected) { // Hide or show back button if needed if (getScreenStackSize() > 1) { - mToolbar.setNavUpButton(getCurrentScreen()); + mToolbar.setNavUpButton(getCurrentScreen(), true); } else { mToolbar.setNavUpButton(); } diff --git a/android/app/src/main/java/com/reactnativenavigation/views/RnnToolBar.java b/android/app/src/main/java/com/reactnativenavigation/views/RnnToolBar.java index f6df7a55fbb..5f10b90f532 100644 --- a/android/app/src/main/java/com/reactnativenavigation/views/RnnToolBar.java +++ b/android/app/src/main/java/com/reactnativenavigation/views/RnnToolBar.java @@ -214,17 +214,16 @@ private void hideToolbar() { } public void setNavUpButton() { - setNavUpButton(null); + setNavUpButton(null, false); } @SuppressWarnings({"ConstantConditions"}) - public void setNavUpButton(Screen screen) { + public void setNavUpButton(Screen screen, boolean isBack) { ActionBar actionBar = ContextProvider.getActivityContext().getSupportActionBar(); if (actionBar == null) { return; } - boolean isBack = screen != null; boolean hasDrawer = mDrawerToggle != null; Drawable navIcon = null; From c0061d9d2e6e588ed4ac99f5fb0acdf3d89659de Mon Sep 17 00:00:00 2001 From: Jason Skuby Date: Wed, 29 Jun 2016 19:17:36 -0500 Subject: [PATCH 4/7] Make toolbar check menu icon status --- .../reactnativenavigation/activities/BaseReactActivity.java | 4 ++-- .../reactnativenavigation/activities/BottomTabActivity.java | 2 +- .../java/com/reactnativenavigation/utils/StyleHelper.java | 1 + .../java/com/reactnativenavigation/views/RnnToolBar.java | 6 ++++-- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/android/app/src/main/java/com/reactnativenavigation/activities/BaseReactActivity.java b/android/app/src/main/java/com/reactnativenavigation/activities/BaseReactActivity.java index f9ab2653218..18b15f956be 100644 --- a/android/app/src/main/java/com/reactnativenavigation/activities/BaseReactActivity.java +++ b/android/app/src/main/java/com/reactnativenavigation/activities/BaseReactActivity.java @@ -234,7 +234,7 @@ public void push(Screen screen) { if (getCurrentNavigatorId().equals(screen.navigatorId) && getScreenStackSize() >= 1) { - mToolbar.setNavUpButton(screen, true); + mToolbar.setNavUpButton(screen); } } } @@ -294,7 +294,7 @@ public void onConfigurationChanged(Configuration newConfig) { Screen currentScreen = getCurrentScreen(); if (mToolbar != null && currentScreen != null) { - mToolbar.setNavUpButton(currentScreen, getScreenStackSize() > 1); + mToolbar.setNavUpButton(currentScreen); } } diff --git a/android/app/src/main/java/com/reactnativenavigation/activities/BottomTabActivity.java b/android/app/src/main/java/com/reactnativenavigation/activities/BottomTabActivity.java index 3f203f49fd8..fc3f9cee92b 100644 --- a/android/app/src/main/java/com/reactnativenavigation/activities/BottomTabActivity.java +++ b/android/app/src/main/java/com/reactnativenavigation/activities/BottomTabActivity.java @@ -194,7 +194,7 @@ public void onTabSelected(int position, boolean wasSelected) { // Hide or show back button if needed if (getScreenStackSize() > 1) { - mToolbar.setNavUpButton(getCurrentScreen(), true); + mToolbar.setNavUpButton(getCurrentScreen()); } else { mToolbar.setNavUpButton(); } diff --git a/android/app/src/main/java/com/reactnativenavigation/utils/StyleHelper.java b/android/app/src/main/java/com/reactnativenavigation/utils/StyleHelper.java index 8c3f398b0ac..62e301fe671 100644 --- a/android/app/src/main/java/com/reactnativenavigation/utils/StyleHelper.java +++ b/android/app/src/main/java/com/reactnativenavigation/utils/StyleHelper.java @@ -16,6 +16,7 @@ public class StyleHelper { public static void updateStyles(RnnToolBar toolBar, Screen screen) { try { + toolBar.setNavUpButton(screen); toolBar.updateAndSetButtons(screen); setWindowStyle(screen); toolBar.setupToolbarButtonsAsync(screen); diff --git a/android/app/src/main/java/com/reactnativenavigation/views/RnnToolBar.java b/android/app/src/main/java/com/reactnativenavigation/views/RnnToolBar.java index 5f10b90f532..899c316d649 100644 --- a/android/app/src/main/java/com/reactnativenavigation/views/RnnToolBar.java +++ b/android/app/src/main/java/com/reactnativenavigation/views/RnnToolBar.java @@ -214,16 +214,18 @@ private void hideToolbar() { } public void setNavUpButton() { - setNavUpButton(null, false); + setNavUpButton(null); } @SuppressWarnings({"ConstantConditions"}) - public void setNavUpButton(Screen screen, boolean isBack) { + public void setNavUpButton(Screen screen) { ActionBar actionBar = ContextProvider.getActivityContext().getSupportActionBar(); if (actionBar == null) { return; } + BaseReactActivity activity = (BaseReactActivity) getContext(); + boolean isBack = activity.getScreenStackSize() > 1; boolean hasDrawer = mDrawerToggle != null; Drawable navIcon = null; From d4d4770e223ed9e0a85136cbbba7b668a827905e Mon Sep 17 00:00:00 2001 From: Jason Skuby Date: Wed, 29 Jun 2016 20:45:55 -0500 Subject: [PATCH 5/7] Remove unneeded super calls for derived activities --- .../activities/BaseReactActivity.java | 4 ---- .../activities/BottomTabActivity.java | 11 ++++------- .../activities/SingleScreenActivity.java | 8 ++------ .../reactnativenavigation/activities/TabActivity.java | 2 -- 4 files changed, 6 insertions(+), 19 deletions(-) diff --git a/android/app/src/main/java/com/reactnativenavigation/activities/BaseReactActivity.java b/android/app/src/main/java/com/reactnativenavigation/activities/BaseReactActivity.java index 18b15f956be..1b1d284decf 100644 --- a/android/app/src/main/java/com/reactnativenavigation/activities/BaseReactActivity.java +++ b/android/app/src/main/java/com/reactnativenavigation/activities/BaseReactActivity.java @@ -226,7 +226,6 @@ protected void onDestroy() { } } - @CallSuper public void push(Screen screen) { StyleHelper.updateStyles(mToolbar, screen); if (mToolbar != null) { @@ -239,7 +238,6 @@ public void push(Screen screen) { } } - @CallSuper public Screen pop(String navigatorId) { if (mToolbar != null && getCurrentNavigatorId().equals(navigatorId) && @@ -250,7 +248,6 @@ public Screen pop(String navigatorId) { return null; } - @CallSuper public Screen popToRoot(String navigatorId) { if (mToolbar != null) { mToolbar.setNavUpButton(); @@ -259,7 +256,6 @@ public Screen popToRoot(String navigatorId) { return null; } - @CallSuper public Screen resetTo(Screen screen) { StyleHelper.updateStyles(mToolbar, screen); if (mToolbar != null) { diff --git a/android/app/src/main/java/com/reactnativenavigation/activities/BottomTabActivity.java b/android/app/src/main/java/com/reactnativenavigation/activities/BottomTabActivity.java index fc3f9cee92b..d21734e6787 100644 --- a/android/app/src/main/java/com/reactnativenavigation/activities/BottomTabActivity.java +++ b/android/app/src/main/java/com/reactnativenavigation/activities/BottomTabActivity.java @@ -114,22 +114,20 @@ public boolean onCreateOptionsMenu(Menu menu) { @Override public void push(Screen screen) { - super.push(screen); for (ScreenStack stack : mScreenStacks) { if (stack.peek().navigatorId.equals(screen.navigatorId)) { stack.push(screen); } } - StyleHelper.updateStyles(mToolbar, getCurrentScreen()); + StyleHelper.updateStyles(mToolbar, screen); } @Override public Screen pop(String navigatorId) { - super.pop(navigatorId); for (ScreenStack stack: mScreenStacks) { if (stack.peek().navigatorId.equals(navigatorId)) { Screen popped = stack.pop(); - StyleHelper.updateStyles(mToolbar, getCurrentScreen()); + StyleHelper.updateStyles(mToolbar, stack.peek()); return popped; } } @@ -138,11 +136,10 @@ public Screen pop(String navigatorId) { @Override public Screen popToRoot(String navigatorId) { - super.popToRoot(navigatorId); for (ScreenStack stack: mScreenStacks) { if (stack.peek().navigatorId.equals(navigatorId)) { Screen popped = stack.popToRoot(); - StyleHelper.updateStyles(mToolbar, getCurrentScreen()); + StyleHelper.updateStyles(mToolbar, stack.peek()); return popped; } } @@ -159,8 +156,8 @@ public Screen getCurrentScreen() { return mScreenStacks != null ? mScreenStacks.get(mCurrentStackPosition).peek() : null; } + @Override public Screen resetTo(Screen screen) { - super.resetTo(screen); StyleHelper.updateStyles(mToolbar, screen); return mScreenStacks.get(mCurrentStackPosition).resetTo(screen); } diff --git a/android/app/src/main/java/com/reactnativenavigation/activities/SingleScreenActivity.java b/android/app/src/main/java/com/reactnativenavigation/activities/SingleScreenActivity.java index 184cee4c938..9427b8e8645 100644 --- a/android/app/src/main/java/com/reactnativenavigation/activities/SingleScreenActivity.java +++ b/android/app/src/main/java/com/reactnativenavigation/activities/SingleScreenActivity.java @@ -57,14 +57,12 @@ protected void setupToolbar(Screen screen) { @Override public void push(Screen screen) { - super.push(screen); mScreenStack.push(screen); StyleHelper.updateStyles(mToolbar, screen); } @Override public Screen pop(String navigatorId) { - super.pop(navigatorId); Screen popped = mScreenStack.pop(); StyleHelper.updateStyles(mToolbar, getCurrentScreen()); return popped; @@ -72,15 +70,13 @@ public Screen pop(String navigatorId) { @Override public Screen popToRoot(String navigatorId) { - super.popToRoot(navigatorId); - Screen screen = mScreenStack.popToRoot(); + Screen popped = mScreenStack.popToRoot(); StyleHelper.updateStyles(mToolbar, getCurrentScreen()); - return screen; + return popped; } @Override public Screen resetTo(Screen screen) { - super.resetTo(screen); Screen popped = mScreenStack.resetTo(screen); StyleHelper.updateStyles(mToolbar, screen); return popped; diff --git a/android/app/src/main/java/com/reactnativenavigation/activities/TabActivity.java b/android/app/src/main/java/com/reactnativenavigation/activities/TabActivity.java index 6e24fa763fa..e7ef4630f11 100644 --- a/android/app/src/main/java/com/reactnativenavigation/activities/TabActivity.java +++ b/android/app/src/main/java/com/reactnativenavigation/activities/TabActivity.java @@ -68,14 +68,12 @@ public boolean onCreateOptionsMenu(Menu menu) { @Override public void push(Screen screen) { - super.push(screen); StyleHelper.updateStyles(mToolbar, screen); mAdapter.push(screen); } @Override public Screen pop(String navigatorId) { - super.pop(navigatorId); Screen popped = mAdapter.pop(navigatorId); setNavigationStyle(getCurrentScreen()); return popped; From 6214a7e85bfbec0f8861906a987b574d464c29f4 Mon Sep 17 00:00:00 2001 From: Jason Skuby Date: Wed, 29 Jun 2016 20:46:22 -0500 Subject: [PATCH 6/7] Remove unneeded call to setNavUpButton (handled in updateStyles) --- .../activities/BottomTabActivity.java | 7 ------- 1 file changed, 7 deletions(-) diff --git a/android/app/src/main/java/com/reactnativenavigation/activities/BottomTabActivity.java b/android/app/src/main/java/com/reactnativenavigation/activities/BottomTabActivity.java index d21734e6787..f11daf36543 100644 --- a/android/app/src/main/java/com/reactnativenavigation/activities/BottomTabActivity.java +++ b/android/app/src/main/java/com/reactnativenavigation/activities/BottomTabActivity.java @@ -188,13 +188,6 @@ public void onTabSelected(int position, boolean wasSelected) { mCurrentStackPosition = position; StyleHelper.updateStyles(mToolbar, getCurrentScreen()); - - // Hide or show back button if needed - if (getScreenStackSize() > 1) { - mToolbar.setNavUpButton(getCurrentScreen()); - } else { - mToolbar.setNavUpButton(); - } } public void setTabBadge(ReadableMap params) { From ee7e21d50d4e76f414756c86d3f0e74cf8989c0c Mon Sep 17 00:00:00 2001 From: Jason Skuby Date: Wed, 29 Jun 2016 20:52:47 -0500 Subject: [PATCH 7/7] Revert reference changes --- .../reactnativenavigation/activities/BottomTabActivity.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/android/app/src/main/java/com/reactnativenavigation/activities/BottomTabActivity.java b/android/app/src/main/java/com/reactnativenavigation/activities/BottomTabActivity.java index f11daf36543..76702326fef 100644 --- a/android/app/src/main/java/com/reactnativenavigation/activities/BottomTabActivity.java +++ b/android/app/src/main/java/com/reactnativenavigation/activities/BottomTabActivity.java @@ -119,7 +119,7 @@ public void push(Screen screen) { stack.push(screen); } } - StyleHelper.updateStyles(mToolbar, screen); + StyleHelper.updateStyles(mToolbar, getCurrentScreen()); } @Override @@ -127,7 +127,7 @@ public Screen pop(String navigatorId) { for (ScreenStack stack: mScreenStacks) { if (stack.peek().navigatorId.equals(navigatorId)) { Screen popped = stack.pop(); - StyleHelper.updateStyles(mToolbar, stack.peek()); + StyleHelper.updateStyles(mToolbar, getCurrentScreen()); return popped; } } @@ -139,7 +139,7 @@ public Screen popToRoot(String navigatorId) { for (ScreenStack stack: mScreenStacks) { if (stack.peek().navigatorId.equals(navigatorId)) { Screen popped = stack.popToRoot(); - StyleHelper.updateStyles(mToolbar, stack.peek()); + StyleHelper.updateStyles(mToolbar, getCurrentScreen()); return popped; } }