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.
Files changed (263) hide show
  1. package/.buildkite/pipeline.yml +51 -11
  2. package/.nvmrc +1 -0
  3. package/Mock.d.ts +1 -0
  4. package/Mock.js +4 -0
  5. package/Mock.ts +1 -1
  6. package/README.md +0 -1
  7. package/jest.config.js +40 -0
  8. package/lib/{src/Mock → Mock}/Application.tsx +0 -0
  9. package/lib/{src/Mock → Mock}/ComponentProps.tsx +0 -0
  10. package/lib/{src/Mock → Mock}/Components/BottomTabs.tsx +0 -0
  11. package/lib/{src/Mock → Mock}/Components/ComponentScreen.tsx +13 -2
  12. package/lib/{src/Mock → Mock}/Components/LayoutComponent.tsx +0 -0
  13. package/lib/{src/Mock → Mock}/Components/Modals.tsx +0 -0
  14. package/lib/{src/Mock → Mock}/Components/NavigationButton.tsx +1 -1
  15. package/lib/{src/Mock → Mock}/Components/Overlays.tsx +0 -0
  16. package/lib/{src/Mock → Mock}/Components/Stack.tsx +0 -0
  17. package/lib/{src/Mock → Mock}/Components/TopBar.tsx +2 -2
  18. package/lib/{src/Mock → Mock}/Layouts/BottomTabsNode.ts +1 -1
  19. package/lib/{src/Mock → Mock}/Layouts/ComponentNode.ts +1 -1
  20. package/lib/{src/Mock → Mock}/Layouts/LayoutNodeFactory.ts +0 -0
  21. package/lib/{src/Mock → Mock}/Layouts/Node.ts +1 -1
  22. package/lib/{src/Mock → Mock}/Layouts/ParentNode.ts +2 -2
  23. package/lib/{src/Mock → Mock}/Layouts/StackNode.ts +0 -0
  24. package/lib/{src/Mock → Mock}/Stores/EventsStore.ts +10 -2
  25. package/lib/{src/Mock → Mock}/Stores/LayoutStore.ts +3 -2
  26. package/lib/{src/Mock → Mock}/connect.ts +0 -0
  27. package/lib/Mock/constants.d.ts +2 -0
  28. package/lib/Mock/constants.js +5 -0
  29. package/lib/{src/Mock → Mock}/constants.ts +0 -0
  30. package/lib/Mock/index.d.ts +3 -0
  31. package/lib/Mock/index.js +14 -0
  32. package/lib/{src/Mock → Mock}/index.ts +0 -0
  33. package/lib/{src/Mock → Mock}/mocks/AppRegistryService.ts +0 -0
  34. package/lib/{src/Mock → Mock}/mocks/NativeCommandsSender.tsx +1 -1
  35. package/lib/{src/Mock → Mock}/mocks/NativeEventsReceiver.ts +7 -4
  36. package/lib/android/app/build.gradle +23 -21
  37. package/lib/android/app/src/main/java/com/reactnativenavigation/options/FontOptions.kt +2 -2
  38. package/lib/android/app/src/main/java/com/reactnativenavigation/options/HardwareBackButtonOptions.kt +35 -2
  39. package/lib/android/app/src/main/java/com/reactnativenavigation/options/LayoutFactory.java +32 -17
  40. package/lib/android/app/src/main/java/com/reactnativenavigation/options/Options.java +1 -1
  41. package/lib/android/app/src/main/java/com/reactnativenavigation/options/parsers/TypefaceLoader.kt +16 -10
  42. package/lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationModule.java +5 -2
  43. package/lib/android/app/src/main/java/com/reactnativenavigation/react/modal/ModalFrameLayout.kt +3 -3
  44. package/lib/android/app/src/main/java/com/reactnativenavigation/react/modal/ModalViewManager.kt +11 -8
  45. package/lib/android/app/src/main/java/com/reactnativenavigation/utils/SystemUiUtils.kt +168 -0
  46. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabPresenter.java +5 -2
  47. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsController.java +42 -2
  48. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/child/ChildController.java +12 -16
  49. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/component/ComponentViewController.java +19 -11
  50. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/externalcomponent/ExternalComponentViewController.java +2 -2
  51. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenter.java +6 -4
  52. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/overlay/OverlayManager.kt +8 -3
  53. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackController.java +15 -7
  54. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackPresenter.java +127 -138
  55. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/TopBarController.kt +183 -22
  56. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/ButtonController.kt +25 -4
  57. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/ButtonPresenter.kt +9 -1
  58. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/ButtonSpan.kt +1 -1
  59. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/viewcontroller/Presenter.java +52 -71
  60. package/lib/android/app/src/main/java/com/reactnativenavigation/views/component/ComponentLayout.java +2 -0
  61. package/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/ReactImageMatrixAnimator.kt +2 -3
  62. package/lib/android/app/src/main/java/com/reactnativenavigation/views/stack/topbar/TopBar.java +1 -2
  63. package/lib/android/app/src/main/java/com/reactnativenavigation/views/stack/topbar/titlebar/ButtonBar.kt +7 -12
  64. package/lib/android/app/src/main/java/com/reactnativenavigation/views/stack/topbar/titlebar/TitleAndButtonsContainer.kt +0 -2
  65. package/lib/android/app/src/main/java/com/reactnativenavigation/views/stack/topbar/titlebar/TitleSubTitleLayout.kt +0 -7
  66. package/lib/android/app/src/reactNative51/java/com/reactnativenavigation/react/NavigationReactNativeHost.java +2 -1
  67. package/lib/android/app/src/test/java/com/reactnativenavigation/BaseTest.java +7 -6
  68. package/lib/android/app/src/test/java/com/reactnativenavigation/TestActivity.java +5 -0
  69. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/ImageLoaderMock.kt +5 -4
  70. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/Mocks.kt +3 -2
  71. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TypefaceLoaderMock.kt +5 -1
  72. package/lib/android/app/src/test/java/com/reactnativenavigation/options/TransitionAnimationOptionsTest.kt +2 -3
  73. package/lib/android/app/src/test/java/com/reactnativenavigation/presentation/PresenterTest.java +25 -10
  74. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/LayoutFactoryTest.java +25 -2
  75. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/MotionEventTest.kt +1 -1
  76. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/{TitleAndButtonsMeasurer.kt → TitleAndButtonsMeasurerTest.kt} +2 -2
  77. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/UiThreadTest.java +2 -2
  78. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/UiUtilsTest.java +1 -1
  79. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsControllerTest.kt +572 -0
  80. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsPresenterTest.kt +1 -1
  81. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/child/ChildControllerTest.java +2 -1
  82. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/component/ComponentViewControllerTest.java +5 -5
  83. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/fakes/FakeParentController.kt +1 -1
  84. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalAnimatorTest.kt +1 -1
  85. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenterTest.java +7 -3
  86. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalStackTest.java +17 -4
  87. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/navigator/NavigatorTest.java +2 -2
  88. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/navigator/RootPresenterTest.kt +5 -5
  89. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/overlay/OverlayManagerTest.java +1 -0
  90. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/parent/ParentControllerTest.java +4 -0
  91. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/sidemenu/SideMenuControllerTest.java +6 -2
  92. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackAnimatorTest.kt +1 -1
  93. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackControllerTest.kt +13 -8
  94. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackPresenterTest.kt +58 -51
  95. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/TopBarControllerTest.kt +219 -41
  96. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/viewcontroller/ViewControllerTest.java +4 -1
  97. package/lib/android/app/src/test/java/com/reactnativenavigation/views/TitleAndButtonsContainerTest.kt +2 -2
  98. package/lib/android/app/src/test/java/com/reactnativenavigation/views/animations/BaseViewAnimatorTest.kt +4 -4
  99. package/lib/android/app/src/test/java/com/reactnativenavigation/views/bottomtabs/BottomTabsContainerTest.kt +1 -1
  100. package/lib/android/app/src/test/java/com/reactnativenavigation/views/bottomtabs/BottomTabsTest.kt +4 -4
  101. package/lib/dist/Mock/Application.js +2 -2
  102. package/lib/dist/Mock/Components/BottomTabs.js +2 -2
  103. package/lib/dist/Mock/Components/ComponentScreen.js +15 -5
  104. package/lib/dist/Mock/Components/LayoutComponent.js +3 -2
  105. package/lib/dist/Mock/Components/Modals.js +2 -2
  106. package/lib/dist/Mock/Components/NavigationButton.d.ts +1 -1
  107. package/lib/dist/Mock/Components/NavigationButton.js +8 -10
  108. package/lib/dist/Mock/Components/Overlays.js +2 -2
  109. package/lib/dist/Mock/Components/Stack.js +2 -2
  110. package/lib/dist/Mock/Components/TopBar.d.ts +2 -2
  111. package/lib/dist/Mock/Components/TopBar.js +7 -6
  112. package/lib/dist/Mock/Layouts/BottomTabsNode.d.ts +1 -1
  113. package/lib/dist/Mock/Layouts/BottomTabsNode.js +3 -3
  114. package/lib/dist/Mock/Layouts/ComponentNode.d.ts +1 -1
  115. package/lib/dist/Mock/Layouts/ComponentNode.js +4 -4
  116. package/lib/dist/Mock/Layouts/LayoutNodeFactory.js +3 -3
  117. package/lib/dist/Mock/Layouts/Node.d.ts +1 -1
  118. package/lib/dist/Mock/Layouts/Node.js +5 -0
  119. package/lib/dist/Mock/Layouts/ParentNode.d.ts +2 -2
  120. package/lib/dist/Mock/Layouts/ParentNode.js +4 -3
  121. package/lib/dist/Mock/Layouts/StackNode.js +1 -1
  122. package/lib/dist/Mock/Stores/EventsStore.d.ts +5 -2
  123. package/lib/dist/Mock/Stores/EventsStore.js +7 -0
  124. package/lib/dist/Mock/Stores/LayoutStore.js +6 -3
  125. package/lib/dist/Mock/connect.js +1 -1
  126. package/lib/dist/Mock/index.js +1 -1
  127. package/lib/dist/Mock/mocks/NativeCommandsSender.d.ts +1 -1
  128. package/lib/dist/Mock/mocks/NativeCommandsSender.js +2 -2
  129. package/lib/dist/Mock/mocks/NativeEventsReceiver.d.ts +3 -3
  130. package/lib/dist/Mock/mocks/NativeEventsReceiver.js +6 -3
  131. package/lib/dist/{Navigation.d.ts → src/Navigation.d.ts} +0 -0
  132. package/lib/dist/{Navigation.js → src/Navigation.js} +19 -3
  133. package/lib/dist/{NavigationDelegate.d.ts → src/NavigationDelegate.d.ts} +0 -0
  134. package/lib/dist/{NavigationDelegate.js → src/NavigationDelegate.js} +1 -0
  135. package/lib/dist/{adapters → src/adapters}/AppRegistryService.d.ts +0 -0
  136. package/lib/dist/{adapters → src/adapters}/AppRegistryService.js +0 -0
  137. package/lib/dist/{adapters → src/adapters}/AssetResolver.d.ts +0 -0
  138. package/lib/dist/{adapters → src/adapters}/AssetResolver.js +0 -0
  139. package/lib/dist/src/adapters/ColorService.d.ts +3 -0
  140. package/lib/dist/{adapters → src/adapters}/ColorService.js +1 -1
  141. package/lib/dist/{adapters → src/adapters}/Constants.d.ts +0 -0
  142. package/lib/dist/{adapters → src/adapters}/Constants.js +10 -6
  143. package/lib/dist/{adapters → src/adapters}/NativeCommandsSender.d.ts +0 -0
  144. package/lib/dist/{adapters → src/adapters}/NativeCommandsSender.js +1 -0
  145. package/lib/dist/{adapters → src/adapters}/NativeEventsReceiver.d.ts +0 -0
  146. package/lib/dist/{adapters → src/adapters}/NativeEventsReceiver.js +1 -0
  147. package/lib/dist/{adapters → src/adapters}/NativeEventsReceiver.mock.d.ts +0 -0
  148. package/lib/dist/{adapters → src/adapters}/NativeEventsReceiver.mock.js +0 -0
  149. package/lib/dist/{adapters → src/adapters}/TouchablePreview.d.ts +0 -0
  150. package/lib/dist/src/adapters/TouchablePreview.js +89 -0
  151. package/lib/dist/{adapters → src/adapters}/UniqueIdProvider.d.ts +0 -0
  152. package/lib/dist/{adapters → src/adapters}/UniqueIdProvider.js +2 -2
  153. package/lib/dist/{commands → src/commands}/Commands.d.ts +0 -0
  154. package/lib/dist/{commands → src/commands}/Commands.js +24 -10
  155. package/lib/dist/{commands → src/commands}/Deprecations.d.ts +0 -0
  156. package/lib/dist/src/commands/Deprecations.js +80 -0
  157. package/lib/dist/{commands → src/commands}/LayoutTreeCrawler.d.ts +0 -0
  158. package/lib/dist/{commands → src/commands}/LayoutTreeCrawler.js +4 -2
  159. package/lib/dist/{commands → src/commands}/LayoutTreeParser.d.ts +0 -0
  160. package/lib/dist/{commands → src/commands}/LayoutTreeParser.js +1 -0
  161. package/lib/dist/{commands → src/commands}/LayoutType.d.ts +0 -0
  162. package/lib/dist/{commands → src/commands}/LayoutType.js +0 -0
  163. package/lib/dist/{commands → src/commands}/OptionsCrawler.d.ts +0 -0
  164. package/lib/dist/{commands → src/commands}/OptionsCrawler.js +6 -4
  165. package/lib/dist/{commands → src/commands}/OptionsProcessor.d.ts +1 -1
  166. package/lib/dist/{commands → src/commands}/OptionsProcessor.js +50 -42
  167. package/lib/dist/{components → src/components}/ComponentRegistry.d.ts +0 -0
  168. package/lib/dist/{components → src/components}/ComponentRegistry.js +4 -0
  169. package/lib/dist/{components → src/components}/ComponentWrapper.d.ts +0 -0
  170. package/lib/dist/{components → src/components}/ComponentWrapper.js +17 -17
  171. package/lib/dist/{components → src/components}/Modal.d.ts +0 -0
  172. package/lib/dist/{components → src/components}/Modal.js +8 -8
  173. package/lib/dist/{components → src/components}/Store.d.ts +2 -0
  174. package/lib/dist/{components → src/components}/Store.js +13 -6
  175. package/lib/dist/{events → src/events}/CommandsObserver.d.ts +0 -0
  176. package/lib/dist/{events → src/events}/CommandsObserver.js +2 -1
  177. package/lib/dist/{events → src/events}/ComponentEventsObserver.d.ts +4 -2
  178. package/lib/dist/{events → src/events}/ComponentEventsObserver.js +16 -14
  179. package/lib/dist/{events → src/events}/EventsRegistry.d.ts +2 -2
  180. package/lib/dist/{events → src/events}/EventsRegistry.js +3 -0
  181. package/lib/dist/{index.d.ts → src/index.d.ts} +0 -0
  182. package/lib/dist/src/index.js +22 -0
  183. package/lib/dist/{interfaces → src/interfaces}/CommandName.d.ts +0 -0
  184. package/lib/dist/{interfaces → src/interfaces}/CommandName.js +0 -0
  185. package/lib/dist/{interfaces → src/interfaces}/ComponentEvents.d.ts +0 -0
  186. package/lib/dist/{interfaces → src/interfaces}/ComponentEvents.js +0 -0
  187. package/lib/dist/{interfaces → src/interfaces}/EventSubscription.d.ts +0 -0
  188. package/lib/dist/{interfaces → src/interfaces}/EventSubscription.js +0 -0
  189. package/lib/dist/{interfaces → src/interfaces}/Events.d.ts +0 -0
  190. package/lib/dist/{interfaces → src/interfaces}/Events.js +0 -0
  191. package/lib/dist/{interfaces → src/interfaces}/Layout.d.ts +0 -0
  192. package/lib/dist/{interfaces → src/interfaces}/Layout.js +0 -0
  193. package/lib/dist/{interfaces → src/interfaces}/NavigationComponent.d.ts +0 -0
  194. package/lib/dist/{interfaces → src/interfaces}/NavigationComponent.js +8 -1
  195. package/lib/dist/{interfaces → src/interfaces}/NavigationComponentListener.d.ts +0 -0
  196. package/lib/dist/{interfaces → src/interfaces}/NavigationComponentListener.js +0 -0
  197. package/lib/dist/{interfaces → src/interfaces}/NavigationComponentProps.d.ts +0 -0
  198. package/lib/dist/{interfaces → src/interfaces}/NavigationComponentProps.js +0 -0
  199. package/lib/dist/{interfaces → src/interfaces}/NavigationFunctionComponent.d.ts +0 -0
  200. package/lib/dist/{interfaces → src/interfaces}/NavigationFunctionComponent.js +0 -0
  201. package/lib/dist/{interfaces → src/interfaces}/Options.d.ts +9 -0
  202. package/lib/dist/{interfaces → src/interfaces}/Options.js +0 -0
  203. package/lib/dist/{interfaces → src/interfaces}/ProcessorSubscription.d.ts +0 -0
  204. package/lib/dist/{interfaces → src/interfaces}/ProcessorSubscription.js +0 -0
  205. package/lib/dist/{interfaces → src/interfaces}/Processors.d.ts +0 -0
  206. package/lib/dist/{interfaces → src/interfaces}/Processors.js +0 -0
  207. package/lib/dist/{processors → src/processors}/LayoutProcessor.d.ts +0 -0
  208. package/lib/dist/{processors → src/processors}/LayoutProcessor.js +1 -0
  209. package/lib/dist/{processors → src/processors}/LayoutProcessorsStore.d.ts +0 -0
  210. package/lib/dist/{processors → src/processors}/LayoutProcessorsStore.js +1 -3
  211. package/lib/dist/{processors → src/processors}/OptionProcessorsStore.d.ts +0 -0
  212. package/lib/dist/{processors → src/processors}/OptionProcessorsStore.js +1 -3
  213. package/lib/dist/{types.d.ts → src/types.d.ts} +0 -0
  214. package/lib/dist/{types.js → src/types.js} +0 -0
  215. package/lib/ios/AnimationObserver.h +17 -0
  216. package/lib/ios/AnimationObserver.m +41 -0
  217. package/lib/ios/BottomTabPresenter.h +0 -3
  218. package/lib/ios/BottomTabPresenter.m +0 -8
  219. package/lib/ios/RNNAssert.h +2 -2
  220. package/lib/ios/RNNBasePresenter.h +0 -4
  221. package/lib/ios/RNNBasePresenter.m +0 -12
  222. package/lib/ios/RNNBottomTabOptions.m +2 -1
  223. package/lib/ios/RNNBottomTabsController.m +8 -8
  224. package/lib/ios/RNNBridgeManager.mm +0 -1
  225. package/lib/ios/RNNButtonBuilder.m +2 -0
  226. package/lib/ios/RNNButtonOptions.h +1 -0
  227. package/lib/ios/RNNButtonOptions.m +4 -0
  228. package/lib/ios/RNNCommandsHandler.m +15 -8
  229. package/lib/ios/RNNComponentPresenter.m +0 -4
  230. package/lib/ios/RNNComponentViewController.m +2 -4
  231. package/lib/ios/RNNDotIndicatorPresenter.m +2 -1
  232. package/lib/ios/RNNExternalViewController.m +2 -4
  233. package/lib/ios/RNNModalManager.h +2 -1
  234. package/lib/ios/RNNModalManager.m +12 -21
  235. package/lib/ios/RNNSegmentedControl.h +1 -1
  236. package/lib/ios/RNNSideMenuChildVC.m +0 -4
  237. package/lib/ios/RNNSideMenuController.m +0 -4
  238. package/lib/ios/RNNSplitViewController.m +0 -4
  239. package/lib/ios/RNNStackController.m +0 -4
  240. package/lib/ios/RNNStackPresenter.m +3 -0
  241. package/lib/ios/RNNSwizzles.m +20 -0
  242. package/lib/ios/RNNTabBarItemCreator.m +3 -2
  243. package/lib/ios/RNNUIBarButtonItem.h +2 -0
  244. package/lib/ios/RNNUIBarButtonItem.m +17 -0
  245. package/lib/ios/ReactNativeNavigation.xcodeproj/project.pbxproj +8 -0
  246. package/lib/ios/TopBarPresenter.m +8 -4
  247. package/lib/ios/UIViewController+RNNOptions.m +1 -1
  248. package/lib/src/commands/Commands.ts +6 -1
  249. package/lib/src/commands/LayoutTreeCrawler.ts +2 -2
  250. package/lib/src/commands/OptionsCrawler.ts +2 -1
  251. package/lib/src/commands/OptionsProcessor.ts +15 -13
  252. package/lib/src/components/Store.ts +9 -0
  253. package/lib/src/events/ComponentEventsObserver.ts +5 -1
  254. package/lib/src/events/EventsRegistry.ts +2 -1
  255. package/lib/src/interfaces/Options.ts +10 -0
  256. package/package.json +19 -60
  257. package/tsconfig.mocks.json +7 -0
  258. package/lib/android/app/src/main/java/com/reactnativenavigation/utils/StatusBarUtils.java +0 -41
  259. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsControllerTest.java +0 -511
  260. package/lib/dist/adapters/ColorService.d.ts +0 -3
  261. package/lib/dist/adapters/TouchablePreview.js +0 -91
  262. package/lib/dist/commands/Deprecations.js +0 -82
  263. package/lib/dist/index.js +0 -22
