react-native-navigation 8.1.0-alpha01 → 8.1.0-rc01-snapshot.1685

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 (185) hide show
  1. package/autolink/postlink/__snapshots__/appDelegateLinker.test.js.snap +12 -12
  2. package/index.e2e.js +2 -1
  3. package/lib/Mock/Components/ComponentScreen.tsx +2 -1
  4. package/lib/Mock/Components/LayoutComponent.tsx +9 -0
  5. package/lib/Mock/Components/SideMenu.tsx +27 -0
  6. package/lib/Mock/Layouts/BottomTabsNode.ts +4 -2
  7. package/lib/Mock/Layouts/LayoutNodeFactory.ts +14 -1
  8. package/lib/Mock/Layouts/ParentNode.ts +4 -0
  9. package/lib/Mock/Layouts/SideMenu.ts +87 -0
  10. package/lib/Mock/Stores/LayoutStore.ts +42 -10
  11. package/lib/Mock/actions/layoutActions.ts +11 -0
  12. package/lib/Mock/mocks/NativeCommandsSender.tsx +1 -0
  13. package/lib/android/app/build.gradle +22 -125
  14. package/lib/android/app/src/main/java/com/reactnativenavigation/FeatureToggles.kt +4 -2
  15. package/lib/android/app/src/main/java/com/reactnativenavigation/NavigationActivity.java +2 -2
  16. package/lib/android/app/src/main/java/com/reactnativenavigation/NavigationApplication.java +1 -1
  17. package/lib/android/app/src/main/java/com/reactnativenavigation/options/LayoutFactory.java +4 -4
  18. package/lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationPackage.kt +27 -13
  19. package/lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationReactInitializer.java +2 -14
  20. package/lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationTurboModule.kt +291 -0
  21. package/lib/android/app/src/{reactNative71 → main}/java/com/reactnativenavigation/react/ReactGateway.java +23 -23
  22. package/lib/android/app/src/main/java/com/reactnativenavigation/react/ReactView.java +6 -6
  23. package/lib/android/app/src/main/java/com/reactnativenavigation/utils/ColorUtils.java +11 -0
  24. package/lib/android/app/src/main/java/com/reactnativenavigation/utils/MotionEvent.kt +4 -9
  25. package/lib/android/app/src/main/java/com/reactnativenavigation/utils/SystemUiUtils.kt +12 -17
  26. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabPresenter.java +0 -1
  27. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsController.java +20 -13
  28. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/component/ComponentPresenter.java +18 -0
  29. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/component/ComponentViewController.java +5 -17
  30. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackController.java +28 -13
  31. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackPresenter.java +13 -6
  32. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/TopBarController.kt +35 -2
  33. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/statusbar/StatusBarPresenter.kt +212 -0
  34. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/viewcontroller/Presenter.java +10 -178
  35. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/viewcontroller/StatusBarColorAnimator.kt +28 -0
  36. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/viewcontroller/ViewController.java +34 -7
  37. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/viewcontroller/ViewControllerVisibilityInfo.kt +5 -0
  38. package/lib/android/build.gradle +27 -15
  39. package/lib/dist/Mock/Components/ComponentScreen.js +2 -1
  40. package/lib/dist/Mock/Components/LayoutComponent.js +9 -0
  41. package/lib/dist/Mock/Components/SideMenu.d.ts +58 -0
  42. package/lib/dist/Mock/Components/SideMenu.js +25 -0
  43. package/lib/dist/Mock/Layouts/BottomTabsNode.d.ts +1 -1
  44. package/lib/dist/Mock/Layouts/BottomTabsNode.js +3 -2
  45. package/lib/dist/Mock/Layouts/LayoutNodeFactory.d.ts +2 -1
  46. package/lib/dist/Mock/Layouts/LayoutNodeFactory.js +10 -1
  47. package/lib/dist/Mock/Layouts/ParentNode.d.ts +1 -0
  48. package/lib/dist/Mock/Layouts/ParentNode.js +3 -0
  49. package/lib/dist/Mock/Layouts/SideMenu.d.ts +31 -0
  50. package/lib/dist/Mock/Layouts/SideMenu.js +80 -0
  51. package/lib/dist/Mock/Stores/LayoutStore.js +38 -9
  52. package/lib/dist/Mock/actions/layoutActions.d.ts +3 -0
  53. package/lib/dist/Mock/actions/layoutActions.js +11 -1
  54. package/lib/dist/Mock/mocks/NativeCommandsSender.js +1 -0
  55. package/lib/dist/src/adapters/NativeCommandsSender.d.ts +39 -4
  56. package/lib/dist/src/adapters/NativeCommandsSender.js +2 -2
  57. package/lib/dist/src/adapters/NativeRNNTurboEventEmitter.js +2 -9
  58. package/lib/dist/src/adapters/NativeRNNTurboModule.d.ts +9 -10
  59. package/lib/dist/src/adapters/NativeRNNTurboModule.js +1 -12
  60. package/lib/dist/src/commands/Commands.d.ts +13 -13
  61. package/lib/ios/AnimatedTextView.mm +1 -0
  62. package/lib/ios/Constants.mm +7 -1
  63. package/lib/ios/RNNAppDelegate.mm +3 -1
  64. package/lib/ios/RNNCommandsHandler.mm +1 -0
  65. package/lib/ios/RNNCustomTitleView.h +1 -0
  66. package/lib/ios/RNNCustomTitleView.mm +8 -1
  67. package/lib/ios/RNNEventEmitter.mm +3 -0
  68. package/lib/ios/RNNReactButtonView.mm +1 -1
  69. package/lib/ios/RNNReactView.h +3 -1
  70. package/lib/ios/RNNReactView.mm +45 -20
  71. package/lib/ios/TopBarTitlePresenter.mm +2 -0
  72. package/lib/ios/TurboModules/RNNTurboEventEmitter.mm +7 -0
  73. package/lib/ios/UINavigationController+RNNCommands.mm +4 -0
  74. package/lib/src/adapters/NativeCommandsSender.ts +7 -7
  75. package/lib/src/adapters/NativeRNNTurboEventEmitter.ts +3 -9
  76. package/lib/src/adapters/NativeRNNTurboModule.ts +23 -21
  77. package/package.json +14 -17
  78. package/react-native.config.js +1 -1
  79. package/lib/android/app/src/main/java/com/reactnativenavigation/react/DevPermissionRequest.java +0 -42
  80. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/statusbar/StatusBarController.kt +0 -9
  81. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/statusbar/StatusBarPresenter.kt +0 -9
  82. package/lib/android/app/src/reactNative51/java/com/reactnativenavigation/options/parsers/ColorParser.java +0 -18
  83. package/lib/android/app/src/reactNative51/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java +0 -22
  84. package/lib/android/app/src/reactNative51/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java +0 -22
  85. package/lib/android/app/src/reactNative51/java/com/reactnativenavigation/react/NavigationReactNativeHost.java +0 -71
  86. package/lib/android/app/src/reactNative51/java/com/reactnativenavigation/react/ReactGateway.java +0 -70
  87. package/lib/android/app/src/reactNative51/java/com/reactnativenavigation/react/SyncUiImplementation.java +0 -83
  88. package/lib/android/app/src/reactNative51/java/com/reactnativenavigation/react/modal/ModalContentLayout.kt +0 -81
  89. package/lib/android/app/src/reactNative51/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegate.kt +0 -42
  90. package/lib/android/app/src/reactNative51/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java +0 -27
  91. package/lib/android/app/src/reactNative51/java/com/reactnativenavigation/views/stack/topbar/titlebar/TitleBarReactView.kt +0 -32
  92. package/lib/android/app/src/reactNative55/java/com/reactnativenavigation/options/parsers/ColorParser.java +0 -18
  93. package/lib/android/app/src/reactNative55/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java +0 -22
  94. package/lib/android/app/src/reactNative55/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java +0 -22
  95. package/lib/android/app/src/reactNative55/java/com/reactnativenavigation/react/NavigationReactNativeHost.java +0 -71
  96. package/lib/android/app/src/reactNative55/java/com/reactnativenavigation/react/ReactGateway.java +0 -70
  97. package/lib/android/app/src/reactNative55/java/com/reactnativenavigation/react/ReloadHandlerFacade.java +0 -22
  98. package/lib/android/app/src/reactNative55/java/com/reactnativenavigation/react/SyncUiImplementation.java +0 -83
  99. package/lib/android/app/src/reactNative55/java/com/reactnativenavigation/react/modal/ModalContentLayout.kt +0 -81
  100. package/lib/android/app/src/reactNative55/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegate.kt +0 -42
  101. package/lib/android/app/src/reactNative55/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java +0 -27
  102. package/lib/android/app/src/reactNative55/java/com/reactnativenavigation/views/stack/topbar/titlebar/TitleBarReactView.kt +0 -32
  103. package/lib/android/app/src/reactNative56/java/com/reactnativenavigation/options/parsers/ColorParser.java +0 -18
  104. package/lib/android/app/src/reactNative56/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java +0 -28
  105. package/lib/android/app/src/reactNative56/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java +0 -28
  106. package/lib/android/app/src/reactNative56/java/com/reactnativenavigation/react/NavigationReactNativeHost.java +0 -71
  107. package/lib/android/app/src/reactNative56/java/com/reactnativenavigation/react/ReactGateway.java +0 -70
  108. package/lib/android/app/src/reactNative56/java/com/reactnativenavigation/react/ReloadHandlerFacade.java +0 -25
  109. package/lib/android/app/src/reactNative56/java/com/reactnativenavigation/react/SyncUiImplementation.java +0 -83
  110. package/lib/android/app/src/reactNative56/java/com/reactnativenavigation/react/modal/ModalContentLayout.kt +0 -81
  111. package/lib/android/app/src/reactNative56/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegate.kt +0 -42
  112. package/lib/android/app/src/reactNative56/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java +0 -27
  113. package/lib/android/app/src/reactNative56/java/com/reactnativenavigation/views/stack/topbar/titlebar/TitleBarReactView.kt +0 -32
  114. package/lib/android/app/src/reactNative57/java/com/reactnativenavigation/options/parsers/ColorParser.java +0 -18
  115. package/lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java +0 -28
  116. package/lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java +0 -28
  117. package/lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/NavigationReactNativeHost.java +0 -70
  118. package/lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/ReactGateway.java +0 -70
  119. package/lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/ReloadHandlerFacade.java +0 -25
  120. package/lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/SyncUiImplementation.java +0 -70
  121. package/lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/modal/ModalContentLayout.kt +0 -81
  122. package/lib/android/app/src/reactNative57/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegate.kt +0 -42
  123. package/lib/android/app/src/reactNative57/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java +0 -27
  124. package/lib/android/app/src/reactNative57/java/com/reactnativenavigation/views/stack/topbar/titlebar/TitleBarReactView.kt +0 -32
  125. package/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/options/parsers/ColorParser.java +0 -18
  126. package/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java +0 -28
  127. package/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java +0 -28
  128. package/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/react/NavigationReactNativeHost.java +0 -70
  129. package/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/react/ReactGateway.java +0 -70
  130. package/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/react/ReloadHandlerFacade.java +0 -25
  131. package/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/react/SyncUiImplementation.java +0 -83
  132. package/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/react/modal/ModalContentLayout.kt +0 -81
  133. package/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegate.kt +0 -42
  134. package/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java +0 -27
  135. package/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/views/stack/topbar/titlebar/TitleBarReactView.kt +0 -32
  136. package/lib/android/app/src/reactNative60/java/com/reactnativenavigation/options/parsers/ColorParser.java +0 -18
  137. package/lib/android/app/src/reactNative60/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java +0 -28
  138. package/lib/android/app/src/reactNative60/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java +0 -28
  139. package/lib/android/app/src/reactNative60/java/com/reactnativenavigation/react/NavigationReactNativeHost.java +0 -67
  140. package/lib/android/app/src/reactNative60/java/com/reactnativenavigation/react/ReactGateway.java +0 -70
  141. package/lib/android/app/src/reactNative60/java/com/reactnativenavigation/react/ReloadHandlerFacade.java +0 -25
  142. package/lib/android/app/src/reactNative60/java/com/reactnativenavigation/react/modal/ModalContentLayout.kt +0 -81
  143. package/lib/android/app/src/reactNative60/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegate.kt +0 -42
  144. package/lib/android/app/src/reactNative60/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java +0 -27
  145. package/lib/android/app/src/reactNative60/java/com/reactnativenavigation/views/stack/topbar/titlebar/TitleBarReactView.kt +0 -32
  146. package/lib/android/app/src/reactNative62/java/com/reactnativenavigation/options/parsers/ColorParser.java +0 -18
  147. package/lib/android/app/src/reactNative62/java/com/reactnativenavigation/react/NavigationReactNativeHost.java +0 -67
  148. package/lib/android/app/src/reactNative62/java/com/reactnativenavigation/react/ReactGateway.java +0 -72
  149. package/lib/android/app/src/reactNative62/java/com/reactnativenavigation/react/ReloadHandlerFacade.java +0 -22
  150. package/lib/android/app/src/reactNative62/java/com/reactnativenavigation/react/modal/ModalContentLayout.kt +0 -81
  151. package/lib/android/app/src/reactNative62/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegate.kt +0 -42
  152. package/lib/android/app/src/reactNative62/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java +0 -27
  153. package/lib/android/app/src/reactNative62/java/com/reactnativenavigation/views/stack/topbar/titlebar/TitleBarReactView.kt +0 -32
  154. package/lib/android/app/src/reactNative63/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java +0 -22
  155. package/lib/android/app/src/reactNative63/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java +0 -22
  156. package/lib/android/app/src/reactNative63/java/com/reactnativenavigation/react/NavigationReactNativeHost.java +0 -66
  157. package/lib/android/app/src/reactNative63/java/com/reactnativenavigation/react/ReactGateway.java +0 -72
  158. package/lib/android/app/src/reactNative63/java/com/reactnativenavigation/react/ReloadHandlerFacade.java +0 -22
  159. package/lib/android/app/src/reactNative63/java/com/reactnativenavigation/react/modal/ModalContentLayout.kt +0 -81
  160. package/lib/android/app/src/reactNative63/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegate.kt +0 -42
  161. package/lib/android/app/src/reactNative63/java/com/reactnativenavigation/views/stack/topbar/titlebar/TitleBarReactView.kt +0 -32
  162. package/lib/android/app/src/reactNative68/java/com/reactnativenavigation/options/parsers/ColorParser.kt +0 -38
  163. package/lib/android/app/src/reactNative68/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java +0 -22
  164. package/lib/android/app/src/reactNative68/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java +0 -22
  165. package/lib/android/app/src/reactNative68/java/com/reactnativenavigation/react/NavigationReactNativeHost.java +0 -66
  166. package/lib/android/app/src/reactNative68/java/com/reactnativenavigation/react/ReactGateway.java +0 -72
  167. package/lib/android/app/src/reactNative68/java/com/reactnativenavigation/react/ReloadHandlerFacade.java +0 -22
  168. package/lib/android/app/src/reactNative68/java/com/reactnativenavigation/react/modal/ModalContentLayout.kt +0 -87
  169. package/lib/android/app/src/reactNative68/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegate.kt +0 -42
  170. package/lib/android/app/src/reactNative68/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java +0 -12
  171. package/lib/android/app/src/reactNative68/java/com/reactnativenavigation/views/stack/topbar/titlebar/TitleBarReactView.kt +0 -32
  172. package/lib/android/app/src/reactNative71/java/com/reactnativenavigation/options/parsers/ColorParser.kt +0 -38
  173. package/lib/android/app/src/reactNative71/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java +0 -22
  174. package/lib/android/app/src/reactNative71/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java +0 -22
  175. package/lib/android/app/src/reactNative71/java/com/reactnativenavigation/react/ReloadHandlerFacade.java +0 -22
  176. package/lib/android/app/src/reactNative71/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java +0 -12
  177. /package/lib/android/app/src/{reactNative63 → main}/java/com/reactnativenavigation/options/parsers/ColorParser.kt +0 -0
  178. /package/lib/android/app/src/{reactNative62 → main}/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java +0 -0
  179. /package/lib/android/app/src/{reactNative62 → main}/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java +0 -0
  180. /package/lib/android/app/src/{reactNative71 → main}/java/com/reactnativenavigation/react/NavigationReactNativeHost.java +0 -0
  181. /package/lib/android/app/src/{reactNative51 → main}/java/com/reactnativenavigation/react/ReloadHandlerFacade.java +0 -0
  182. /package/lib/android/app/src/{reactNative71 → main}/java/com/reactnativenavigation/react/modal/ModalContentLayout.kt +0 -0
  183. /package/lib/android/app/src/{reactNative71 → main}/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegate.kt +0 -0
  184. /package/lib/android/app/src/{reactNative63 → main}/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java +0 -0
  185. /package/lib/android/app/src/{reactNative71 → main}/java/com/reactnativenavigation/views/stack/topbar/titlebar/TitleBarReactView.kt +0 -0
