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 48fa8ea86d4..df066a6ddd4 100644 --- a/android/app/src/main/java/com/reactnativenavigation/activities/BaseReactActivity.java +++ b/android/app/src/main/java/com/reactnativenavigation/activities/BaseReactActivity.java @@ -238,7 +238,7 @@ public Screen pop(String navigatorId) { protected abstract String getCurrentNavigatorId(); - protected abstract Screen getCurrentScreen(); + public abstract Screen getCurrentScreen(); public abstract int getScreenStackSize(); 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 5020a90c55e..f7a35093d8c 100644 --- a/android/app/src/main/java/com/reactnativenavigation/activities/BottomTabActivity.java +++ b/android/app/src/main/java/com/reactnativenavigation/activities/BottomTabActivity.java @@ -64,10 +64,10 @@ private void setupPages(ArrayList screens) { private void setupToolbar(ArrayList screens) { Screen initialScreen = screens.get(0); - setNavigationStyle(initialScreen); mToolbar.setScreens(screens); mToolbar.setTitle(initialScreen.title); setSupportActionBar(mToolbar); + setNavigationStyle(initialScreen); } @Override @@ -111,12 +111,12 @@ public void push(Screen screen) { public Screen pop(String navigatorId) { super.pop(navigatorId); Screen screen = mScreenStacks.get(mCurrentStackPosition).pop(); - setNavigationStyle(screen); + setNavigationStyle(getCurrentScreen()); return screen; } @Override - protected Screen getCurrentScreen() { + public Screen getCurrentScreen() { return mScreenStacks.get(mCurrentStackPosition).peek(); } diff --git a/android/app/src/main/java/com/reactnativenavigation/activities/RootActivity.java b/android/app/src/main/java/com/reactnativenavigation/activities/RootActivity.java index 4d00661737e..77cb4ee02ae 100644 --- a/android/app/src/main/java/com/reactnativenavigation/activities/RootActivity.java +++ b/android/app/src/main/java/com/reactnativenavigation/activities/RootActivity.java @@ -28,7 +28,7 @@ protected void onPause() { // No need to implement stack interface since this activity is only used to start other // activities such as TabActivity or SingleScreenActivity. @Override - protected Screen getCurrentScreen() { + public Screen getCurrentScreen() { return null; } 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 6b1f05691e6..cbbacb35799 100644 --- a/android/app/src/main/java/com/reactnativenavigation/activities/SingleScreenActivity.java +++ b/android/app/src/main/java/com/reactnativenavigation/activities/SingleScreenActivity.java @@ -36,9 +36,9 @@ protected void handleOnCreate() { } protected void setupToolbar(Screen screen) { - setNavigationStyle(screen); mToolbar.setTitle(screen.title); setSupportActionBar(mToolbar); + setNavigationStyle(screen); } @Override @@ -52,7 +52,7 @@ public void push(Screen screen) { public Screen pop(String navigatorId) { super.pop(navigatorId); Screen screen = mScreenStack.pop(); - setNavigationStyle(screen); + setNavigationStyle(getCurrentScreen()); return screen; } @@ -62,7 +62,7 @@ public String getCurrentNavigatorId() { } @Override - protected Screen getCurrentScreen() { + public Screen getCurrentScreen() { return mScreenStack.peek(); } 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 09f06b7f74b..0dcc90e81a0 100644 --- a/android/app/src/main/java/com/reactnativenavigation/activities/TabActivity.java +++ b/android/app/src/main/java/com/reactnativenavigation/activities/TabActivity.java @@ -39,11 +39,11 @@ protected void handleOnCreate() { private void setupToolbar(ArrayList screens) { Screen initialScreen = screens.get(0); - setNavigationStyle(initialScreen); mToolbar.setScreens(screens); mToolbar.setTitle(initialScreen.title); mToolbar.setupToolbarButtonsAsync(initialScreen); setSupportActionBar(mToolbar); + setNavigationStyle(initialScreen); } @Override @@ -77,12 +77,12 @@ public void push(Screen screen) { public Screen pop(String navigatorId) { super.pop(navigatorId); Screen screen = mAdapter.pop(navigatorId); - setNavigationStyle(screen); + setNavigationStyle(getCurrentScreen()); return screen; } @Override - protected Screen getCurrentScreen() { + public Screen getCurrentScreen() { return mAdapter.peek(getCurrentNavigatorId()); } diff --git a/android/app/src/main/java/com/reactnativenavigation/core/objects/JsonObject.java b/android/app/src/main/java/com/reactnativenavigation/core/objects/JsonObject.java index cedbeaa9a8b..f2c65ed0eba 100644 --- a/android/app/src/main/java/com/reactnativenavigation/core/objects/JsonObject.java +++ b/android/app/src/main/java/com/reactnativenavigation/core/objects/JsonObject.java @@ -28,4 +28,8 @@ protected ReadableMap getMap(ReadableMap map, String key) { protected Integer getColor(ReadableMap map, String key) { return map.hasKey(key) ? Color.parseColor(map.getString(key)) : null; } + + protected Boolean getBoolean(ReadableMap map, String key) { + return map.hasKey(key) ? map.getBoolean(key) : null; + } } diff --git a/android/app/src/main/java/com/reactnativenavigation/core/objects/Screen.java b/android/app/src/main/java/com/reactnativenavigation/core/objects/Screen.java index 5777530d550..8170e3d0711 100644 --- a/android/app/src/main/java/com/reactnativenavigation/core/objects/Screen.java +++ b/android/app/src/main/java/com/reactnativenavigation/core/objects/Screen.java @@ -34,6 +34,7 @@ public class Screen extends JsonObject implements Serializable { private static final String KEY_TOOL_BAR_STYLE = "navigatorStyle"; private static final String KEY_STATUS_BAR_COLOR = "statusBarColor"; private static final String KEY_TOOL_BAR_COLOR = "toolBarColor"; + private static final String KEY_TOOL_BAR_HIDDEN = "toolBarHidden"; private static final String KEY_NAVIGATION_BAR_COLOR = "navigationBarColor"; private static final String KEY_BUTTONS_TINT_COLOR = "buttonsTint"; private static final String KEY_TITLE_COLOR = "titleColor"; @@ -54,6 +55,7 @@ public class Screen extends JsonObject implements Serializable { // Navigation styling @Nullable @ColorInt public Integer toolBarColor; + @Nullable public Boolean toolBarHidden; @Nullable @ColorInt public Integer statusBarColor; @Nullable @ColorInt public Integer navigationBarColor; @Nullable @ColorInt public Integer buttonsTintColor; @@ -105,6 +107,7 @@ public void setToolbarStyle(ReadableMap screen) { ReadableMap style = getMap(screen, KEY_TOOL_BAR_STYLE); if (style != null) { toolBarColor = getColor(style, KEY_TOOL_BAR_COLOR); + toolBarHidden = getBoolean(style, KEY_TOOL_BAR_HIDDEN); statusBarColor = getColor(style, KEY_STATUS_BAR_COLOR); navigationBarColor = getColor(style, KEY_NAVIGATION_BAR_COLOR); buttonsTintColor = getColor(style, KEY_BUTTONS_TINT_COLOR); diff --git a/android/app/src/main/java/com/reactnativenavigation/modal/RnnModal.java b/android/app/src/main/java/com/reactnativenavigation/modal/RnnModal.java index 5054862b1d9..436bd429ed1 100644 --- a/android/app/src/main/java/com/reactnativenavigation/modal/RnnModal.java +++ b/android/app/src/main/java/com/reactnativenavigation/modal/RnnModal.java @@ -28,26 +28,35 @@ public class RnnModal extends Dialog implements DialogInterface.OnDismissListene private ScreenStack mScreenStack; private View mContentView; + private Screen mOriginalScreen; private Screen mScreen; + private RnnToolBar mToolBar; + private BaseReactActivity mContext; public RnnModal(BaseReactActivity context, Screen screen) { super(context, R.style.Modal); mScreen = screen; + mOriginalScreen = context.getCurrentScreen(); + mContext = context; ModalController.getInstance().add(this); init(context); } + private void updateToolbar(Screen screen) { + mToolBar.setTitle(screen.title); + mContext.setSupportActionBar(mToolBar); + mToolBar.setStyle(screen); + mToolBar.setupToolbarButtonsAsync(screen); + } + @SuppressLint("InflateParams") private void init(final Context context) { requestWindowFeature(Window.FEATURE_NO_TITLE); mContentView = LayoutInflater.from(context).inflate(R.layout.modal_layout, null, false); - RnnToolBar toolBar = (RnnToolBar) mContentView.findViewById(R.id.toolbar); + mToolBar = (RnnToolBar) mContentView.findViewById(R.id.toolbar); mScreenStack = (ScreenStack) mContentView.findViewById(R.id.screenStack); - setContentView(mContentView); - toolBar.setStyle(mScreen); - toolBar.setTitle(mScreen.title); - toolBar.setupToolbarButtonsAsync(mScreen); + updateToolbar(mScreen); mScreenStack.push(mScreen, new RctView.OnDisplayedListener() { @Override public void onDisplayed() { @@ -87,4 +96,17 @@ public void onBackPressed() { public void onDismiss(DialogInterface dialog) { ModalController.getInstance().remove(); } + + @Override + public void dismiss(){ + super.dismiss(); + if (mContext != null && !mContext.isFinishing()) { + mContext.runOnUiThread(new Runnable() { + @Override + public void run() { + updateToolbar(mOriginalScreen); + } + }); + } + } } 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 ee6aed863fb..86285ed1f8a 100644 --- a/android/app/src/main/java/com/reactnativenavigation/views/RnnToolBar.java +++ b/android/app/src/main/java/com/reactnativenavigation/views/RnnToolBar.java @@ -70,6 +70,12 @@ public void setStyle(Screen screen) { } else { resetTitleTextColor(); } + + if (screen.toolBarHidden != null && screen.toolBarHidden) { + hideToolbar(); + } else { + showToolbar(); + } } private void resetBackground() { @@ -95,6 +101,20 @@ public void setupToolbarButtonsAsync(Screen oldScreen, Screen newScreen) { } } + public void showToolbar() { + ActionBar actionBar = ContextProvider.getActivityContext().getSupportActionBar(); + if (actionBar != null) { + actionBar.show(); + } + } + + public void hideToolbar() { + ActionBar actionBar = ContextProvider.getActivityContext().getSupportActionBar(); + if (actionBar != null) { + actionBar.hide(); + } + } + @SuppressWarnings({"ConstantConditions"}) public void showBackButton(Screen screen) { ActionBar actionBar = ContextProvider.getActivityContext().getSupportActionBar();