@@ -1,9 +1,17 @@
1
1
  package com.reactnativenavigation.viewcontrollers.stack;
2
2
 
3
+ import static com.reactnativenavigation.utils.CollectionUtils.filter;
4
+ import static com.reactnativenavigation.utils.CollectionUtils.forEach;
5
+ import static com.reactnativenavigation.utils.CollectionUtils.isNullOrEmpty;
6
+ import static com.reactnativenavigation.utils.CollectionUtils.merge;
7
+ import static com.reactnativenavigation.utils.ObjectUtils.perform;
8
+ import static com.reactnativenavigation.viewcontrollers.stack.topbar.TopBarControllerKt.DEFAULT_BORDER_COLOR;
9
+
3
10
  import android.animation.Animator;
4
11
  import android.app.Activity;
5
12
  import android.graphics.Color;
6
13
  import android.view.View;
14
+ import android.view.ViewGroup;
7
15
  import android.view.ViewGroup.LayoutParams;
8
16
  import android.view.ViewGroup.MarginLayoutParams;
9
17
  import android.widget.FrameLayout;
@@ -28,7 +36,7 @@ import com.reactnativenavigation.options.parsers.TypefaceLoader;
28
36
  import com.reactnativenavigation.utils.CollectionUtils;
29
37
  import com.reactnativenavigation.utils.ObjectUtils;