@@ -1,5 +1,9 @@
1
1
  package com.reactnativenavigation.viewcontrollers.bottomtabs;
2
2
 
3
+ import static com.reactnativenavigation.utils.CollectionUtils.forEach;
4
+ import static com.reactnativenavigation.utils.CollectionUtils.map;
5
+ import static com.reactnativenavigation.utils.ObjectUtils.perform;
6
+
3
7
  import android.animation.Animator;
4
8
  import android.app.Activity;
5
9
  import android.content.res.Configuration;
@@ -9,6 +13,8 @@ import android.view.ViewGroup;
9
13
  import androidx.annotation.NonNull;
10
14
  import androidx.annotation.RestrictTo;
11
15
  import androidx.coordinatorlayout.widget.CoordinatorLayout;
16
+ import androidx.core.graphics.Insets;
17
+ import androidx.core.view.WindowInsetsCompat;
12
18
 
13
19
  import com.aurelhubert.ahbottomnavigation.AHBottomNavigation;
14
20
  import com.aurelhubert.ahbottomnavigation.AHBottomNavigationItem;
@@ -34,10 +40,6 @@ import java.util.Deque;
34
40
  import java.util.LinkedList;
35
41
  import java.util.List;
36
42
 
37
- import static com.reactnativenavigation.utils.CollectionUtils.forEach;
38
- import static com.reactnativenavigation.utils.CollectionUtils.map;
39
- import static com.reactnativenavigation.utils.ObjectUtils.perform;
40
-
41
43
  public class BottomTabsController extends ParentController<BottomTabsLayout> implements AHBottomNavigation.OnTabSelectedListener, TabSelector {
42
44
 
43
45
  private BottomTabsContainer bottomTabsContainer;
@@ -84,6 +86,7 @@ public class BottomTabsController extends ParentController<BottomTabsLayout> imp
84
86
  @Override
85
87
  public BottomTabsLayout createView() {
86
88
  BottomTabsLayout root = new BottomTabsLayout(getActivity());
89
+
87
90
  this.bottomTabsContainer = createBottomTabsContainer();
88
91
  this.bottomTabs = bottomTabsContainer.getBottomTabs();
89
92
  Options resolveCurrentOptions = resolveCurrentOptions();
@@ -95,6 +98,7 @@ public class BottomTabsController extends ParentController<BottomTabsLayout> imp
95
98
  bottomTabs.addItems(createTabs());
96
99
  setInitialTab(resolveCurrentOptions);
97
100
  tabsAttacher.attach();
101
+
98
102
  return root;
99
103
  }
100
104
 
@@ -271,11 +275,11 @@ public class BottomTabsController extends ParentController<BottomTabsLayout> imp
271
275
  private void selectTab(int newIndex, boolean enableSelectionHistory) {
272
276
  saveTabSelection(newIndex, enableSelectionHistory);
273
277
  tabsAttacher.onTabSelected(tabs.get(newIndex));
274
- getCurrentView().setVisibility(View.INVISIBLE);
278
+ getCurrentChild().onDeselected();
279
+
280
+ ViewController<?> previouslyVisible = getCurrentChild();
275
281
  bottomTabs.setCurrentItem(newIndex, false);
276
- getCurrentView().setVisibility(View.VISIBLE);
277
- getCurrentChild().onViewWillAppear();
278
- getCurrentChild().onViewDidAppear();
282
+ getCurrentChild().onSelected(previouslyVisible);
279
283
  }
280
284
 
281
285
  private void saveTabSelection(int newIndex, boolean enableSelectionHistory) {
@@ -287,11 +291,6 @@ public class BottomTabsController extends ParentController<BottomTabsLayout> imp
287
291
  }
288
292
  }
