Use Case: When exposing the layout, other android code can check what kind of layout it is and react accordingly, fx:
```
if (activity.getLayout() instanceof BottomTabsLayout) {
// ...
}
```
This commit continues the work done in #2057.
When hardware back button is pressed, we handle it accordingly:
1. If screen was pushed with `overrideBackPress: true`, we emit `backPress` event
2. Let `BackHandler` handle the event
3. If the event wasn't handled by `BackHandler`, pop the stack
4. let the system handle the event
Revert "fix issues with Android BackHandler listeners not getting called, not allowing to override the back functionality from the JS side (#2057)" (#2060)
This commit adds support for fade and slide-horizontal animations for modals and a few other animation related changes:
* Support defining animationType when calling dismissModal
* Support fade and slide horizontal animations for modals
* Slightly reworked current screen animations timings
* Fixed slide-horizontal x offset and removed alpha
Stop calling host.clear() when activity is destroyed (#1838)
This is a breaking change and has to be opt-in. To prevent host.clear from being called,
Override `clearHostOnActivityDestroy` in MainApplication and return false:
```java
@Override
public boolean clearHostOnActivityDestroy() {
return false;
}
```
If host isn't cleared, the next time the app is opened react context might still be initialized.
In this case we emit appLaunched event which has to be handled in Js:
```js
Promise.resolve(Navigation.isAppLaunched())
.then((appLaunched) => {
if (appLaunched) {
startApp();
}
new NativeEventsReceiver().appLaunched(() => {
startApp();
});
})
```
* added method for getting the currently visible screen ID. Can be useful to decide if logic should be applied according to screen visibility, for example: set buttons/title dynamically, or even determine that you don’t need to show the same screen again if it’s the current one that’s showing
* Implement getCurrentlyVisibleScreenId on Android
Can be used statically:
Navigation.getCurrentlyVisibleScreenId() - returns the unique screen
instance id
With a navigator instance:
await this.props.navigator.screenIsCurrentlyVisible() - resolves a
promise that checks if the current screen is visible
* Add screen visibility listener which can be registered globally
API
new ScreenVisibilityListener({
willAppear: ({screen, timestamp}) => console.log(`Displaying screen ${screen}`),
didAppear: ({screen, timestamp}) => console.log(`Screen ${screen} displayed in ${Date.now() - timestamp} millis`)
}).register();
todo
* Add timestamp to modal, resetTo
* implement unregister
* implement iOS
* Add global screen visibility listener to example app
* Think I better assign a value to emitter
* Send timestamp in resetTo
* Moved listener to library, it can be deleted from the app
* Add push and resetTo buttons to pushed screens
* Send appear/disappear events after animation ends
* Pass pop timestamp from js
* Send timestamp in popToRoot
* Add popToRoot button in push screen
* Add few navigation buttons to modal screen
* Pass timestamp to tabs
relevant only to first/initial tab
* Update timestamp when navigating between BottomTabs
* Send screen visible events after modal dismiss
* log willDisappear and didDisappear
* Report both start and end timestamps
* Implement unregister
* Send NavigationType parameter in visibilityEvent
This indicates the type of the navigation command that triggered the visibility change
* Rename pushInitialScreen to more explicit name
* Fix duplicate initialScreen visibility events
* Update screen visibility log statement
* Show popToRoot in modal screen only if screens were pushed
* implement global screen event for iOS
* fix lint issues
* React Native v0.40.0 fixes
* Implement disableIconTint property on Android TitleBarButtons
* Show contextual menu only on Modal, if showing
* Fix crash if font not set in title bar button parameters
Since fab set dynamically wasn’t saved in screen params, when returning
to that screen the fab wasn't displayed.
This commit also enables setting fab dynamically in modals
* [android] Basic implementation of orientation change event and getter
#dasdsa
* [android] Check if fabAnimator is not null
* [android] Add configChanges prop to NavigationActivity in AndroidManifest
* [android] Fix duplicate declaration of onConfigurationChange
* [android] Use EventEmitter class to dispatch orientation change events
dismissInAppNotification support on android. (#687)
* Add .hideInAppNotification on android.
- Separate hide and show animations.
- Implement a little bit of throttling around successive calls to .showInAppNotification
* Update example to demo dismiss.