react-native-navigation 7.23.1 → 7.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.buildkite/pipeline.yml +51 -11
- package/.nvmrc +1 -0
- package/Mock.d.ts +1 -0
- package/Mock.js +4 -0
- package/Mock.ts +1 -1
- package/README.md +0 -1
- package/jest.config.js +40 -0
- package/lib/{src/Mock → Mock}/Application.tsx +0 -0
- package/lib/{src/Mock → Mock}/ComponentProps.tsx +0 -0
- package/lib/{src/Mock → Mock}/Components/BottomTabs.tsx +0 -0
- package/lib/{src/Mock → Mock}/Components/ComponentScreen.tsx +13 -2
- package/lib/{src/Mock → Mock}/Components/LayoutComponent.tsx +0 -0
- package/lib/{src/Mock → Mock}/Components/Modals.tsx +0 -0
- package/lib/{src/Mock → Mock}/Components/NavigationButton.tsx +1 -1
- package/lib/{src/Mock → Mock}/Components/Overlays.tsx +0 -0
- package/lib/{src/Mock → Mock}/Components/Stack.tsx +0 -0
- package/lib/{src/Mock → Mock}/Components/TopBar.tsx +2 -2
- package/lib/{src/Mock → Mock}/Layouts/BottomTabsNode.ts +1 -1
- package/lib/{src/Mock → Mock}/Layouts/ComponentNode.ts +1 -1
- package/lib/{src/Mock → Mock}/Layouts/LayoutNodeFactory.ts +0 -0
- package/lib/{src/Mock → Mock}/Layouts/Node.ts +1 -1
- package/lib/{src/Mock → Mock}/Layouts/ParentNode.ts +2 -2
- package/lib/{src/Mock → Mock}/Layouts/StackNode.ts +0 -0
- package/lib/{src/Mock → Mock}/Stores/EventsStore.ts +10 -2
- package/lib/{src/Mock → Mock}/Stores/LayoutStore.ts +3 -2
- package/lib/{src/Mock → Mock}/connect.ts +0 -0
- package/lib/Mock/constants.d.ts +2 -0
- package/lib/Mock/constants.js +5 -0
- package/lib/{src/Mock → Mock}/constants.ts +0 -0
- package/lib/Mock/index.d.ts +3 -0
- package/lib/Mock/index.js +14 -0
- package/lib/{src/Mock → Mock}/index.ts +0 -0
- package/lib/{src/Mock → Mock}/mocks/AppRegistryService.ts +0 -0
- package/lib/{src/Mock → Mock}/mocks/NativeCommandsSender.tsx +1 -1
- package/lib/{src/Mock → Mock}/mocks/NativeEventsReceiver.ts +7 -4
- package/lib/android/app/build.gradle +23 -21
- package/lib/android/app/src/main/java/com/reactnativenavigation/options/FontOptions.kt +2 -2
- package/lib/android/app/src/main/java/com/reactnativenavigation/options/HardwareBackButtonOptions.kt +35 -2
- package/lib/android/app/src/main/java/com/reactnativenavigation/options/LayoutFactory.java +32 -17
- package/lib/android/app/src/main/java/com/reactnativenavigation/options/Options.java +1 -1
- package/lib/android/app/src/main/java/com/reactnativenavigation/options/parsers/TypefaceLoader.kt +16 -10
- package/lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationModule.java +5 -2
- package/lib/android/app/src/main/java/com/reactnativenavigation/react/modal/ModalFrameLayout.kt +3 -3
- package/lib/android/app/src/main/java/com/reactnativenavigation/react/modal/ModalViewManager.kt +11 -8
- package/lib/android/app/src/main/java/com/reactnativenavigation/utils/SystemUiUtils.kt +168 -0
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabPresenter.java +5 -2
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsController.java +42 -2
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/child/ChildController.java +12 -16
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/component/ComponentViewController.java +19 -11
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/externalcomponent/ExternalComponentViewController.java +2 -2
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenter.java +6 -4
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/overlay/OverlayManager.kt +8 -3
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackController.java +15 -7
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackPresenter.java +127 -138
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/TopBarController.kt +183 -22
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/ButtonController.kt +25 -4
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/ButtonPresenter.kt +9 -1
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/ButtonSpan.kt +1 -1
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/viewcontroller/Presenter.java +52 -71
- package/lib/android/app/src/main/java/com/reactnativenavigation/views/component/ComponentLayout.java +2 -0
- package/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/ReactImageMatrixAnimator.kt +2 -3
- package/lib/android/app/src/main/java/com/reactnativenavigation/views/stack/topbar/TopBar.java +1 -2
- package/lib/android/app/src/main/java/com/reactnativenavigation/views/stack/topbar/titlebar/ButtonBar.kt +7 -12
- package/lib/android/app/src/main/java/com/reactnativenavigation/views/stack/topbar/titlebar/TitleAndButtonsContainer.kt +0 -2
- package/lib/android/app/src/main/java/com/reactnativenavigation/views/stack/topbar/titlebar/TitleSubTitleLayout.kt +0 -7
- package/lib/android/app/src/reactNative51/java/com/reactnativenavigation/react/NavigationReactNativeHost.java +2 -1
- package/lib/android/app/src/test/java/com/reactnativenavigation/BaseTest.java +7 -6
- package/lib/android/app/src/test/java/com/reactnativenavigation/TestActivity.java +5 -0
- package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/ImageLoaderMock.kt +5 -4
- package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/Mocks.kt +3 -2
- package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TypefaceLoaderMock.kt +5 -1
- package/lib/android/app/src/test/java/com/reactnativenavigation/options/TransitionAnimationOptionsTest.kt +2 -3
- package/lib/android/app/src/test/java/com/reactnativenavigation/presentation/PresenterTest.java +25 -10
- package/lib/android/app/src/test/java/com/reactnativenavigation/utils/LayoutFactoryTest.java +25 -2
- package/lib/android/app/src/test/java/com/reactnativenavigation/utils/MotionEventTest.kt +1 -1
- package/lib/android/app/src/test/java/com/reactnativenavigation/utils/{TitleAndButtonsMeasurer.kt → TitleAndButtonsMeasurerTest.kt} +2 -2
- package/lib/android/app/src/test/java/com/reactnativenavigation/utils/UiThreadTest.java +2 -2
- package/lib/android/app/src/test/java/com/reactnativenavigation/utils/UiUtilsTest.java +1 -1
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsControllerTest.kt +572 -0
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsPresenterTest.kt +1 -1
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/child/ChildControllerTest.java +2 -1
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/component/ComponentViewControllerTest.java +5 -5
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/fakes/FakeParentController.kt +1 -1
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalAnimatorTest.kt +1 -1
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenterTest.java +7 -3
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalStackTest.java +17 -4
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/navigator/NavigatorTest.java +2 -2
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/navigator/RootPresenterTest.kt +5 -5
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/overlay/OverlayManagerTest.java +1 -0
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/parent/ParentControllerTest.java +4 -0
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/sidemenu/SideMenuControllerTest.java +6 -2
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackAnimatorTest.kt +1 -1
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackControllerTest.kt +13 -8
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackPresenterTest.kt +58 -51
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/TopBarControllerTest.kt +219 -41
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/viewcontroller/ViewControllerTest.java +4 -1
- package/lib/android/app/src/test/java/com/reactnativenavigation/views/TitleAndButtonsContainerTest.kt +2 -2
- package/lib/android/app/src/test/java/com/reactnativenavigation/views/animations/BaseViewAnimatorTest.kt +4 -4
- package/lib/android/app/src/test/java/com/reactnativenavigation/views/bottomtabs/BottomTabsContainerTest.kt +1 -1
- package/lib/android/app/src/test/java/com/reactnativenavigation/views/bottomtabs/BottomTabsTest.kt +4 -4
- package/lib/dist/Mock/Application.js +2 -2
- package/lib/dist/Mock/Components/BottomTabs.js +2 -2
- package/lib/dist/Mock/Components/ComponentScreen.js +15 -5
- package/lib/dist/Mock/Components/LayoutComponent.js +3 -2
- package/lib/dist/Mock/Components/Modals.js +2 -2
- package/lib/dist/Mock/Components/NavigationButton.d.ts +1 -1
- package/lib/dist/Mock/Components/NavigationButton.js +8 -10
- package/lib/dist/Mock/Components/Overlays.js +2 -2
- package/lib/dist/Mock/Components/Stack.js +2 -2
- package/lib/dist/Mock/Components/TopBar.d.ts +2 -2
- package/lib/dist/Mock/Components/TopBar.js +7 -6
- package/lib/dist/Mock/Layouts/BottomTabsNode.d.ts +1 -1
- package/lib/dist/Mock/Layouts/BottomTabsNode.js +3 -3
- package/lib/dist/Mock/Layouts/ComponentNode.d.ts +1 -1
- package/lib/dist/Mock/Layouts/ComponentNode.js +4 -4
- package/lib/dist/Mock/Layouts/LayoutNodeFactory.js +3 -3
- package/lib/dist/Mock/Layouts/Node.d.ts +1 -1
- package/lib/dist/Mock/Layouts/Node.js +5 -0
- package/lib/dist/Mock/Layouts/ParentNode.d.ts +2 -2
- package/lib/dist/Mock/Layouts/ParentNode.js +4 -3
- package/lib/dist/Mock/Layouts/StackNode.js +1 -1
- package/lib/dist/Mock/Stores/EventsStore.d.ts +5 -2
- package/lib/dist/Mock/Stores/EventsStore.js +7 -0
- package/lib/dist/Mock/Stores/LayoutStore.js +6 -3
- package/lib/dist/Mock/connect.js +1 -1
- package/lib/dist/Mock/index.js +1 -1
- package/lib/dist/Mock/mocks/NativeCommandsSender.d.ts +1 -1
- package/lib/dist/Mock/mocks/NativeCommandsSender.js +2 -2
- package/lib/dist/Mock/mocks/NativeEventsReceiver.d.ts +3 -3
- package/lib/dist/Mock/mocks/NativeEventsReceiver.js +6 -3
- package/lib/dist/{Navigation.d.ts → src/Navigation.d.ts} +0 -0
- package/lib/dist/{Navigation.js → src/Navigation.js} +19 -3
- package/lib/dist/{NavigationDelegate.d.ts → src/NavigationDelegate.d.ts} +0 -0
- package/lib/dist/{NavigationDelegate.js → src/NavigationDelegate.js} +1 -0
- package/lib/dist/{adapters → src/adapters}/AppRegistryService.d.ts +0 -0
- package/lib/dist/{adapters → src/adapters}/AppRegistryService.js +0 -0
- package/lib/dist/{adapters → src/adapters}/AssetResolver.d.ts +0 -0
- package/lib/dist/{adapters → src/adapters}/AssetResolver.js +0 -0
- package/lib/dist/src/adapters/ColorService.d.ts +3 -0
- package/lib/dist/{adapters → src/adapters}/ColorService.js +1 -1
- package/lib/dist/{adapters → src/adapters}/Constants.d.ts +0 -0
- package/lib/dist/{adapters → src/adapters}/Constants.js +10 -6
- package/lib/dist/{adapters → src/adapters}/NativeCommandsSender.d.ts +0 -0
- package/lib/dist/{adapters → src/adapters}/NativeCommandsSender.js +1 -0
- package/lib/dist/{adapters → src/adapters}/NativeEventsReceiver.d.ts +0 -0
- package/lib/dist/{adapters → src/adapters}/NativeEventsReceiver.js +1 -0
- package/lib/dist/{adapters → src/adapters}/NativeEventsReceiver.mock.d.ts +0 -0
- package/lib/dist/{adapters → src/adapters}/NativeEventsReceiver.mock.js +0 -0
- package/lib/dist/{adapters → src/adapters}/TouchablePreview.d.ts +0 -0
- package/lib/dist/src/adapters/TouchablePreview.js +89 -0
- package/lib/dist/{adapters → src/adapters}/UniqueIdProvider.d.ts +0 -0
- package/lib/dist/{adapters → src/adapters}/UniqueIdProvider.js +2 -2
- package/lib/dist/{commands → src/commands}/Commands.d.ts +0 -0
- package/lib/dist/{commands → src/commands}/Commands.js +24 -10
- package/lib/dist/{commands → src/commands}/Deprecations.d.ts +0 -0
- package/lib/dist/src/commands/Deprecations.js +80 -0
- package/lib/dist/{commands → src/commands}/LayoutTreeCrawler.d.ts +0 -0
- package/lib/dist/{commands → src/commands}/LayoutTreeCrawler.js +4 -2
- package/lib/dist/{commands → src/commands}/LayoutTreeParser.d.ts +0 -0
- package/lib/dist/{commands → src/commands}/LayoutTreeParser.js +1 -0
- package/lib/dist/{commands → src/commands}/LayoutType.d.ts +0 -0
- package/lib/dist/{commands → src/commands}/LayoutType.js +0 -0
- package/lib/dist/{commands → src/commands}/OptionsCrawler.d.ts +0 -0
- package/lib/dist/{commands → src/commands}/OptionsCrawler.js +6 -4
- package/lib/dist/{commands → src/commands}/OptionsProcessor.d.ts +1 -1
- package/lib/dist/{commands → src/commands}/OptionsProcessor.js +50 -42
- package/lib/dist/{components → src/components}/ComponentRegistry.d.ts +0 -0
- package/lib/dist/{components → src/components}/ComponentRegistry.js +4 -0
- package/lib/dist/{components → src/components}/ComponentWrapper.d.ts +0 -0
- package/lib/dist/{components → src/components}/ComponentWrapper.js +17 -17
- package/lib/dist/{components → src/components}/Modal.d.ts +0 -0
- package/lib/dist/{components → src/components}/Modal.js +8 -8
- package/lib/dist/{components → src/components}/Store.d.ts +2 -0
- package/lib/dist/{components → src/components}/Store.js +13 -6
- package/lib/dist/{events → src/events}/CommandsObserver.d.ts +0 -0
- package/lib/dist/{events → src/events}/CommandsObserver.js +2 -1
- package/lib/dist/{events → src/events}/ComponentEventsObserver.d.ts +4 -2
- package/lib/dist/{events → src/events}/ComponentEventsObserver.js +16 -14
- package/lib/dist/{events → src/events}/EventsRegistry.d.ts +2 -2
- package/lib/dist/{events → src/events}/EventsRegistry.js +3 -0
- package/lib/dist/{index.d.ts → src/index.d.ts} +0 -0
- package/lib/dist/src/index.js +22 -0
- package/lib/dist/{interfaces → src/interfaces}/CommandName.d.ts +0 -0
- package/lib/dist/{interfaces → src/interfaces}/CommandName.js +0 -0
- package/lib/dist/{interfaces → src/interfaces}/ComponentEvents.d.ts +0 -0
- package/lib/dist/{interfaces → src/interfaces}/ComponentEvents.js +0 -0
- package/lib/dist/{interfaces → src/interfaces}/EventSubscription.d.ts +0 -0
- package/lib/dist/{interfaces → src/interfaces}/EventSubscription.js +0 -0
- package/lib/dist/{interfaces → src/interfaces}/Events.d.ts +0 -0
- package/lib/dist/{interfaces → src/interfaces}/Events.js +0 -0
- package/lib/dist/{interfaces → src/interfaces}/Layout.d.ts +0 -0
- package/lib/dist/{interfaces → src/interfaces}/Layout.js +0 -0
- package/lib/dist/{interfaces → src/interfaces}/NavigationComponent.d.ts +0 -0
- package/lib/dist/{interfaces → src/interfaces}/NavigationComponent.js +8 -1
- package/lib/dist/{interfaces → src/interfaces}/NavigationComponentListener.d.ts +0 -0
- package/lib/dist/{interfaces → src/interfaces}/NavigationComponentListener.js +0 -0
- package/lib/dist/{interfaces → src/interfaces}/NavigationComponentProps.d.ts +0 -0
- package/lib/dist/{interfaces → src/interfaces}/NavigationComponentProps.js +0 -0
- package/lib/dist/{interfaces → src/interfaces}/NavigationFunctionComponent.d.ts +0 -0
- package/lib/dist/{interfaces → src/interfaces}/NavigationFunctionComponent.js +0 -0
- package/lib/dist/{interfaces → src/interfaces}/Options.d.ts +9 -0
- package/lib/dist/{interfaces → src/interfaces}/Options.js +0 -0
- package/lib/dist/{interfaces → src/interfaces}/ProcessorSubscription.d.ts +0 -0
- package/lib/dist/{interfaces → src/interfaces}/ProcessorSubscription.js +0 -0
- package/lib/dist/{interfaces → src/interfaces}/Processors.d.ts +0 -0
- package/lib/dist/{interfaces → src/interfaces}/Processors.js +0 -0
- package/lib/dist/{processors → src/processors}/LayoutProcessor.d.ts +0 -0
- package/lib/dist/{processors → src/processors}/LayoutProcessor.js +1 -0
- package/lib/dist/{processors → src/processors}/LayoutProcessorsStore.d.ts +0 -0
- package/lib/dist/{processors → src/processors}/LayoutProcessorsStore.js +1 -3
- package/lib/dist/{processors → src/processors}/OptionProcessorsStore.d.ts +0 -0
- package/lib/dist/{processors → src/processors}/OptionProcessorsStore.js +1 -3
- package/lib/dist/{types.d.ts → src/types.d.ts} +0 -0
- package/lib/dist/{types.js → src/types.js} +0 -0
- package/lib/ios/AnimationObserver.h +17 -0
- package/lib/ios/AnimationObserver.m +41 -0
- package/lib/ios/BottomTabPresenter.h +0 -3
- package/lib/ios/BottomTabPresenter.m +0 -8
- package/lib/ios/RNNAssert.h +2 -2
- package/lib/ios/RNNBasePresenter.h +0 -4
- package/lib/ios/RNNBasePresenter.m +0 -12
- package/lib/ios/RNNBottomTabOptions.m +2 -1
- package/lib/ios/RNNBottomTabsController.m +8 -8
- package/lib/ios/RNNBridgeManager.mm +0 -1
- package/lib/ios/RNNButtonBuilder.m +2 -0
- package/lib/ios/RNNButtonOptions.h +1 -0
- package/lib/ios/RNNButtonOptions.m +4 -0
- package/lib/ios/RNNCommandsHandler.m +15 -8
- package/lib/ios/RNNComponentPresenter.m +0 -4
- package/lib/ios/RNNComponentViewController.m +2 -4
- package/lib/ios/RNNDotIndicatorPresenter.m +2 -1
- package/lib/ios/RNNExternalViewController.m +2 -4
- package/lib/ios/RNNModalManager.h +2 -1
- package/lib/ios/RNNModalManager.m +12 -21
- package/lib/ios/RNNSegmentedControl.h +1 -1
- package/lib/ios/RNNSideMenuChildVC.m +0 -4
- package/lib/ios/RNNSideMenuController.m +0 -4
- package/lib/ios/RNNSplitViewController.m +0 -4
- package/lib/ios/RNNStackController.m +0 -4
- package/lib/ios/RNNStackPresenter.m +3 -0
- package/lib/ios/RNNSwizzles.m +20 -0
- package/lib/ios/RNNTabBarItemCreator.m +3 -2
- package/lib/ios/RNNUIBarButtonItem.h +2 -0
- package/lib/ios/RNNUIBarButtonItem.m +17 -0
- package/lib/ios/ReactNativeNavigation.xcodeproj/project.pbxproj +8 -0
- package/lib/ios/TopBarPresenter.m +8 -4
- package/lib/ios/UIViewController+RNNOptions.m +1 -1
- package/lib/src/commands/Commands.ts +6 -1
- package/lib/src/commands/LayoutTreeCrawler.ts +2 -2
- package/lib/src/commands/OptionsCrawler.ts +2 -1
- package/lib/src/commands/OptionsProcessor.ts +15 -13
- package/lib/src/components/Store.ts +9 -0
- package/lib/src/events/ComponentEventsObserver.ts +5 -1
- package/lib/src/events/EventsRegistry.ts +2 -1
- package/lib/src/interfaces/Options.ts +10 -0
- package/package.json +19 -60
- package/tsconfig.mocks.json +7 -0
- package/lib/android/app/src/main/java/com/reactnativenavigation/utils/StatusBarUtils.java +0 -41
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsControllerTest.java +0 -511
- package/lib/dist/adapters/ColorService.d.ts +0 -3
- package/lib/dist/adapters/TouchablePreview.js +0 -91
- package/lib/dist/commands/Deprecations.js +0 -82
- package/lib/dist/index.js +0 -22
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-navigation",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.24.0",
|
|
4
4
|
"description": "React Native Navigation - truly native navigation for iOS and Android",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"nativePackage": true,
|
|
@@ -19,8 +19,8 @@
|
|
|
19
19
|
"bin": {
|
|
20
20
|
"rnn-link": "./autolink/postlink/run.js"
|
|
21
21
|
},
|
|
22
|
-
"main": "lib/dist/index.js",
|
|
23
|
-
"typings": "lib/dist/index.d.ts",
|
|
22
|
+
"main": "lib/dist/src/index.js",
|
|
23
|
+
"typings": "lib/dist/src/index.d.ts",
|
|
24
24
|
"scripts": {
|
|
25
25
|
"build": "node ./scripts/build",
|
|
26
26
|
"watch": "node ./scripts/watch",
|
|
@@ -66,45 +66,46 @@
|
|
|
66
66
|
"tslib": "1.9.3"
|
|
67
67
|
},
|
|
68
68
|
"devDependencies": {
|
|
69
|
-
"@babel/core": "7.10.3",
|
|
70
69
|
"@babel/plugin-proposal-export-default-from": "7.10.1",
|
|
71
70
|
"@babel/plugin-proposal-export-namespace-from": "7.10.1",
|
|
72
|
-
"@babel/types": "7.6
|
|
71
|
+
"@babel/types": "7.15.6",
|
|
73
72
|
"@react-native-community/blur": "^3.6.0",
|
|
74
73
|
"@react-native-community/datetimepicker": "^3.4.7",
|
|
75
74
|
"@react-native-community/eslint-config": "2.0.0",
|
|
76
75
|
"@react-native-community/netinfo": "^5.9.4",
|
|
77
76
|
"@testing-library/jest-native": "^4.0.1",
|
|
78
77
|
"@testing-library/react-native": "^7.2.0",
|
|
79
|
-
"@types/detox": "
|
|
78
|
+
"@types/detox": "17.14.3",
|
|
80
79
|
"@types/hoist-non-react-statics": "^3.0.1",
|
|
81
80
|
"@types/jasmine": "3.5.10",
|
|
82
|
-
"@types/jest": "
|
|
81
|
+
"@types/jest": "27.0.2",
|
|
83
82
|
"@types/lodash": "^4.14.149",
|
|
84
83
|
"@types/react": "16.9.41",
|
|
85
84
|
"@types/react-native": "0.63.1",
|
|
86
85
|
"@types/react-test-renderer": "16.9.2",
|
|
87
|
-
"@typescript-eslint/eslint-plugin": "
|
|
88
|
-
"@typescript-eslint/parser": "
|
|
89
|
-
"babel-jest": "
|
|
86
|
+
"@typescript-eslint/eslint-plugin": "4.33.0",
|
|
87
|
+
"@typescript-eslint/parser": "4.33.0",
|
|
88
|
+
"babel-jest": "^27.2.5",
|
|
90
89
|
"clang-format": "^1.4.0",
|
|
91
|
-
"detox": "18.
|
|
90
|
+
"detox": "18.23.1",
|
|
92
91
|
"eslint": "7.3.0",
|
|
93
92
|
"eslint-config-prettier": "6.11.0",
|
|
94
93
|
"eslint-plugin-prettier": "3.1.4",
|
|
95
94
|
"github-release-notes": "https://github.com/yogevbd/github-release-notes/tarball/e601b3dba72dcd6cba323c1286ea6dd0c0110b58",
|
|
96
95
|
"husky": "4.2.5",
|
|
97
96
|
"identity-obj-proxy": "3.0.0",
|
|
98
|
-
"
|
|
99
|
-
"
|
|
97
|
+
"@babel/core": "7.15.8",
|
|
98
|
+
"@babel/runtime": "7.15.4",
|
|
99
|
+
"jest": "^27.2.5",
|
|
100
|
+
"jest-circus": "^27.2.5",
|
|
100
101
|
"lint-staged": "10.2.11",
|
|
101
|
-
"metro-react-native-babel-preset": "0.
|
|
102
|
+
"metro-react-native-babel-preset": "0.66.2",
|
|
102
103
|
"prettier": "2.1.2",
|
|
103
|
-
"react": "
|
|
104
|
-
"react-native": "0.
|
|
104
|
+
"react": "17.0.2",
|
|
105
|
+
"react-native": "0.66.3",
|
|
105
106
|
"react-native-fast-image": "^8.3.4",
|
|
106
107
|
"react-native-gesture-handler": "^1.6.1",
|
|
107
|
-
"react-native-reanimated": "
|
|
108
|
+
"react-native-reanimated": "2.3.0-beta.2",
|
|
108
109
|
"react-native-ui-lib": "5.11.0",
|
|
109
110
|
"react-redux": "5.x.x",
|
|
110
111
|
"react-test-renderer": "16.13.1",
|
|
@@ -113,52 +114,10 @@
|
|
|
113
114
|
"shell-utils": "1.x.x",
|
|
114
115
|
"ts-mockito": "^2.3.1",
|
|
115
116
|
"typedoc": "0.x.x",
|
|
116
|
-
"typescript": "
|
|
117
|
+
"typescript": "4.4.3",
|
|
117
118
|
"detox-testing-library-rnn-adapter": "2.x.x",
|
|
118
119
|
"remx": "3.x.x"
|
|
119
120
|
},
|
|
120
|
-
"jest": {
|
|
121
|
-
"preset": "react-native",
|
|
122
|
-
"transform": {
|
|
123
|
-
"^.+\\.js$": "<rootDir>/node_modules/react-native/jest/preprocessor.js"
|
|
124
|
-
},
|
|
125
|
-
"roots": [
|
|
126
|
-
"<rootDir>/lib/src/",
|
|
127
|
-
"<rootDir>/playground/src/",
|
|
128
|
-
"<rootDir>/integration/",
|
|
129
|
-
"<rootDir>/scripts/",
|
|
130
|
-
"<rootDir>/e2e/"
|
|
131
|
-
],
|
|
132
|
-
"setupFilesAfterEnv": [
|
|
133
|
-
"./jest-setup.js"
|
|
134
|
-
],
|
|
135
|
-
"moduleNameMapper": {
|
|
136
|
-
"react-native-navigation/Mock": "<rootDir>/lib/src/Mock",
|
|
137
|
-
"react-native-navigation": "<rootDir>/lib/src",
|
|
138
|
-
"\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$": "<rootDir>/playground/img/layouts@2x.png"
|
|
139
|
-
},
|
|
140
|
-
"collectCoverageFrom": [
|
|
141
|
-
"lib/src/**/*.ts",
|
|
142
|
-
"lib/src/**/*.tsx",
|
|
143
|
-
"integration/**/*.js",
|
|
144
|
-
"!lib/dist/index.js",
|
|
145
|
-
"!lib/dist/Navigation.js",
|
|
146
|
-
"!lib/dist/adapters/**/*",
|
|
147
|
-
"!lib/dist/interfaces/**/*",
|
|
148
|
-
"!lib/dist/**/*.test.*",
|
|
149
|
-
"!integration/**/*.test.*",
|
|
150
|
-
"!integration/*.test.*",
|
|
151
|
-
"!e2e/**/*test.js"
|
|
152
|
-
],
|
|
153
|
-
"resetMocks": true,
|
|
154
|
-
"resetModules": true,
|
|
155
|
-
"coverageReporters": [
|
|
156
|
-
"json",
|
|
157
|
-
"lcov",
|
|
158
|
-
"text",
|
|
159
|
-
"html"
|
|
160
|
-
]
|
|
161
|
-
},
|
|
162
121
|
"husky": {
|
|
163
122
|
"hooks": {
|
|
164
123
|
"pre-commit": "lint-staged"
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
package com.reactnativenavigation.utils;
|
|
2
|
-
|
|
3
|
-
import android.content.Context;
|
|
4
|
-
import android.content.res.Resources;
|
|
5
|
-
import android.os.Build;
|
|
6
|
-
import android.view.Window;
|
|
7
|
-
import android.view.WindowManager;
|
|
8
|
-
|
|
9
|
-
import static android.view.WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
|
|
10
|
-
import static com.reactnativenavigation.utils.UiUtils.dpToPx;
|
|
11
|
-
|
|
12
|
-
public class StatusBarUtils {
|
|
13
|
-
private static final int STATUS_BAR_HEIGHT_M = 24;
|
|
14
|
-
private static final int STATUS_BAR_HEIGHT_L = 25;
|
|
15
|
-
private static int statusBarHeight = -1;
|
|
16
|
-
|
|
17
|
-
public static void saveStatusBarHeight(int height) {
|
|
18
|
-
statusBarHeight = height;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
public static int getStatusBarHeight(Context context) {
|
|
22
|
-
if (statusBarHeight > 0) {
|
|
23
|
-
return statusBarHeight;
|
|
24
|
-
}
|
|
25
|
-
final Resources resources = context.getResources();
|
|
26
|
-
final int resourceId = resources.getIdentifier("status_bar_height", "dimen", "android");
|
|
27
|
-
statusBarHeight = resourceId > 0 ?
|
|
28
|
-
resources.getDimensionPixelSize(resourceId) :
|
|
29
|
-
dpToPx(context, Build.VERSION.SDK_INT >= Build.VERSION_CODES.M ? STATUS_BAR_HEIGHT_M : STATUS_BAR_HEIGHT_L);
|
|
30
|
-
return statusBarHeight;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
public static int getStatusBarHeightDp(Context context) {
|
|
34
|
-
return (int) UiUtils.pxToDp(context, getStatusBarHeight(context));
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
public static boolean isTranslucent(Window window) {
|
|
38
|
-
WindowManager.LayoutParams lp = window.getAttributes();
|
|
39
|
-
return lp != null && (lp.flags & FLAG_TRANSLUCENT_STATUS) == FLAG_TRANSLUCENT_STATUS;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
@@ -1,511 +0,0 @@
|
|
|
1
|
-
package com.reactnativenavigation.viewcontrollers.bottomtabs;
|
|
2
|
-
|
|
3
|
-
import android.app.Activity;
|
|
4
|
-
import android.graphics.Color;
|
|
5
|
-
import android.view.Gravity;
|
|
6
|
-
import android.view.View;
|
|
7
|
-
import android.view.ViewGroup.MarginLayoutParams;
|
|
8
|
-
|
|
9
|
-
import com.aurelhubert.ahbottomnavigation.AHBottomNavigation;
|
|
10
|
-
import com.reactnativenavigation.BaseTest;
|
|
11
|
-
import com.reactnativenavigation.TestUtils;
|
|
12
|
-
import com.reactnativenavigation.mocks.ImageLoaderMock;
|
|
13
|
-
import com.reactnativenavigation.mocks.SimpleViewController;
|
|
14
|
-
import com.reactnativenavigation.mocks.TypefaceLoaderMock;
|
|
15
|
-
import com.reactnativenavigation.options.BottomTabsOptions;
|
|
16
|
-
import com.reactnativenavigation.options.Options;
|
|
17
|
-
import com.reactnativenavigation.options.params.Bool;
|
|
18
|
-
import com.reactnativenavigation.options.params.Colour;
|
|
19
|
-
import com.reactnativenavigation.options.params.NullText;
|
|
20
|
-
import com.reactnativenavigation.options.params.Number;
|
|
21
|
-
import com.reactnativenavigation.options.params.ThemeColour;
|
|
22
|
-
import com.reactnativenavigation.options.params.Text;
|
|
23
|
-
import com.reactnativenavigation.react.CommandListenerAdapter;
|
|
24
|
-
import com.reactnativenavigation.react.events.EventEmitter;
|
|
25
|
-
import com.reactnativenavigation.utils.ImageLoader;
|
|
26
|
-
import com.reactnativenavigation.utils.OptionHelper;
|
|
27
|
-
import com.reactnativenavigation.utils.StatusBarUtils;
|
|
28
|
-
import com.reactnativenavigation.viewcontrollers.bottomtabs.attacher.BottomTabsAttacher;
|
|
29
|
-
import com.reactnativenavigation.viewcontrollers.child.ChildControllersRegistry;
|
|
30
|
-
import com.reactnativenavigation.viewcontrollers.fakes.FakeParentController;
|
|
31
|
-
import com.reactnativenavigation.viewcontrollers.parent.ParentController;
|
|
32
|
-
import com.reactnativenavigation.viewcontrollers.stack.StackController;
|
|
33
|
-
import com.reactnativenavigation.viewcontrollers.viewcontroller.Presenter;
|
|
34
|
-
import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController;
|
|
35
|
-
import com.reactnativenavigation.views.bottomtabs.BottomTabs;
|
|
36
|
-
import com.reactnativenavigation.views.bottomtabs.BottomTabsContainer;
|
|
37
|
-
import com.reactnativenavigation.views.bottomtabs.BottomTabsLayout;
|
|
38
|
-
|
|
39
|
-
import org.junit.Test;
|
|
40
|
-
import org.mockito.ArgumentCaptor;
|
|
41
|
-
import org.mockito.Mockito;
|
|
42
|
-
|
|
43
|
-
import java.util.ArrayList;
|
|
44
|
-
import java.util.Arrays;
|
|
45
|
-
import java.util.Collections;
|
|
46
|
-
import java.util.List;
|
|
47
|
-
|
|
48
|
-
import androidx.annotation.NonNull;
|
|
49
|
-
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
import static com.reactnativenavigation.TestUtils.hideBackButton;
|
|
53
|
-
import static com.reactnativenavigation.utils.ObjectUtils.perform;
|
|
54
|
-
import static org.assertj.core.api.Java6Assertions.assertThat;
|
|
55
|
-
import static org.mockito.ArgumentMatchers.any;
|
|
56
|
-
import static org.mockito.ArgumentMatchers.eq;
|
|
57
|
-
import static org.mockito.Mockito.spy;
|
|
58
|
-
import static org.mockito.Mockito.times;
|
|
59
|
-
import static org.mockito.Mockito.verify;
|
|
60
|
-
import static org.mockito.Mockito.when;
|
|
61
|
-
|
|
62
|
-
public class BottomTabsControllerTest extends BaseTest {
|
|
63
|
-
|
|
64
|
-
private Activity activity;
|
|
65
|
-
private BottomTabs bottomTabs;
|
|
66
|
-
private BottomTabsContainer bottomTabsContainer;
|
|
67
|
-
private BottomTabsController uut;
|
|
68
|
-
private final Options initialOptions = new Options();
|
|
69
|
-
private ViewController<?> child1;
|
|
70
|
-
private ViewController<?> child2;
|
|
71
|
-
private ViewController<?> child3;
|
|
72
|
-
private ViewController<?> stackChild;
|
|
73
|
-
private StackController child4;
|
|
74
|
-
private ViewController<?> child5;
|
|
75
|
-
private final Options tabOptions = OptionHelper.createBottomTabOptions();
|
|
76
|
-
private final ImageLoader imageLoaderMock = ImageLoaderMock.mock();
|
|
77
|
-
private EventEmitter eventEmitter;
|
|
78
|
-
private ChildControllersRegistry childRegistry;
|
|
79
|
-
private List<ViewController<?>> tabs;
|
|
80
|
-
private BottomTabsPresenter presenter;
|
|
81
|
-
private BottomTabPresenter bottomTabPresenter;
|
|
82
|
-
private BottomTabsAttacher tabsAttacher;
|
|
83
|
-
|
|
84
|
-
@Override
|
|
85
|
-
public void beforeEach() {
|
|
86
|
-
activity = newActivity();
|
|
87
|
-
childRegistry = new ChildControllersRegistry();
|
|
88
|
-
eventEmitter = Mockito.mock(EventEmitter.class);
|
|
89
|
-
prepareViewsForTests();
|
|
90
|
-
StatusBarUtils.saveStatusBarHeight(63);
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
@Test
|
|
94
|
-
public void createView_checkProperStructure() {
|
|
95
|
-
idleMainLooper();
|
|
96
|
-
assertThat(uut.getView()).isInstanceOf(CoordinatorLayout.class);
|
|
97
|
-
assertThat(uut.getView().getChildAt(uut.getView().getChildCount() - 1)).isInstanceOf(BottomTabsContainer.class);
|
|
98
|
-
assertThat(((CoordinatorLayout.LayoutParams) uut.getBottomTabsContainer().getLayoutParams()).gravity).isEqualTo(Gravity.BOTTOM);
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
@Test
|
|
102
|
-
public void createView_tabsWithoutIconsAreAccepted() {
|
|
103
|
-
tabOptions.bottomTabOptions.icon = new NullText();
|
|
104
|
-
prepareViewsForTests();
|
|
105
|
-
assertThat(uut.getBottomTabs().getItemsCount()).isEqualTo(tabs.size());
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
@Test
|
|
109
|
-
public void createView_showTitlesWhenAllTabsDontHaveIcons() {
|
|
110
|
-
tabOptions.bottomTabOptions.icon = new NullText();
|
|
111
|
-
assertThat(tabOptions.bottomTabsOptions.titleDisplayMode.hasValue()).isFalse();
|
|
112
|
-
prepareViewsForTests();
|
|
113
|
-
presenter.applyOptions(Options.EMPTY);
|
|
114
|
-
assertThat(bottomTabsContainer.getBottomTabs().getTitleState()).isEqualTo(AHBottomNavigation.TitleState.ALWAYS_SHOW);
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
@Test(expected = RuntimeException.class)
|
|
118
|
-
public void setTabs_ThrowWhenMoreThan5() {
|
|
119
|
-
tabs.add(new SimpleViewController(activity, childRegistry, "6", tabOptions));
|
|
120
|
-
createBottomTabs();
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
@Test
|
|
124
|
-
public void parentControllerIsSet() {
|
|
125
|
-
uut = createBottomTabs();
|
|
126
|
-
for (ViewController<?> tab : tabs) {
|
|
127
|
-
assertThat(tab.getParentController()).isEqualTo(uut);
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
@Test
|
|
132
|
-
public void setTabs_allChildViewsAreAttachedToHierarchy() {
|
|
133
|
-
uut.onViewWillAppear();
|
|
134
|
-
assertThat(uut.getView().getChildCount()).isEqualTo(6);
|
|
135
|
-
for (ViewController<?> child : uut.getChildControllers()) {
|
|
136
|
-
assertThat(child.getView().getParent()).isNotNull();
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
@Test
|
|
141
|
-
public void setTabs_firstChildIsVisibleOtherAreGone() {
|
|
142
|
-
uut.onViewWillAppear();
|
|
143
|
-
for (int i = 0; i < uut.getChildControllers().size(); i++) {
|
|
144
|
-
assertThat(uut.getView().getChildAt(i)).isEqualTo(tabs.get(i).getView());
|
|
145
|
-
assertThat(uut.getView().getChildAt(i).getVisibility()).isEqualTo(i == 0 ? View.VISIBLE : View.INVISIBLE);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
@Test
|
|
150
|
-
public void onTabSelected() {
|
|
151
|
-
uut.ensureViewIsCreated();
|
|
152
|
-
assertThat(uut.getSelectedIndex()).isZero();
|
|
153
|
-
assertThat(((ViewController<?>) ((List<?>) uut.getChildControllers()).get(0)).getView().getVisibility()).isEqualTo(View.VISIBLE);
|
|
154
|
-
|
|
155
|
-
uut.onTabSelected(3, false);
|
|
156
|
-
|
|
157
|
-
assertThat(uut.getSelectedIndex()).isEqualTo(3);
|
|
158
|
-
assertThat(((ViewController<?>) ((List<?>) uut.getChildControllers()).get(0)).getView().getVisibility()).isEqualTo(View.INVISIBLE);
|
|
159
|
-
assertThat(((ViewController<?>) ((List<?>) uut.getChildControllers()).get(3)).getView().getVisibility()).isEqualTo(View.VISIBLE);
|
|
160
|
-
verify(eventEmitter).emitBottomTabSelected(0, 3);
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
@Test
|
|
164
|
-
public void onTabReSelected() {
|
|
165
|
-
uut.ensureViewIsCreated();
|
|
166
|
-
assertThat(uut.getSelectedIndex()).isZero();
|
|
167
|
-
|
|
168
|
-
uut.onTabSelected(0, true);
|
|
169
|
-
|
|
170
|
-
assertThat(uut.getSelectedIndex()).isEqualTo(0);
|
|
171
|
-
assertThat(((ViewController<?>) ((List<?>) uut.getChildControllers()).get(0)).getView().getParent()).isNotNull();
|
|
172
|
-
verify(eventEmitter).emitBottomTabSelected(0, 0);
|
|
173
|
-
}
|
|
174
|
-
|
|
175
|
-
@Test
|
|
176
|
-
public void handleBack_DelegatesToSelectedChild() {
|
|
177
|
-
uut.ensureViewIsCreated();
|
|
178
|
-
assertThat(uut.handleBack(new CommandListenerAdapter())).isFalse();
|
|
179
|
-
uut.selectTab(4);
|
|
180
|
-
assertThat(uut.handleBack(new CommandListenerAdapter())).isTrue();
|
|
181
|
-
verify(child5).handleBack(any());
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
@Test
|
|
185
|
-
public void applyChildOptions_bottomTabsOptionsAreClearedAfterApply() {
|
|
186
|
-
ParentController<?> parent = Mockito.mock(ParentController.class);
|
|
187
|
-
uut.setParentController(parent);
|
|
188
|
-
|
|
189
|
-
child1.options.bottomTabsOptions.backgroundColor = new ThemeColour(new Colour(Color.RED));
|
|
190
|
-
child1.onViewWillAppear();
|
|
191
|
-
|
|
192
|
-
ArgumentCaptor<Options> optionsCaptor = ArgumentCaptor.forClass(Options.class);
|
|
193
|
-
verify(parent).applyChildOptions(optionsCaptor.capture(), any());
|
|
194
|
-
assertThat(optionsCaptor.getValue().bottomTabsOptions.backgroundColor.hasValue()).isFalse();
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
@Test
|
|
198
|
-
public void applyOptions_bottomTabsCreateViewOnlyOnce() {
|
|
199
|
-
idleMainLooper();
|
|
200
|
-
verify(presenter).applyOptions(any());
|
|
201
|
-
verify(bottomTabsContainer.getBottomTabs(), times(2)).superCreateItems(); // first time when view is created, second time when options are applied
|
|
202
|
-
}
|
|
203
|
-
|
|
204
|
-
@Test
|
|
205
|
-
public void onSizeChanged_recreateItemsIfSizeHasChanged() {
|
|
206
|
-
int numberOfPreviousInvocations = 1;
|
|
207
|
-
bottomTabs.onSizeChanged(0, 0, 0, 0);
|
|
208
|
-
verify(bottomTabs, times(numberOfPreviousInvocations)).superCreateItems();
|
|
209
|
-
|
|
210
|
-
bottomTabs.onSizeChanged(100, 0, 0, 0);
|
|
211
|
-
verify(bottomTabs, times(numberOfPreviousInvocations)).superCreateItems();
|
|
212
|
-
|
|
213
|
-
bottomTabs.onSizeChanged(1080, 147, 0, 0);
|
|
214
|
-
verify(bottomTabs, times(numberOfPreviousInvocations + 1)).superCreateItems();
|
|
215
|
-
|
|
216
|
-
bottomTabs.onSizeChanged(1920, 147, 0, 0);
|
|
217
|
-
verify(bottomTabs, times(numberOfPreviousInvocations + 2)).superCreateItems();
|
|
218
|
-
|
|
219
|
-
when(bottomTabs.getItemsCount()).thenReturn(0);
|
|
220
|
-
bottomTabs.onSizeChanged(1080, 147, 0, 0);
|
|
221
|
-
verify(bottomTabs, times(numberOfPreviousInvocations + 2)).superCreateItems();
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
@Test
|
|
225
|
-
public void mergeOptions_currentTabIndex() {
|
|
226
|
-
uut.ensureViewIsCreated();
|
|
227
|
-
assertThat(uut.getSelectedIndex()).isZero();
|
|
228
|
-
|
|
229
|
-
Options options = new Options();
|
|
230
|
-
options.bottomTabsOptions.currentTabIndex = new Number(1);
|
|
231
|
-
uut.mergeOptions(options);
|
|
232
|
-
assertThat(uut.getSelectedIndex()).isOne();
|
|
233
|
-
verify(eventEmitter, times(0)).emitBottomTabSelected(any(Integer.class), any(Integer.class));
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
@Test
|
|
237
|
-
public void mergeOptions_drawBehind() {
|
|
238
|
-
assertThat(uut.getBottomInset(child1)).isEqualTo(uut.getBottomTabs().getHeight());
|
|
239
|
-
|
|
240
|
-
Options o1 = new Options();
|
|
241
|
-
o1.bottomTabsOptions.drawBehind = new Bool(true);
|
|
242
|
-
child1.mergeOptions(o1);
|
|
243
|
-
assertThat(uut.getBottomInset(child1)).isEqualTo(0);
|
|
244
|
-
|
|
245
|
-
Options o2 = new Options();
|
|
246
|
-
o2.topBar.title.text = new Text("Some text");
|
|
247
|
-
child1.mergeOptions(o1);
|
|
248
|
-
assertThat(uut.getBottomInset(child1)).isEqualTo(0);
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
@Test
|
|
252
|
-
public void mergeOptions_drawBehind_stack() {
|
|
253
|
-
uut.ensureViewIsCreated();
|
|
254
|
-
uut.selectTab(3);
|
|
255
|
-
|
|
256
|
-
assertThat(((MarginLayoutParams) stackChild.getView().getLayoutParams()).bottomMargin).isEqualTo(bottomTabs.getHeight());
|
|
257
|
-
|
|
258
|
-
Options o1 = new Options();
|
|
259
|
-
o1.bottomTabsOptions.drawBehind = new Bool(true);
|
|
260
|
-
stackChild.mergeOptions(o1);
|
|
261
|
-
|
|
262
|
-
assertThat(((MarginLayoutParams) stackChild.getView().getLayoutParams()).bottomMargin).isEqualTo(0);
|
|
263
|
-
}
|
|
264
|
-
|
|
265
|
-
@Test
|
|
266
|
-
public void mergeOptions_mergesBottomTabOptions() {
|
|
267
|
-
Options options = new Options();
|
|
268
|
-
uut.mergeOptions(options);
|
|
269
|
-
verify(bottomTabPresenter).mergeOptions(options);
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
@Test
|
|
273
|
-
public void applyChildOptions_resolvedOptionsAreUsed() {
|
|
274
|
-
Options childOptions = new Options();
|
|
275
|
-
SimpleViewController pushedScreen = new SimpleViewController(activity, childRegistry, "child4.1", childOptions);
|
|
276
|
-
disablePushAnimation(pushedScreen);
|
|
277
|
-
child4 = spyOnStack(pushedScreen);
|
|
278
|
-
|
|
279
|
-
tabs = new ArrayList<>(Collections.singletonList(child4));
|
|
280
|
-
tabsAttacher = new BottomTabsAttacher(tabs, presenter, Options.EMPTY);
|
|
281
|
-
|
|
282
|
-
initialOptions.bottomTabsOptions.currentTabIndex = new Number(0);
|
|
283
|
-
Options resolvedOptions = new Options();
|
|
284
|
-
uut = new BottomTabsController(activity,
|
|
285
|
-
tabs,
|
|
286
|
-
childRegistry,
|
|
287
|
-
eventEmitter,
|
|
288
|
-
imageLoaderMock,
|
|
289
|
-
"uut",
|
|
290
|
-
initialOptions,
|
|
291
|
-
new Presenter(activity, new Options()),
|
|
292
|
-
tabsAttacher,
|
|
293
|
-
presenter,
|
|
294
|
-
new BottomTabPresenter(activity, tabs, ImageLoaderMock.mock(), new TypefaceLoaderMock(), new Options())) {
|
|
295
|
-
@Override
|
|
296
|
-
public Options resolveCurrentOptions() {
|
|
297
|
-
return resolvedOptions;
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
@NonNull
|
|
301
|
-
@Override
|
|
302
|
-
protected BottomTabs createBottomTabs() {
|
|
303
|
-
return new BottomTabs(activity) {
|
|
304
|
-
@Override
|
|
305
|
-
protected void createItems() {
|
|
306
|
-
|
|
307
|
-
}
|
|
308
|
-
};
|
|
309
|
-
}
|
|
310
|
-
};
|
|
311
|
-
|
|
312
|
-
activity.setContentView(uut.getView());
|
|
313
|
-
idleMainLooper();
|
|
314
|
-
verify(presenter, times(2)).applyChildOptions(eq(resolvedOptions), any());
|
|
315
|
-
}
|
|
316
|
-
|
|
317
|
-
@Test
|
|
318
|
-
public void child_mergeOptions_currentTabIndex() {
|
|
319
|
-
uut.ensureViewIsCreated();
|
|
320
|
-
|
|
321
|
-
assertThat(uut.getSelectedIndex()).isZero();
|
|
322
|
-
|
|
323
|
-
Options options = new Options();
|
|
324
|
-
options.bottomTabsOptions.currentTabIndex = new Number(1);
|
|
325
|
-
child1.mergeOptions(options);
|
|
326
|
-
|
|
327
|
-
assertThat(uut.getSelectedIndex()).isOne();
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
@Test
|
|
331
|
-
public void resolveCurrentOptions_returnsFirstTabIfInvokedBeforeViewIsCreated() {
|
|
332
|
-
uut = createBottomTabs();
|
|
333
|
-
assertThat(uut.getCurrentChild()).isEqualTo(tabs.get(0));
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
@Test
|
|
337
|
-
public void buttonPressInvokedOnCurrentTab() {
|
|
338
|
-
uut.ensureViewIsCreated();
|
|
339
|
-
uut.selectTab(4);
|
|
340
|
-
|
|
341
|
-
uut.sendOnNavigationButtonPressed("btn1");
|
|
342
|
-
verify(child5, times(1)).sendOnNavigationButtonPressed("btn1");
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
@Test
|
|
346
|
-
public void push() {
|
|
347
|
-
uut.selectTab(3);
|
|
348
|
-
|
|
349
|
-
SimpleViewController stackChild2 = new SimpleViewController(activity, childRegistry, "stackChild2", new Options());
|
|
350
|
-
disablePushAnimation(stackChild2);
|
|
351
|
-
hideBackButton(stackChild2);
|
|
352
|
-
|
|
353
|
-
assertThat(child4.size()).isEqualTo(1);
|
|
354
|
-
child4.push(stackChild2, new CommandListenerAdapter());
|
|
355
|
-
assertThat(child4.size()).isEqualTo(2);
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
@Test
|
|
359
|
-
public void oneTimeOptionsAreAppliedOnce() {
|
|
360
|
-
Options options = new Options();
|
|
361
|
-
options.bottomTabsOptions.currentTabIndex = new Number(1);
|
|
362
|
-
|
|
363
|
-
assertThat(uut.getSelectedIndex()).isZero();
|
|
364
|
-
uut.mergeOptions(options);
|
|
365
|
-
assertThat(uut.getSelectedIndex()).isOne();
|
|
366
|
-
assertThat(uut.options.bottomTabsOptions.currentTabIndex.hasValue()).isFalse();
|
|
367
|
-
assertThat(uut.initialOptions.bottomTabsOptions.currentTabIndex.hasValue()).isFalse();
|
|
368
|
-
}
|
|
369
|
-
|
|
370
|
-
@Test
|
|
371
|
-
public void selectTab() {
|
|
372
|
-
uut.selectTab(1);
|
|
373
|
-
verify(tabsAttacher).onTabSelected(tabs.get(1));
|
|
374
|
-
}
|
|
375
|
-
|
|
376
|
-
@Test
|
|
377
|
-
public void selectTab_onViewDidAppearIsInvokedAfterSelection() {
|
|
378
|
-
uut.selectTab(1);
|
|
379
|
-
verify(child2).onViewDidAppear();
|
|
380
|
-
}
|
|
381
|
-
|
|
382
|
-
@Test
|
|
383
|
-
public void creatingTabs_onViewDidAppearInvokedAfterInitialTabIndexSet() {
|
|
384
|
-
Options options = Options.EMPTY.copy();
|
|
385
|
-
options.bottomTabsOptions.currentTabIndex = new Number(1);
|
|
386
|
-
prepareViewsForTests(options.bottomTabsOptions);
|
|
387
|
-
idleMainLooper();
|
|
388
|
-
verify(tabs.get(0), times(0)).onViewDidAppear();
|
|
389
|
-
verify(tabs.get(1), times(1)).onViewDidAppear();
|
|
390
|
-
verify(tabs.get(2), times(0)).onViewDidAppear();
|
|
391
|
-
verify(tabs.get(3), times(0)).onViewDidAppear();
|
|
392
|
-
verify(tabs.get(4), times(0)).onViewDidAppear();
|
|
393
|
-
}
|
|
394
|
-
|
|
395
|
-
@Test
|
|
396
|
-
public void getTopInset() {
|
|
397
|
-
assertThat(child1.getTopInset()).isEqualTo(getStatusBarHeight());
|
|
398
|
-
assertThat(child2.getTopInset()).isEqualTo(getStatusBarHeight());
|
|
399
|
-
|
|
400
|
-
child1.options.statusBar.drawBehind = new Bool(true);
|
|
401
|
-
assertThat(child1.getTopInset()).isEqualTo(0);
|
|
402
|
-
assertThat(child2.getTopInset()).isEqualTo(getStatusBarHeight());
|
|
403
|
-
|
|
404
|
-
assertThat(stackChild.getTopInset()).isEqualTo(getStatusBarHeight() + child4.getTopBar().getHeight());
|
|
405
|
-
}
|
|
406
|
-
|
|
407
|
-
@Test
|
|
408
|
-
public void getBottomInset_defaultOptionsAreTakenIntoAccount() {
|
|
409
|
-
Options defaultOptions = new Options();
|
|
410
|
-
defaultOptions.bottomTabsOptions.visible = new Bool(false);
|
|
411
|
-
|
|
412
|
-
assertThat(uut.getBottomInset(child1)).isEqualTo(bottomTabs.getHeight());
|
|
413
|
-
uut.setDefaultOptions(defaultOptions);
|
|
414
|
-
assertThat(uut.getBottomInset(child1)).isZero();
|
|
415
|
-
}
|
|
416
|
-
|
|
417
|
-
@Test
|
|
418
|
-
public void destroy() {
|
|
419
|
-
uut.destroy();
|
|
420
|
-
verify(tabsAttacher).destroy();
|
|
421
|
-
}
|
|
422
|
-
|
|
423
|
-
private void prepareViewsForTests() {
|
|
424
|
-
prepareViewsForTests(initialOptions.bottomTabsOptions);
|
|
425
|
-
}
|
|
426
|
-
|
|
427
|
-
private void prepareViewsForTests(BottomTabsOptions bottomTabsOptions) {
|
|
428
|
-
perform(uut, ViewController::destroy);
|
|
429
|
-
bottomTabs = spy(new BottomTabs(activity) {
|
|
430
|
-
@Override
|
|
431
|
-
public void superCreateItems() {
|
|
432
|
-
|
|
433
|
-
}
|
|
434
|
-
});
|
|
435
|
-
bottomTabsContainer = spy(new BottomTabsContainer(activity, bottomTabs));
|
|
436
|
-
|
|
437
|
-
createChildren();
|
|
438
|
-
tabs = Arrays.asList(child1, child2, child3, child4, child5);
|
|
439
|
-
initialOptions.bottomTabsOptions = bottomTabsOptions;
|
|
440
|
-
presenter = spy(new BottomTabsPresenter(tabs, initialOptions, new BottomTabsAnimator()));
|
|
441
|
-
bottomTabPresenter = spy(new BottomTabPresenter(activity, tabs, ImageLoaderMock.mock(), new TypefaceLoaderMock(), initialOptions));
|
|
442
|
-
tabsAttacher = spy(new BottomTabsAttacher(tabs, presenter, initialOptions));
|
|
443
|
-
uut = createBottomTabs();
|
|
444
|
-
activity.setContentView(new FakeParentController(activity, childRegistry, uut).getView());
|
|
445
|
-
}
|
|
446
|
-
|
|
447
|
-
private void createChildren() {
|
|
448
|
-
child1 = spy(new SimpleViewController(activity, childRegistry, "child1", tabOptions));
|
|
449
|
-
child2 = spy(new SimpleViewController(activity, childRegistry, "child2", tabOptions));
|
|
450
|
-
child3 = spy(new SimpleViewController(activity, childRegistry, "child3", tabOptions));
|
|
451
|
-
stackChild = spy(new SimpleViewController(activity, childRegistry, "stackChild", tabOptions));
|
|
452
|
-
child4 = spyOnStack(stackChild);
|
|
453
|
-
child5 = spy(new SimpleViewController(activity, childRegistry, "child5", tabOptions));
|
|
454
|
-
when(child5.handleBack(any())).thenReturn(true);
|
|
455
|
-
}
|
|
456
|
-
|
|
457
|
-
private StackController spyOnStack(ViewController<?> initialChild) {
|
|
458
|
-
StackController build = TestUtils.newStackController(activity)
|
|
459
|
-
.setInitialOptions(tabOptions)
|
|
460
|
-
.build();
|
|
461
|
-
StackController stack = spy(build);
|
|
462
|
-
disablePushAnimation(initialChild);
|
|
463
|
-
stack.ensureViewIsCreated();
|
|
464
|
-
stack.push(initialChild, new CommandListenerAdapter());
|
|
465
|
-
return stack;
|
|
466
|
-
}
|
|
467
|
-
|
|
468
|
-
private BottomTabsController createBottomTabs() {
|
|
469
|
-
return new BottomTabsController(activity,
|
|
470
|
-
tabs,
|
|
471
|
-
childRegistry,
|
|
472
|
-
eventEmitter,
|
|
473
|
-
imageLoaderMock,
|
|
474
|
-
"uut",
|
|
475
|
-
initialOptions,
|
|
476
|
-
new Presenter(activity, initialOptions),
|
|
477
|
-
tabsAttacher,
|
|
478
|
-
presenter,
|
|
479
|
-
bottomTabPresenter) {
|
|
480
|
-
@Override
|
|
481
|
-
public void ensureViewIsCreated() {
|
|
482
|
-
super.ensureViewIsCreated();
|
|
483
|
-
uut.getView().layout(0, 0, 1000, 1000);
|
|
484
|
-
}
|
|
485
|
-
|
|
486
|
-
@NonNull
|
|
487
|
-
@Override
|
|
488
|
-
public BottomTabsLayout createView() {
|
|
489
|
-
BottomTabsLayout view = super.createView();
|
|
490
|
-
bottomTabs.getLayoutParams().height = 100;
|
|
491
|
-
return view;
|
|
492
|
-
}
|
|
493
|
-
|
|
494
|
-
@NonNull
|
|
495
|
-
@Override
|
|
496
|
-
protected BottomTabsContainer createBottomTabsContainer() {
|
|
497
|
-
return bottomTabsContainer;
|
|
498
|
-
}
|
|
499
|
-
|
|
500
|
-
@NonNull
|
|
501
|
-
@Override
|
|
502
|
-
protected BottomTabs createBottomTabs() {
|
|
503
|
-
return bottomTabs;
|
|
504
|
-
}
|
|
505
|
-
};
|
|
506
|
-
}
|
|
507
|
-
|
|
508
|
-
private int getStatusBarHeight() {
|
|
509
|
-
return StatusBarUtils.getStatusBarHeight(activity);
|
|
510
|
-
}
|
|
511
|
-
}
|