289
293
 
290
- @NonNull
291
- private ViewGroup getCurrentView() {
292
- return tabs.get(bottomTabs.getCurrentItem()).getView();
293
- }
294
-
295
294
  public Animator getPushAnimation(Options appearingOptions) {
296
295
  return presenter.getPushAnimation(appearingOptions);
297
296
  }
@@ -304,6 +303,14 @@ public class BottomTabsController extends ParentController<BottomTabsLayout> imp
304
303
  return presenter.getPopAnimation(appearingOptions, disappearingOptions);
305
304
  }
306
305
 
306
+ @Override
307
+ protected WindowInsetsCompat onApplyWindowInsets(View view, WindowInsetsCompat insets) {
308
+ Insets sysInsets = insets.getInsets(WindowInsetsCompat.Type.systemBars());
309
+ view.setPaddingRelative(0, 0, 0, sysInsets.bottom);
310
+ return WindowInsetsCompat.CONSUMED;
311
+ }
312
+
313
+
307
314
  @RestrictTo(RestrictTo.Scope.TESTS)
308
315
  public BottomTabs getBottomTabs() {
309
316
  return bottomTabs;
@@ -1,6 +1,12 @@
1
1
  package com.reactnativenavigation.viewcontrollers.component;
2
2
 
3
+ import android.animation.Animator;
4
+
5
+ import androidx.annotation.NonNull;
6
+ import androidx.annotation.Nullable;
7
+
3
8
  import com.reactnativenavigation.options.Options;
9
+ import com.reactnativenavigation.viewcontrollers.statusbar.StatusBarPresenter;
4
10
  import com.reactnativenavigation.views.component.ComponentLayout;
5
11
 
6
12
  public class ComponentPresenter extends ComponentPresenterBase {
@@ -35,4 +41,16 @@ public class ComponentPresenter extends ComponentPresenterBase {
35
41
  Options withDefault = options.withDefaultOptions(defaultOptions);
36
42
  setBackgroundColor(view, withDefault);
37
43
  }
44
+
45
+ @Nullable
46
+ public Animator getStatusBarPushAnimation(@NonNull Options appearingOptions) {
47
+ Options appearingOptionsWithDefault = appearingOptions.copy().withDefaultOptions(defaultOptions);
48
+ return StatusBarPresenter.instance.getStatusBarPushAnimation(appearingOptionsWithDefault);
49
+ }
50
+
51
+ @Nullable
52
+ public Animator getStatusBarPopAnimation(@NonNull Options appearingOptions, @NonNull Options disappearingOptions) {
53
+ Options appearingOptionsWithDefault = appearingOptions.copy().withDefaultOptions(defaultOptions);
54
+ return StatusBarPresenter.instance.getStatusBarPopAnimation(appearingOptionsWithDefault, disappearingOptions);
55
+ }
38
56
  }
@@ -17,13 +17,12 @@ import com.reactnativenavigation.options.Options;
17
17
  import com.reactnativenavigation.utils.SystemUiUtils;
18
18
  import com.reactnativenavigation.viewcontrollers.child.ChildController;
19
19
  import com.reactnativenavigation.viewcontrollers.child.ChildControllersRegistry;
20
- import com.reactnativenavigation.viewcontrollers.stack.statusbar.StatusBarController;
21
20
  import com.reactnativenavigation.viewcontrollers.viewcontroller.Presenter;
22
21
  import com.reactnativenavigation.viewcontrollers.viewcontroller.ReactViewCreator;
23
22
  import com.reactnativenavigation.viewcontrollers.viewcontroller.ScrollEventListener;
24
23
  import com.reactnativenavigation.views.component.ComponentLayout;
25
24
 
26
- public class ComponentViewController extends ChildController<ComponentLayout> implements StatusBarController {
25
+ public class ComponentViewController extends ChildController<ComponentLayout> {
27
26
  private final String componentName;
28
27
  private final ComponentPresenter presenter;
29
28
  private final ReactViewCreator viewCreator;
@@ -65,27 +64,16 @@ public class ComponentViewController extends ChildController<ComponentLayout> im
65
64
  presenter.setDefaultOptions(defaultOptions);
66
65
  }
67
66
 
68
- @Override
69
- public StatusBarController getStatusBarController() {
70
- return this;
71
- }
72
-
73
67
  @Nullable
74
68
  @Override
75
- public Animator getStatusBarPushAnimation(@NonNull Options appearingOptions) {
76
- if (super.presenter != null) {
77
- return super.presenter.getStatusBarPushAnimation(appearingOptions);
78
- }
79
- return null;
69
+ public Animator getPushAnimations(Options appearingOptions) {
70
+ return this.presenter.getStatusBarPushAnimation(appearingOptions);
80
71
  }
81
72
 
82
73
  @Nullable
83
74
  @Override
84
- public Animator getStatusBarPopAnimation(@NonNull Options appearingOptions, @NonNull Options disappearingOptions) {
85
- if (super.presenter != null) {
86
- return super.presenter.getStatusBarPopAnimation(appearingOptions, disappearingOptions);
87
- }
88
- return null;
75
+ public Animator getPopAnimations(Options appearingOptions, Options disappearingOptions) {
76
+ return this.presenter.getStatusBarPopAnimation(appearingOptions, disappearingOptions);
89
77
  }
90
78
 
91
79
  @Override
@@ -1,10 +1,23 @@
1
1
  package com.reactnativenavigation.viewcontrollers.stack;
2
2
 
3
+ import static com.reactnativenavigation.react.Constants.HARDWARE_BACK_BUTTON_ID;
4
+ import static com.reactnativenavigation.utils.CollectionUtils.requireLast;
5
+ import static com.reactnativenavigation.utils.CoordinatorLayoutUtils.matchParentWithBehaviour;
6
+ import static com.reactnativenavigation.utils.CoordinatorLayoutUtils.updateBottomMargin;
7
+ import static com.reactnativenavigation.utils.ObjectUtils.perform;
8
+
3
9
  import android.app.Activity;
4
10
  import android.content.res.Configuration;
5
11
  import android.view.View;
6
12
  import android.view.ViewGroup;
7
13
 
14
+ import androidx.annotation.NonNull;
15
+ import androidx.annotation.RestrictTo;
16
+ import androidx.annotation.Size;
17
+ import androidx.annotation.VisibleForTesting;
18
+ import androidx.coordinatorlayout.widget.CoordinatorLayout;
19
+ import androidx.viewpager.widget.ViewPager;
20
+
8
21
  import com.facebook.react.ReactRootView;
9
22
  import com.reactnativenavigation.options.ButtonOptions;
10
23
  import com.reactnativenavigation.options.Options;
@@ -18,7 +31,9 @@ import com.reactnativenavigation.viewcontrollers.parent.ParentController;
18
31
  import com.reactnativenavigation.viewcontrollers.stack.topbar.TopBarController;
19
32
  import com.reactnativenavigation.viewcontrollers.stack.topbar.button.BackButtonHelper;
20
33
  import com.reactnativenavigation.viewcontrollers.viewcontroller.Presenter;
34
+ import com.reactnativenavigation.viewcontrollers.viewcontroller.TopBarVisibilityInfo;
21
35
  import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController;
36
+ import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewControllerVisibilityInfo;
22
37
  import com.reactnativenavigation.views.component.Component;
23
38
  import com.reactnativenavigation.views.stack.StackBehaviour;
24
39
  import com.reactnativenavigation.views.stack.StackLayout;
@@ -31,19 +46,6 @@ import java.util.Collection;
31
46
  import java.util.Iterator;
32
47
  import java.util.List;
33
48
 
34
- import androidx.annotation.NonNull;
35
- import androidx.annotation.RestrictTo;
36
- import androidx.annotation.Size;
37
- import androidx.annotation.VisibleForTesting;
38
- import androidx.coordinatorlayout.widget.CoordinatorLayout;
39
- import androidx.viewpager.widget.ViewPager;
40
-
41
- import static com.reactnativenavigation.react.Constants.HARDWARE_BACK_BUTTON_ID;
42
- import static com.reactnativenavigation.utils.CollectionUtils.*;
43
- import static com.reactnativenavigation.utils.CoordinatorLayoutUtils.matchParentWithBehaviour;
44
- import static com.reactnativenavigation.utils.CoordinatorLayoutUtils.updateBottomMargin;
45
- import static com.reactnativenavigation.utils.ObjectUtils.perform;
46
-
47
49
  public class StackController extends ParentController<StackLayout> {
48
50
 
49
51
  private IdStack<ViewController<?>> stack = new IdStack<>();
@@ -95,6 +97,19 @@ public class StackController extends ParentController<StackLayout> {
95
97
  return stack.peek();
96
98
  }
97
99
 
100
+ @Override
101
+ public void onSelected(ViewController<?> previousVC) {
102
+ presenter.bindNewViewController(previousVC, this);
103
+ super.onSelected(previousVC);
104
+ }
105
+
106
+ @NonNull
107
+ @Override
108
+ public ViewControllerVisibilityInfo getVisibilityInfo() {
109
+ TopBarVisibilityInfo topBarInfo = topBarController.getVisibilityInfo();
110
+ return new ViewControllerVisibilityInfo(topBarInfo);
111
+ }
112
+
98
113
  @Override
99
114
  public void onAttachToParent() {
100
115
  if (!isEmpty() && !getCurrentChild().isDestroyed() && !isViewShown()) {
@@ -37,6 +37,7 @@ import com.reactnativenavigation.viewcontrollers.stack.topbar.button.ButtonContr
37
37
  import com.reactnativenavigation.viewcontrollers.stack.topbar.button.ButtonPresenter;
38
38
  import com.reactnativenavigation.viewcontrollers.stack.topbar.button.IconResolver;
39
39
  import com.reactnativenavigation.viewcontrollers.stack.topbar.title.TitleBarReactViewController;
40
+ import com.reactnativenavigation.viewcontrollers.statusbar.StatusBarPresenter;
40
41
  import com.reactnativenavigation.viewcontrollers.viewcontroller.IReactView;
41
42
  import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController;
42
43
  import com.reactnativenavigation.views.stack.topbar.TopBar;
@@ -191,6 +192,12 @@ public class StackPresenter {
191
192
  componentLeftButtons.remove(child.getView());
192
193
  }
193
194
 
195
+ public void bindNewViewController(ViewController<?> previousVC, ViewController<?> newVC) {
196
+ Options options = newVC.resolveCurrentOptions(defaultOptions);
197
+ topBarController.bindNewViewController(previousVC, newVC);
198
+ StatusBarPresenter.instance.bindViewController(options.statusBar);
199
+ }
200
+
194
201
  private void destroyButtons(@Nullable Map<String, ButtonController> buttons) {
195
202
  if (buttons != null)
196
203
  forEach(buttons.values(), ViewController::destroy);
@@ -423,17 +430,17 @@ public class StackPresenter {
423
430
  Options appearingOptions) {
424
431
  return CollectionUtils.asList(
425
432
  topBarController.getPushAnimation(appearingOptions, getTopBarTranslationAnimationDelta(stack, appearingCtrl)),
426
- perform(appearingCtrl.getStatusBarController(), null, sbc -> sbc.getStatusBarPushAnimation(appearingOptions)),
427
- perform(bottomTabsController, null, btc -> btc.getPushAnimation(appearingOptions))
428
- );
433
+ perform(appearingCtrl, null, vc -> vc.getPushAnimations(appearingOptions)),
434
+ perform(bottomTabsController, null, btc -> btc.getPushAnimation(appearingOptions)
435
+ ));
429
436
  }
430
437
 
431
438
  public List<Animator> getAdditionalPopAnimations(Options appearingOptions, Options disappearingOptions, ViewController<?> appearingCtrl) {
432
439
  return CollectionUtils.asList(
433
440
  topBarController.getPopAnimation(appearingOptions, disappearingOptions),
434
- perform(appearingCtrl.getStatusBarController(), null, sbc -> sbc.getStatusBarPopAnimation(appearingOptions, disappearingOptions)),
435
- perform(bottomTabsController, null, btc -> btc.getPopAnimation(appearingOptions, disappearingOptions))
436
- );
441
+ perform(appearingCtrl, null, vc -> vc.getPopAnimations(appearingOptions, disappearingOptions)),
442
+ perform(bottomTabsController, null, btc -> btc.getPopAnimation(appearingOptions, disappearingOptions)
443
+ ));
437
444
  }
438
445
 
439
446
  public List<Animator> getAdditionalSetRootAnimations(StackController stack, ViewController<?> appearing,
@@ -4,12 +4,14 @@ import android.animation.Animator
4
4
  import android.animation.AnimatorSet
5
5
  import android.content.Context
6
6
  import android.graphics.drawable.ColorDrawable
7
+ import android.os.Build
7
8
  import android.view.MenuItem
8
9
  import android.view.View
9
10
  import androidx.core.animation.addListener
11
+ import androidx.core.animation.doOnEnd
10
12
  import androidx.viewpager.widget.ViewPager
11
13
  import com.reactnativenavigation.RNNFeatureToggles
12
- import com.reactnativenavigation.RNNToggles.TOP_BAR_COLOR_ANIMATION
14
+ import com.reactnativenavigation.RNNToggles
13
15
  import com.reactnativenavigation.options.Alignment
14
16
  import com.reactnativenavigation.options.AnimationOptions
15
17
  import com.reactnativenavigation.options.Options
@@ -20,6 +22,8 @@ import com.reactnativenavigation.utils.ViewUtils
20
22
  import com.reactnativenavigation.utils.resetViewProperties
21
23
  import com.reactnativenavigation.viewcontrollers.stack.topbar.button.ButtonController
22
24
  import com.reactnativenavigation.viewcontrollers.stack.topbar.title.TitleBarReactViewController
25
+ import com.reactnativenavigation.viewcontrollers.viewcontroller.TopBarVisibilityInfo
26
+ import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController
23
27
  import com.reactnativenavigation.views.animations.ColorAnimator
24
28
  import com.reactnativenavigation.views.stack.StackLayout
25
29
  import com.reactnativenavigation.views.stack.topbar.TopBar
@@ -43,6 +47,9 @@ open class TopBarController(
43
47
  val leftButtonCount: Int
44
48
  get() = leftButtonBar.buttonCount
45
49
 
50
+ val visibilityInfo: TopBarVisibilityInfo
51
+ get() = TopBarVisibilityInfo(view.isShown, getBackgroundColor())
52
+
46
53
  fun createView(context: Context, parent: StackLayout): TopBar {
47
54
  if (!::view.isInitialized) {
48
55
  view = createTopBar(context, parent)
@@ -73,6 +80,14 @@ open class TopBarController(
73
80
  }
74
81
  }
75
82
 
83
+ fun getBackgroundColor(): Int? {
84
+ return if (view.background is ColorDrawable) {
85
+ (view.background as ColorDrawable).color
86
+ } else {
87
+ null
88
+ }
89
+ }
90
+
76
91
  fun getRightButton(index: Int): MenuItem = rightButtonBar.getButton(index)
77
92
 
78
93
  fun getPushAnimation(appearingOptions: Options, additionalDy: Float = 0f): Animator? {
@@ -132,6 +147,24 @@ open class TopBarController(
132
147
  )
133
148
  }
134
149
 
150
+ fun bindNewViewController(previousVC: ViewController<*>?, newVC: ViewController<*>?) {
151
+ if (!RNNFeatureToggles.isEnabled(RNNToggles.TOP_BAR_COLOR_ANIMATION__TABS)) {
152
+ return
153
+ }
154
+
155
+ previousVC?.visibilityInfo?.topBarVisibilityInfo?.solidColor?.let { fromColor ->
156
+ newVC?.visibilityInfo?.topBarVisibilityInfo?.solidColor?.let { toColor ->
157
+ colorAnimator.getAnimation(view, fromColor, toColor).apply {
158
+ doOnEnd {
159
+ hasPendingColorAnim = false
160
+ }
161
+ hasPendingColorAnim = true
162
+ start()
163
+ }
164
+ }
165
+ }
166
+ }
167
+
135
168
  fun show() {
136
169
  if (ViewUtils.isVisible(view) || appearAnimator.isAnimatingShow()) return
137
170
  view.resetViewProperties()
@@ -191,7 +224,7 @@ open class TopBarController(
191
224
 
192
225
  if (targetColor.hasValue()
193
226
  && view.background is ColorDrawable
194
- && RNNFeatureToggles.isEnabled(TOP_BAR_COLOR_ANIMATION)) {
227
+ && RNNFeatureToggles.isEnabled(RNNToggles.TOP_BAR_COLOR_ANIMATION__PUSH)) {
195
228
  return colorAnimator.getAnimation(
196
229
  view,
197
230
  (view.background as ColorDrawable).color,
@@ -0,0 +1,212 @@
1
+ package com.reactnativenavigation.viewcontrollers.statusbar
2
+
3
+ import android.animation.Animator
4
+ import android.app.Activity
5
+ import android.graphics.Color
6
+ import android.view.View
7
+ import android.view.Window
8
+ import com.reactnativenavigation.RNNFeatureToggles.isEnabled
9
+ import com.reactnativenavigation.RNNToggles
10
+ import com.reactnativenavigation.options.Options
11
+ import com.reactnativenavigation.options.StatusBarOptions
12
+ import com.reactnativenavigation.options.StatusBarOptions.TextColorScheme
13
+ import com.reactnativenavigation.options.params.Bool
14
+ import com.reactnativenavigation.utils.ColorUtils.isColorLight
15
+ import com.reactnativenavigation.utils.StubAnimationListener.Companion.onAnimatorEnd
16
+ import com.reactnativenavigation.utils.SystemUiUtils.clearStatusBarTranslucency
17
+ import com.reactnativenavigation.utils.SystemUiUtils.getStatusBarColor
18
+ import com.reactnativenavigation.utils.SystemUiUtils.hideStatusBar
19
+ import com.reactnativenavigation.utils.SystemUiUtils.isTranslucent
20
+ import com.reactnativenavigation.utils.SystemUiUtils.setStatusBarColor
21
+ import com.reactnativenavigation.utils.SystemUiUtils.setStatusBarColorScheme
22
+ import com.reactnativenavigation.utils.SystemUiUtils.setStatusBarTranslucent
23
+ import com.reactnativenavigation.utils.SystemUiUtils.showStatusBar
24
+ import com.reactnativenavigation.viewcontrollers.viewcontroller.StatusBarColorAnimator
25
+ import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController
26
+ import java.lang.ref.WeakReference
27
+
28
+ class StatusBarPresenter private constructor(
29
+ activity: Activity,
30
+ private val sbColorAnimator: StatusBarColorAnimator = StatusBarColorAnimator(activity)) {
31
+
32
+ private val window = WeakReference(activity.window)
33
+ private var hasPendingColorAnim = false
34
+
35
+ fun applyOptions(viewController: ViewController<*>, options: StatusBarOptions) {
36
+ if (!hasPendingColorAnim) {
37
+ setStatusBarBackgroundColor(options)
38
+ setTranslucent(options)
39
+ }
40
+ setTextColorScheme(options)
41
+ setStatusBarVisible(viewController, options.visible)
42
+ }
43
+
44
+ fun mergeOptions(view: View, statusBar: StatusBarOptions) {
45
+ mergeStatusBarBackgroundColor(statusBar)
46
+ mergeTextColorScheme(statusBar)
47
+ mergeTranslucent(statusBar)
48
+ mergeStatusBarVisible(view, statusBar.visible)
49
+ }
50
+
51
+ fun onConfigurationChanged(options: StatusBarOptions) {
52
+ setStatusBarBackgroundColor(options)
53
+ setTextColorScheme(options)
54
+ }
55
+
56
+ fun bindViewController(newOptions: StatusBarOptions) {
57
+ if (!isEnabled(RNNToggles.TOP_BAR_COLOR_ANIMATION__TABS)) {
58
+ return
59
+ }
60
+
61
+ if (newOptions.backgroundColor.canApplyValue()) {
62
+ val currentColor = getCurrentStatusBarBackgroundColor() ?: return
63
+ val newColor = getStatusBarBackgroundColor(newOptions)
64
+ createStatusBarColorAnimation(
65
+ from = currentColor,
66
+ to = newColor,
67
+ translucent = newOptions.translucent.isTrue,
68
+ ).start()
69
+ }
70
+ }
71
+
72
+ fun getStatusBarPushAnimation(appearingOptions: Options): Animator? =
73
+ if (isEnabled(RNNToggles.TOP_BAR_COLOR_ANIMATION__PUSH)) {
74
+ getStatusBarColorAnimation(appearingOptions.statusBar)
75
+ } else null
76
+
77
+ fun getStatusBarPopAnimation(appearingOptions: Options, disappearingOptions: Options): Animator? =
78
+ if (isEnabled(RNNToggles.TOP_BAR_COLOR_ANIMATION__PUSH)) {
79
+ getStatusBarColorAnimation(appearingOptions.statusBar)
80
+ } else null
81
+
82
+ private fun setStatusBarBackgroundColor(statusBar: StatusBarOptions) {
83
+ if (statusBar.backgroundColor.canApplyValue()) {
84
+ val statusBarBackgroundColor: Int = getStatusBarBackgroundColor(statusBar)
85
+ setStatusBarBackgroundColor(statusBarBackgroundColor, statusBar.translucent.isTrue)
86
+ }
87
+ }
88
+
89
+ private fun setStatusBarBackgroundColor(color: Int, translucent: Boolean) {
90
+ setStatusBarColor(window.get(), color, translucent)
91
+ }
92
+
93
+ private fun getStatusBarBackgroundColor(statusBar: StatusBarOptions): Int {
94
+ val defaultColor =
95
+ if (statusBar.visible.isTrueOrUndefined) Color.BLACK else Color.TRANSPARENT
96
+ return statusBar.backgroundColor.get(defaultColor)!!
97
+ }
98
+
99
+ private fun setTextColorScheme(statusBar: StatusBarOptions) {
100
+ val view = window.get()?.decorView
101
+ //View.post is a Workaround, added to solve internal Samsung
102
+ //Android 9 issues. For more info see https://github.com/wix/react-native-navigation/pull/7231
103
+ view?.post {
104
+ setStatusBarColorScheme(
105
+ window.get(),
106
+ view,
107
+ isDarkTextColorScheme(statusBar)
108
+ )
109
+ }
110
+ }
111
+
112
+ private fun setTranslucent(options: StatusBarOptions) {
113
+ val window = window.get()
114
+ if (options.translucent.isTrue) {
115
+ setStatusBarTranslucent(window)
116
+ } else if (isTranslucent(window)) {
117
+ clearStatusBarTranslucency(window)
118
+ }
119
+ }
120
+
121
+ private fun setStatusBarVisible(viewController: ViewController<*>, visible: Bool) {
122
+ val window = window.get() ?: return
123
+ val view = if (viewController.view != null) viewController.view else window.decorView
124
+ if (visible.isFalse) {
125
+ hideStatusBar(window, view)
126
+ } else {
127
+ showStatusBar(window, view)
128
+ }
129
+ }
130
+
131
+ private fun mergeStatusBarBackgroundColor(statusBar: StatusBarOptions) {
132
+ if (statusBar.backgroundColor.hasValue()) {
133
+ val statusBarBackgroundColor = getStatusBarBackgroundColor(statusBar)
134
+ setStatusBarColor(
135
+ window.get(), statusBarBackgroundColor,
136
+ statusBar.translucent.isTrue
137
+ )
138
+ }
139
+ }
140
+
141
+ private fun mergeTextColorScheme(statusBar: StatusBarOptions) {
142
+ if (!statusBar.textColorScheme.hasValue()) return
143
+ setTextColorScheme(statusBar)
144
+ }
145
+
146
+ private fun mergeTranslucent(options: StatusBarOptions) {
147
+ val window: Window = window.get() ?: return
148
+ if (options.translucent.isTrue) {
149
+ setStatusBarTranslucent(window)
150
+ } else if (options.translucent.isFalse && isTranslucent(window)) {
151
+ clearStatusBarTranslucency(window)
152
+ }
153
+ }
154
+
155
+ private fun mergeStatusBarVisible(view: View, visible: Bool) {
156
+ if (visible.hasValue()) {
157
+ if (visible.isTrue) {
158
+ showStatusBar(window.get(), view)
159
+ } else {
160
+ hideStatusBar(window.get(), view)
161
+ }
162
+ }
163
+ }
164
+
165
+ private fun isDarkTextColorScheme(statusBar: StatusBarOptions): Boolean {
166
+ if (statusBar.textColorScheme == TextColorScheme.Dark) {
167
+ return true
168
+ }
169
+
170
+ if (statusBar.textColorScheme == TextColorScheme.Light) {
171
+ return false
172
+ }
173
+ return isColorLight(getStatusBarBackgroundColor(statusBar))
174
+ }
175
+
176
+ private fun getStatusBarColorAnimation(statusBarOptions: StatusBarOptions): Animator? {
177
+ if (isEnabled(RNNToggles.TOP_BAR_COLOR_ANIMATION__TABS)) {
178
+ getCurrentStatusBarBackgroundColor()?.let { currentColor ->
179
+ val targetColor = statusBarOptions.backgroundColor
180
+
181
+ if (targetColor.hasValue()) {
182
+ val translucent = statusBarOptions.translucent.isTrue
183
+ return createStatusBarColorAnimation(
184
+ from = currentColor,
185
+ to = targetColor.get(),
186
+ translucent = translucent,
187
+ )
188
+ }
189
+ }
190
+ }
191
+ return null
192
+ }
193
+
194
+ private fun createStatusBarColorAnimation(from: Int, to: Int, translucent: Boolean): Animator =
195
+ sbColorAnimator.getAnimator(from, to, translucent).apply {
196
+ addListener(onAnimatorEnd {
197
+ hasPendingColorAnim = false
198
+ })
199
+ hasPendingColorAnim = true
200
+ }
201
+
202
+ private fun getCurrentStatusBarBackgroundColor() =
203
+ getStatusBarColor(window.get())
204
+
205
+ companion object {
206
+ lateinit var instance: StatusBarPresenter
207
+
208
+ fun init(activity: Activity) {
209
+ instance = StatusBarPresenter(activity)
210
+ }
211
+ }
212
+ }