30
38
  import com.reactnativenavigation.utils.RenderChecker;
31
- import com.reactnativenavigation.utils.StatusBarUtils;
39
+ import com.reactnativenavigation.utils.SystemUiUtils;
32
40
  import com.reactnativenavigation.utils.UiUtils;
33
41
  import com.reactnativenavigation.viewcontrollers.bottomtabs.BottomTabsController;
34
42
  import com.reactnativenavigation.viewcontrollers.stack.topbar.TopBarBackgroundViewController;
@@ -47,24 +55,11 @@ import com.reactnativenavigation.views.stack.topbar.titlebar.TitleBarReactViewCr
47
55
  import java.util.ArrayList;
48
56
  import java.util.Collections;
49
57
  import java.util.HashMap;
50
- import java.util.LinkedHashMap;
51
58
  import java.util.List;
52
59
  import java.util.Map;
53
60
  import java.util.Objects;
54
61
 
55
- import static com.reactnativenavigation.utils.CollectionUtils.difference;
56
- import static com.reactnativenavigation.utils.CollectionUtils.filter;
57
- import static com.reactnativenavigation.utils.CollectionUtils.first;
58
- import static com.reactnativenavigation.utils.CollectionUtils.forEach;
59
- import static com.reactnativenavigation.utils.CollectionUtils.getOrDefault;
60
- import static com.reactnativenavigation.utils.CollectionUtils.isNullOrEmpty;
61
- import static com.reactnativenavigation.utils.CollectionUtils.keyBy;
62
- import static com.reactnativenavigation.utils.CollectionUtils.merge;
63
- import static com.reactnativenavigation.utils.ObjectUtils.perform;
64
- import static com.reactnativenavigation.utils.ObjectUtils.take;
65
-
66
62
  public class StackPresenter {
67
- private static final int DEFAULT_BORDER_COLOR = Color.BLACK;
68
63
  private static final double DEFAULT_ELEVATION = 4d;
69
64
  private final Activity activity;
70
65
 
@@ -79,12 +74,10 @@ public class StackPresenter {
79
74
  private final TitleBarButtonCreator buttonCreator;
80
75
  private Options defaultOptions;
81
76
 
82
- private List<ButtonController> currentRightButtons = new ArrayList<>();
83
- private List<ButtonController> currentLeftButtons = new ArrayList<>();
84
77
  private final Map<View, TitleBarReactViewController> titleControllers = new HashMap();
85
78
  private final Map<View, TopBarBackgroundViewController> backgroundControllers = new HashMap();
86
- private final Map<View, Map<String, ButtonController>> componentRightButtons = new HashMap();
87
- private final Map<View, Map<String, ButtonController>> componentLeftButtons = new HashMap();
79
+ private final Map<View, Map<String, ButtonController>> rightButtonControllers = new HashMap();
80
+ private final Map<View, Map<String, ButtonController>> leftButtonControllers = new HashMap();
88
81
  private final IconResolver iconResolver;
89
82
  private final TypefaceLoader typefaceLoader;
90
83
 
@@ -126,8 +119,8 @@ public class StackPresenter {
126
119
 
127
120
  public boolean isRendered(View component) {
128
121
  ArrayList<ViewController<?>> controllers = new ArrayList<>();
129
- controllers.addAll(perform(componentRightButtons.get(component), new ArrayList<>(), Map::values));
130
- controllers.addAll(perform(componentLeftButtons.get(component), new ArrayList<>(), Map::values));
122
+ controllers.addAll(perform(rightButtonControllers.get(component), new ArrayList<>(), Map::values));
123
+ controllers.addAll(perform(leftButtonControllers.get(component), new ArrayList<>(), Map::values));
131
124
  controllers.add(backgroundControllers.get(component));
132
125
  controllers.add(titleControllers.get(component));
133
126
  return renderChecker.areRendered(filter(controllers, ObjectUtils::notNull));
@@ -136,29 +129,21 @@ public class StackPresenter {
136
129
  public void mergeOptions(Options options, StackController stack, ViewController<?> currentChild) {
137
130
  TopBarOptions resolvedTopBarOptions = options.topBar.copy().mergeWithDefault(stack.resolveChildOptions(currentChild).topBar).mergeWithDefault(defaultOptions.topBar);
138
131
  mergeOrientation(options.layout.orientation);
139
- // mergeButtons(topBar, withDefault.topBar.buttons, child);
140
132
  mergeTopBarOptions(resolvedTopBarOptions, options, stack, currentChild);
141
133
  mergeTopTabsOptions(options.topTabs);
142
134
  mergeTopTabOptions(options.topTabOptions);
143
135
  }
144
136
 
145
- public void onConfigurationChanged(Options options) {
137
+ public void onConfigurationChanged(Options options, ViewController<?> currentChild) {
146
138
  if (topBar == null) return;
147
139
  Options withDefault = options.copy().withDefaultOptions(defaultOptions);
148
- if (currentRightButtons != null && !currentRightButtons.isEmpty())
149
- topBarController.applyRightButtons(currentRightButtons);
150
- if (currentLeftButtons != null && !currentLeftButtons.isEmpty())
151
- topBarController.applyLeftButtons(currentLeftButtons);
152
140
  if (withDefault.topBar.buttons.back.visible.isTrue()) {
153
- topBar.setBackButton(createButtonController(withDefault.topBar.buttons.back));
141
+ topBarController.setBackButton(createButtonController(withDefault.topBar.buttons.back));
154
142
  }
155
- topBar.setOverflowButtonColor(withDefault.topBar.rightButtonColor.get(Color.BLACK));
156
- topBar.applyTopTabsColors(withDefault.topTabs.selectedTabColor,
157
- withDefault.topTabs.unselectedTabColor);
158
- topBar.setBorderColor(withDefault.topBar.borderColor.get(DEFAULT_BORDER_COLOR));
159
- topBar.setBackgroundColor(withDefault.topBar.background.color.get(Color.WHITE));
160
- topBar.setTitleTextColor(withDefault.topBar.title.color.get(TopBar.DEFAULT_TITLE_COLOR));
161
- topBar.setSubtitleColor(withDefault.topBar.subtitle.color.get(TopBar.DEFAULT_TITLE_COLOR));
143
+ topBarController.onConfigurationChanged(withDefault,
144
+ leftButtonControllers.get(currentChild.getView()),
145
+ rightButtonControllers.get(currentChild.getView()));
146
+
162
147
  }
163
148
 
164
149
  public void applyInitialChildLayoutOptions(Options options) {
@@ -183,10 +168,10 @@ public class StackPresenter {
183
168
  public void onChildDestroyed(ViewController<?> child) {
184
169
  perform(titleControllers.remove(child.getView()), TitleBarReactViewController::destroy);
185
170
  perform(backgroundControllers.remove(child.getView()), TopBarBackgroundViewController::destroy);
186
- destroyButtons(componentRightButtons.get(child.getView()));
187
- destroyButtons(componentLeftButtons.get(child.getView()));
188
- componentRightButtons.remove(child.getView());
189
- componentLeftButtons.remove(child.getView());
171
+ destroyButtons(rightButtonControllers.get(child.getView()));
172
+ destroyButtons(leftButtonControllers.get(child.getView()));
173
+ rightButtonControllers.remove(child.getView());
174
+ leftButtonControllers.remove(child.getView());
190
175
  }
191
176
 
192
177
  private void destroyButtons(@Nullable Map<String, ButtonController> buttons) {
@@ -258,25 +243,39 @@ public class StackPresenter {
258
243
  }
259
244
 
260
245
  private void applyStatusBarDrawBehindOptions(TopBarOptions topBarOptions, Options withDefault) {
261
- if(withDefault.statusBar.visible.isTrueOrUndefined() && withDefault.statusBar.drawBehind.isTrue()){
262
- topBar.setTopPadding(StatusBarUtils.getStatusBarHeight(activity));
263
- topBar.setHeight(topBarOptions.height.get(UiUtils.getTopBarHeightDp(activity)) + StatusBarUtils.getStatusBarHeightDp(activity));
246
+ if (withDefault.statusBar.visible.isTrueOrUndefined() && withDefault.statusBar.drawBehind.isTrue()) {
247
+ topBar.setTopPadding(SystemUiUtils.getStatusBarHeight(activity));
248
+ topBar.setHeight(topBarOptions.height.get(UiUtils.getTopBarHeightDp(activity)) + SystemUiUtils.getStatusBarHeightDp(activity));
249
+
264
250
  } else {
265
251
  topBar.setTopPadding(0);
266
252
  topBar.setHeight(topBarOptions.height.get(UiUtils.getTopBarHeightDp(activity)));
267
253
  }
268
254
  }
269
-
270
- private void mergeStatusBarDrawBehindOptions(TopBarOptions topBarOptions, Options toMerge) {
271
- if(toMerge.statusBar.drawBehind.hasValue()){
272
- if(toMerge.statusBar.visible.isTrueOrUndefined() && toMerge.statusBar.drawBehind.isTrue()){
273
- topBar.setTopPadding(StatusBarUtils.getStatusBarHeight(activity));
274
- topBar.setHeight(topBarOptions.height.get(UiUtils.getTopBarHeightDp(activity)) + StatusBarUtils.getStatusBarHeightDp(activity));
275
- } else {
276
- topBar.setTopPadding(0);
277
- topBar.setHeight(topBarOptions.height.get(UiUtils.getTopBarHeightDp(activity)));
255
+
256
+ private void mergeStatusBarDrawBehindOptions(TopBarOptions topBarOptions, Options childOptions) {
257
+ if(childOptions.statusBar.visible.isTrueOrUndefined()){
258
+ if (childOptions.statusBar.drawBehind.hasValue()) {
259
+ if (childOptions.statusBar.drawBehind.isTrue()) {
260
+ topBar.setTopPadding(SystemUiUtils.getStatusBarHeight(activity));
261
+ topBar.setHeight(topBarOptions.height.get(UiUtils.getTopBarHeightDp(activity)) + SystemUiUtils.getStatusBarHeightDp(activity));
262
+ } else {
263
+ topBar.setTopPadding(0);
264
+ topBar.setHeight(topBarOptions.height.get(UiUtils.getTopBarHeightDp(activity)));
265
+ }
266
+ }
267
+ }else{
268
+ if (childOptions.statusBar.drawBehind.hasValue()) {
269
+ if (childOptions.statusBar.drawBehind.isFalseOrUndefined()) {
270
+ topBar.setTopPadding(SystemUiUtils.getStatusBarHeight(activity));
271
+ topBar.setHeight(topBarOptions.height.get(UiUtils.getTopBarHeightDp(activity)) + SystemUiUtils.getStatusBarHeightDp(activity));
272
+ } else {
273
+ topBar.setTopPadding(0);
274
+ topBar.setHeight(topBarOptions.height.get(UiUtils.getTopBarHeightDp(activity)));
275
+ }
278
276
  }
279
277
  }
278
+
280
279
  }
281
280
 
282
281
  @Nullable
@@ -304,59 +303,21 @@ public class StackPresenter {
304
303
  }
305
304
 
306
305
  private void applyButtons(TopBarOptions options, ViewController<?> child) {
307
- if (options.buttons.right != null) {
308
- List<ButtonOptions> rightButtons = mergeButtonsWithColor(options.buttons.right,
309
- options.rightButtonColor
310
- , options.rightButtonDisabledColor);
311
- List<ButtonController> rightButtonControllers = getOrCreateButtonControllersByInstanceId(componentRightButtons.get(child.getView()), rightButtons);
312
- componentRightButtons.put(child.getView(), keyBy(rightButtonControllers, ButtonController::getButtonInstanceId));
313
- if (!CollectionUtils.equals(currentRightButtons, rightButtonControllers)) {
314
- currentRightButtons = rightButtonControllers;
315
- topBarController.applyRightButtons(currentRightButtons);
316
- }
317
- } else {
318
- currentRightButtons = null;
319
- topBar.clearRightButtons();
320
- }
321
-
322
- if (options.buttons.left != null) {
323
- List<ButtonOptions> leftButtons = mergeButtonsWithColor(options.buttons.left,
324
- options.leftButtonColor,
325
- options.leftButtonDisabledColor);
326
- List<ButtonController> leftButtonControllers = getOrCreateButtonControllersByInstanceId(componentLeftButtons.get(child.getView()), leftButtons);
327
- componentLeftButtons.put(child.getView(), keyBy(leftButtonControllers, ButtonController::getButtonInstanceId));
328
- if (!CollectionUtils.equals(currentLeftButtons, leftButtonControllers)) {
329
- currentLeftButtons = leftButtonControllers;
330
- topBarController.applyLeftButtons(currentLeftButtons);
331
- }
332
- } else {
333
- currentLeftButtons = null;
334
- topBar.clearLeftButtons();
335
- }
336
-
337
- if (options.buttons.back.visible.isTrue() && !options.buttons.hasLeftButtons()) {
338
- topBar.setBackButton(createButtonController(options.buttons.back));
339
- }
306
+ //should be at first in order for next actions to be animated
340
307
  if (options.animateRightButtons.hasValue())
341
- topBar.animateRightButtons(options.animateRightButtons.isTrue());
308
+ topBarController.animateRightButtons(options.animateRightButtons.isTrue());
342
309
  if (options.animateLeftButtons.hasValue())
343
- topBar.animateLeftButtons(options.animateLeftButtons.isTrue());
344
- topBar.setOverflowButtonColor(options.rightButtonColor.get(Color.BLACK));
345
- }
310
+ topBarController.animateLeftButtons(options.animateLeftButtons.isTrue());
346
311
 
347
- private List<ButtonController> getOrCreateButtonControllersByInstanceId(@Nullable Map<String, ButtonController> currentButtons, @Nullable List<ButtonOptions> buttons) {
348
- if (buttons == null) return null;
349
- Map<String, ButtonController> result = new LinkedHashMap<>();
350
- forEach(buttons, b -> result.put(b.instanceId, getOrDefault(currentButtons, b.instanceId, () -> createButtonController(b))));
351
- return new ArrayList<>(result.values());
352
- }
312
+ applyRightButtonsOptions(options, child);
313
+
314
+ applyLeftButtonsOptions(options, child);
353
315
 
354
- private List<ButtonController> getOrCreateButtonControllers(@Nullable Map<String, ButtonController> currentButtons, @NonNull List<ButtonOptions> buttons) {
355
- ArrayList<ButtonController> result = new ArrayList<>();
356
- for (ButtonOptions b : buttons) {
357
- result.add(take(first(perform(currentButtons, null, Map::values), button -> button.getButton().equals(b)), createButtonController(b)));
316
+ if (options.buttons.back.visible.isTrue() && !options.buttons.hasLeftButtons()) {
317
+ topBarController.setBackButton(createButtonController(options.buttons.back));
358
318
  }
359
- return result;
319
+
320
+ topBar.setOverflowButtonColor(options.rightButtonColor.get(Color.BLACK));
360
321
  }
361
322
 
362
323
  private ButtonController createButtonController(ButtonOptions button) {
@@ -404,7 +365,6 @@ public class StackPresenter {
404
365
  perform(bottomTabsController, null, btc -> btc.getSetStackRootAnimation(appearingOptions))
405
366
  );
406
367
  }
407
-
408
368
  public void mergeChildOptions(Options toMerge, Options resolvedOptions, StackController stack, ViewController<?> child) {
409
369
  TopBarOptions topBar = toMerge.copy().topBar.mergeWithDefault(resolvedOptions.topBar).mergeWithDefault(defaultOptions.topBar);
410
370
  mergeOrientation(toMerge.layout.orientation);
@@ -419,8 +379,13 @@ public class StackPresenter {
419
379
  }
420
380
 
421
381
  private void mergeButtons(TopBarOptions options, TopBarOptions optionsToMerge, View child, StackController stack) {
422
- mergeRightButtons(options, optionsToMerge.buttons, child);
423
- mergeLeftButton(options, optionsToMerge.buttons, child);
382
+ if (optionsToMerge.animateRightButtons.hasValue())
383
+ topBarController.animateRightButtons(optionsToMerge.animateRightButtons.isTrue());
384
+ if (optionsToMerge.animateLeftButtons.hasValue())
385
+ topBarController.animateLeftButtons(optionsToMerge.animateLeftButtons.isTrue());
386
+
387
+ mergeRightButtonsOptions(options, optionsToMerge.buttons, child);
388
+ mergeLeftButtonsOptions(options, optionsToMerge.buttons, child);
424
389
  mergeLeftButtonsColor(child, optionsToMerge.leftButtonColor, optionsToMerge.leftButtonDisabledColor);
425
390
  mergeRightButtonsColor(child, optionsToMerge.rightButtonColor, optionsToMerge.rightButtonDisabledColor);
426
391
  mergeBackButton(optionsToMerge.buttons, stack);
@@ -428,7 +393,7 @@ public class StackPresenter {
428
393
 
429
394
  private void mergeLeftButtonsColor(View child, ThemeColour color, ThemeColour disabledColor) {
430
395
  if (color.hasValue() || disabledColor.hasValue()) {
431
- Map<String, ButtonController> stringButtonControllerMap = componentLeftButtons.get(child);
396
+ Map<String, ButtonController> stringButtonControllerMap = leftButtonControllers.get(child);
432
397
  if (stringButtonControllerMap != null) {
433
398
  forEach(stringButtonControllerMap.values(), (btnController) -> {
434
399
  if (color.hasValue()) {
@@ -444,7 +409,7 @@ public class StackPresenter {
444
409
 
445
410
  private void mergeRightButtonsColor(View child, ThemeColour color, ThemeColour disabledColor) {
446
411
  if (color.hasValue() || disabledColor.hasValue()) {
447
- Map<String, ButtonController> stringButtonControllerMap = componentRightButtons.get(child);
412
+ Map<String, ButtonController> stringButtonControllerMap = rightButtonControllers.get(child);
448
413
  if (stringButtonControllerMap != null) {
449
414
  forEach(stringButtonControllerMap.values(), (btnController) -> {
450
415
  if (color.hasValue()) {
@@ -458,40 +423,65 @@ public class StackPresenter {
458
423
  }
459
424
  }
460
425
 
461
- private void mergeRightButtons(TopBarOptions options, TopBarButtons buttons, View child) {
462
- if (buttons.right == null) return;
463
- List<ButtonOptions> rightButtons = mergeButtonsWithColor(buttons.right, options.rightButtonColor, options.rightButtonDisabledColor);
464
- List<ButtonController> toMerge = getOrCreateButtonControllers(componentRightButtons.get(child), rightButtons);
465
- List<ButtonController> toRemove = difference(currentRightButtons, toMerge, ButtonController::areButtonsEqual);
466
- forEach(toRemove, ButtonController::destroy);
426
+ private void applyLeftButtonsOptions(TopBarOptions options, ViewController<?> child) {
427
+ if (options.buttons.left != null) {
428
+ List<ButtonOptions> leftButtons = mergeButtonsWithColor(options.buttons.left,
429
+ options.leftButtonColor
430
+ , options.leftButtonDisabledColor);
431
+ final ViewGroup childView = child.getView();
432
+ final Map<String, ButtonController> btnControllers = getOrCreateButtonControllerMap(childView, leftButtonControllers);
433
+ topBarController.applyLeftButtonsOptions(btnControllers, leftButtons, this::createButtonController);
434
+ } else {
435
+ topBarController.clearLeftButtons();
436
+ }
437
+ }
467
438
 
468
- if (!CollectionUtils.equals(currentRightButtons, toMerge)) {
469
- componentRightButtons.put(child, keyBy(toMerge, ButtonController::getButtonInstanceId));
470
- topBarController.mergeRightButtons(toMerge, toRemove);
471
- currentRightButtons = toMerge;
439
+ private void applyRightButtonsOptions(TopBarOptions options, ViewController<?> child) {
440
+ if (options.buttons.right != null) {
441
+ List<ButtonOptions> rightButtons = mergeButtonsWithColor(options.buttons.right,
442
+ options.rightButtonColor
443
+ , options.rightButtonDisabledColor);
444
+ final ViewGroup childView = child.getView();
445
+ final Map<String, ButtonController> btnControllers = getOrCreateButtonControllerMap(childView, rightButtonControllers);
446
+ topBarController.applyRightButtonsOptions(btnControllers, rightButtons, this::createButtonController);
447
+ } else {
448
+ topBarController.clearRightButtons();
472
449
  }
450
+ }
451
+
452
+ private void mergeRightButtonsOptions(TopBarOptions options, TopBarButtons buttons, View child) {
453
+ if (buttons.right == null) return;
454
+ List<ButtonOptions> rightButtons = mergeButtonsWithColor(buttons.right, options.rightButtonColor,
455
+ options.rightButtonDisabledColor);
456
+ final Map<String, ButtonController> btnControllers = getOrCreateButtonControllerMap(child, rightButtonControllers);
457
+ topBarController.mergeRightButtonsOptions(btnControllers, rightButtons, this::createButtonController);
473
458
  if (options.rightButtonColor.hasValue()) topBar.setOverflowButtonColor(options.rightButtonColor.get());
474
459
  }
475
460
 
476
- private void mergeLeftButton(TopBarOptions options, TopBarButtons buttons, View child) {
461
+ private void mergeLeftButtonsOptions(TopBarOptions options, TopBarButtons buttons, View child) {
477
462
  if (buttons.left == null) return;
478
- List<ButtonOptions> leftButtons = mergeButtonsWithColor(buttons.left, options.leftButtonColor, options.leftButtonDisabledColor);
479
- List<ButtonController> toMerge = getOrCreateButtonControllers(componentLeftButtons.get(child), leftButtons);
480
- List<ButtonController> toRemove = difference(currentLeftButtons, toMerge, ButtonController::areButtonsEqual);
481
- forEach(toRemove, ButtonController::destroy);
482
- if (!CollectionUtils.equals(currentLeftButtons, toMerge)) {
483
- componentLeftButtons.put(child, keyBy(toMerge, ButtonController::getButtonInstanceId));
484
- topBarController.mergeLeftButtons(toMerge, toRemove);
485
- currentLeftButtons = toMerge;
486
- }
463
+ List<ButtonOptions> leftButtons = mergeButtonsWithColor(buttons.left, options.leftButtonColor,
464
+ options.leftButtonDisabledColor);
465
+ final Map<String, ButtonController> btnControllers = getOrCreateButtonControllerMap(child, leftButtonControllers);
466
+ topBarController.mergeLeftButtonsOptions(btnControllers, leftButtons, this::createButtonController);
467
+ if (options.leftButtonColor.hasValue()) topBar.setOverflowButtonColor(options.leftButtonColor.get());
468
+ }
469
+
470
+ @NonNull
471
+ private Map<String, ButtonController> getOrCreateButtonControllerMap(View child, Map<View, Map<String, ButtonController>> buttonControllers) {
472
+ final Map<String, ButtonController> controllerMap = buttonControllers.get(child);
473
+ final Map<String, ButtonController> btnControllers = controllerMap != null ? controllerMap : new HashMap<>();
474
+ if (controllerMap == null)
475
+ buttonControllers.put(child, btnControllers);
476
+ return btnControllers;
487
477
  }
488
478
 
489
479
  private void mergeBackButton(TopBarButtons buttons, StackController stack) {
490
480
  if (buttons.back.hasValue() && isNullOrEmpty(buttons.left)) {
491
481
  if (buttons.back.visible.isFalse()) {
492
- topBar.clearBackButton();
482
+ topBarController.clearBackButton();
493
483
  } else if (stack.size() > 1) {
494
- topBar.setBackButton(createButtonController(buttons.back));
484
+ topBarController.setBackButton(createButtonController(buttons.back));
495
485
  }
496
486
  }
497
487
  }
@@ -508,22 +498,21 @@ public class StackPresenter {
508
498
  return result;
509
499
  }
510
500
 
511
- private void mergeTopBarOptions(TopBarOptions resolveOptions, Options options, StackController stack, ViewController<?> child) {
512
- TopBarOptions topBarOptions = options.topBar;
501
+ private void mergeTopBarOptions(TopBarOptions resolveOptions, Options toMerge, StackController stack,
502
+ ViewController<?> child) {
503
+ TopBarOptions topBarOptions = toMerge.topBar;
513
504
  final View component = child.getView();
514
- if (options.layout.direction.hasValue()) topBar.setLayoutDirection(options.layout.direction);
505
+ if (toMerge.layout.direction.hasValue()) topBar.setLayoutDirection(toMerge.layout.direction);
515
506
  if (topBarOptions.height.hasValue()) topBar.setHeight(topBarOptions.height.get());
516
507
  if (topBarOptions.elevation.hasValue()) topBar.setElevation(topBarOptions.elevation.get());
517
508
  if (topBarOptions.topMargin.hasValue() && topBar.getLayoutParams() instanceof MarginLayoutParams) {
518
509
  ((MarginLayoutParams) topBar.getLayoutParams()).topMargin = UiUtils.dpToPx(activity, topBarOptions.topMargin.get());
519
510
  }
520
- mergeStatusBarDrawBehindOptions(resolveOptions,options);
511
+ Options childOptions = stack.resolveChildOptions(child).mergeWith(toMerge).withDefaultOptions(defaultOptions);
512
+ mergeStatusBarDrawBehindOptions(resolveOptions, childOptions);
521
513
  if (topBarOptions.title.height.hasValue()) topBar.setTitleHeight(topBarOptions.title.height.get());
522
514
  if (topBarOptions.title.topMargin.hasValue()) topBar.setTitleTopMargin(topBarOptions.title.topMargin.get());
523
- if (topBarOptions.animateLeftButtons.hasValue())
524
- topBar.animateLeftButtons(topBarOptions.animateLeftButtons.isTrue());
525
- if (topBarOptions.animateRightButtons.hasValue())
526
- topBar.animateRightButtons(topBarOptions.animateRightButtons.isTrue());
515
+
527
516
  if (topBarOptions.title.component.hasValue()) {
528
517
  TitleBarReactViewController controller = findTitleComponent(topBarOptions.title.component);
529
518
  if (controller == null) {
@@ -646,8 +635,8 @@ public class StackPresenter {
646
635
 
647
636
  @RestrictTo(RestrictTo.Scope.TESTS)
648
637
  public void setComponentsButtonController(View child, ButtonController rightController, ButtonController leftController) {
649
- forEach(componentLeftButtons.get(child).keySet(), (key) -> componentLeftButtons.get(child).put(key, leftController));
650
- forEach(componentRightButtons.get(child).keySet(), (key) -> componentRightButtons.get(child).put(key, rightController));
638
+ forEach(leftButtonControllers.get(child).keySet(), (key) -> leftButtonControllers.get(child).put(key, leftController));
639
+ forEach(rightButtonControllers.get(child).keySet(), (key) -> rightButtonControllers.get(child).put(key, rightController));
651
640
  }
652
641
 
653
642
 
@@ -657,11 +646,11 @@ public class StackPresenter {
657
646
  }
658
647
 
659
648
  private List<ButtonController> getRightButtons(View child) {
660
- return componentRightButtons.containsKey(child) ? new ArrayList<>(componentRightButtons.get(child).values()) : null;
649
+ return rightButtonControllers.containsKey(child) ? new ArrayList<>(rightButtonControllers.get(child).values()) : null;
661
650
  }
662
651
 
663
652
  private List<ButtonController> getLeftButtons(View child) {
664
- return componentLeftButtons.containsKey(child) ? new ArrayList<>(componentLeftButtons.get(child).values()) : null;
653
+ return leftButtonControllers.containsKey(child) ? new ArrayList<>(leftButtonControllers.get(child).values()) : null;
665
654
  }
666
655
 
667
656
  private void applyStatusBarInsets(StackController stack, ViewController<?> child) {
@@ -678,7 +667,7 @@ public class StackPresenter {
678
667
  private int getTopBarTopMargin(StackController stack, ViewController<?> child) {
679
668
  Options withDefault = stack.resolveChildOptions(child).withDefaultOptions(defaultOptions);
680
669
  int topMargin = UiUtils.dpToPx(activity, withDefault.topBar.topMargin.get(0));
681
- int statusBarInset = withDefault.statusBar.visible.isTrueOrUndefined() && !withDefault.statusBar.drawBehind.isTrue() ? StatusBarUtils.getStatusBarHeight(child.getActivity()) : 0;
670
+ int statusBarInset = withDefault.statusBar.visible.isTrueOrUndefined() && !withDefault.statusBar.drawBehind.isTrue() ? SystemUiUtils.getStatusBarHeight(child.getActivity()) : 0;
682
671
  return topMargin + statusBarInset;
683
672
  }
684
673