react-native-screens 3.32.0 → 3.34.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 (142) hide show
  1. package/README.md +17 -13
  2. package/RNScreens.podspec +10 -52
  3. package/android/CMakeLists.txt +48 -4
  4. package/android/build.gradle +9 -81
  5. package/android/src/fabric/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt +25 -16
  6. package/android/src/fabric/java/com/swmansion/rnscreens/NativeProxy.kt +53 -0
  7. package/android/src/main/cpp/NativeProxy.cpp +51 -0
  8. package/android/src/main/cpp/NativeProxy.h +35 -0
  9. package/android/src/main/cpp/OnLoad.cpp +8 -0
  10. package/android/src/main/java/com/swmansion/rnscreens/CustomSearchView.kt +5 -2
  11. package/android/src/main/java/com/swmansion/rnscreens/CustomToolbar.kt +4 -1
  12. package/android/src/main/java/com/swmansion/rnscreens/FragmentBackPressOverrider.kt +2 -2
  13. package/android/src/main/java/com/swmansion/rnscreens/RNScreensPackage.kt +36 -17
  14. package/android/src/main/java/com/swmansion/rnscreens/Screen.kt +134 -38
  15. package/android/src/main/java/com/swmansion/rnscreens/ScreenContainer.kt +52 -30
  16. package/android/src/main/java/com/swmansion/rnscreens/ScreenContainerViewManager.kt +17 -7
  17. package/android/src/main/java/com/swmansion/rnscreens/ScreenEventDispatcher.kt +10 -2
  18. package/android/src/main/java/com/swmansion/rnscreens/ScreenFragment.kt +56 -27
  19. package/android/src/main/java/com/swmansion/rnscreens/ScreenFragmentWrapper.kt +8 -1
  20. package/android/src/main/java/com/swmansion/rnscreens/ScreenStack.kt +50 -19
  21. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragment.kt +60 -37
  22. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragmentWrapper.kt +4 -0
  23. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfig.kt +85 -58
  24. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigViewManager.kt +128 -37
  25. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubview.kt +19 -4
  26. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubviewManager.kt +16 -10
  27. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackViewManager.kt +28 -25
  28. package/android/src/main/java/com/swmansion/rnscreens/ScreenViewManager.kt +173 -78
  29. package/android/src/main/java/com/swmansion/rnscreens/ScreenWindowTraits.kt +59 -24
  30. package/android/src/main/java/com/swmansion/rnscreens/ScreensModule.kt +30 -8
  31. package/android/src/main/java/com/swmansion/rnscreens/ScreensShadowNode.kt +3 -1
  32. package/android/src/main/java/com/swmansion/rnscreens/SearchBarManager.kt +101 -50
  33. package/android/src/main/java/com/swmansion/rnscreens/SearchBarView.kt +29 -22
  34. package/android/src/main/java/com/swmansion/rnscreens/SearchViewFormatter.kt +7 -2
  35. package/android/src/main/java/com/swmansion/rnscreens/events/HeaderAttachedEvent.kt +4 -1
  36. package/android/src/main/java/com/swmansion/rnscreens/events/HeaderBackButtonClickedEvent.kt +4 -1
  37. package/android/src/main/java/com/swmansion/rnscreens/events/HeaderDetachedEvent.kt +4 -1
  38. package/android/src/main/java/com/swmansion/rnscreens/events/HeaderHeightChangeEvent.kt +5 -5
  39. package/android/src/main/java/com/swmansion/rnscreens/events/ScreenAppearEvent.kt +4 -1
  40. package/android/src/main/java/com/swmansion/rnscreens/events/ScreenDisappearEvent.kt +4 -1
  41. package/android/src/main/java/com/swmansion/rnscreens/events/ScreenDismissedEvent.kt +8 -4
  42. package/android/src/main/java/com/swmansion/rnscreens/events/ScreenTransitionProgressEvent.kt +7 -6
  43. package/android/src/main/java/com/swmansion/rnscreens/events/ScreenWillAppearEvent.kt +4 -1
  44. package/android/src/main/java/com/swmansion/rnscreens/events/ScreenWillDisappearEvent.kt +4 -1
  45. package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarBlurEvent.kt +4 -1
  46. package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarChangeTextEvent.kt +4 -3
  47. package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarCloseEvent.kt +4 -1
  48. package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarFocusEvent.kt +4 -1
  49. package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarOpenEvent.kt +4 -1
  50. package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarSearchButtonPressEvent.kt +9 -4
  51. package/android/src/main/java/com/swmansion/rnscreens/events/StackFinishTransitioningEvent.kt +4 -1
  52. package/android/src/main/java/com/swmansion/rnscreens/utils/DeviceUtils.kt +1 -5
  53. package/android/src/main/java/com/swmansion/rnscreens/utils/ScreenDummyLayoutHelper.kt +245 -0
  54. package/android/src/main/jni/CMakeLists.txt +5 -4
  55. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerDelegate.java +3 -0
  56. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerInterface.java +1 -0
  57. package/android/src/paper/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt +10 -5
  58. package/android/src/paper/java/com/swmansion/rnscreens/NativeProxy.kt +19 -0
  59. package/android/src/paper/java/com/swmansion/rnscreens/NativeScreensModuleSpec.java +4 -0
  60. package/common/cpp/react/renderer/components/rnscreens/FrameCorrectionModes.h +51 -0
  61. package/common/cpp/react/renderer/components/rnscreens/RNSModalScreenShadowNode.cpp +2 -1
  62. package/common/cpp/react/renderer/components/rnscreens/RNSModalScreenShadowNode.h +1 -1
  63. package/common/cpp/react/renderer/components/rnscreens/RNSScreenComponentDescriptor.h +140 -1
  64. package/common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.cpp +51 -1
  65. package/common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.h +23 -1
  66. package/common/cpp/react/renderer/components/rnscreens/RNSScreenState.cpp +20 -0
  67. package/common/cpp/react/renderer/components/rnscreens/RNSScreenState.h +23 -1
  68. package/common/cpp/react/renderer/components/rnscreens/utils/RectUtil.h +36 -0
  69. package/cpp/RNSScreenRemovalListener.cpp +25 -0
  70. package/cpp/RNSScreenRemovalListener.h +20 -0
  71. package/ios/RNSConvert.h +1 -0
  72. package/ios/RNSModalScreen.mm +22 -0
  73. package/ios/RNSModule.mm +1 -1
  74. package/ios/RNSScreen.h +2 -1
  75. package/ios/RNSScreen.mm +27 -19
  76. package/ios/RNSScreenStack.mm +24 -77
  77. package/ios/RNSScreenStackAnimator.mm +43 -6
  78. package/ios/RNSScreenStackHeaderConfig.mm +49 -11
  79. package/ios/RNSScreenStackHeaderSubview.mm +8 -0
  80. package/ios/utils/UIView+RNSUtility.h +23 -0
  81. package/ios/utils/UIView+RNSUtility.mm +55 -0
  82. package/lib/commonjs/components/ScreenStack.js +8 -1
  83. package/lib/commonjs/components/ScreenStack.js.map +1 -1
  84. package/lib/commonjs/fabric/ModalScreenNativeComponent.js.map +1 -1
  85. package/lib/commonjs/fabric/ScreenNativeComponent.js.map +1 -1
  86. package/lib/commonjs/native-stack/views/NativeStackView.js +2 -0
  87. package/lib/commonjs/native-stack/views/NativeStackView.js.map +1 -1
  88. package/lib/module/components/ScreenStack.js +8 -1
  89. package/lib/module/components/ScreenStack.js.map +1 -1
  90. package/lib/module/fabric/ModalScreenNativeComponent.js.map +1 -1
  91. package/lib/module/fabric/ScreenNativeComponent.js.map +1 -1
  92. package/lib/module/native-stack/views/NativeStackView.js +2 -0
  93. package/lib/module/native-stack/views/NativeStackView.js.map +1 -1
  94. package/lib/typescript/components/ScreenStack.d.ts.map +1 -1
  95. package/lib/typescript/fabric/ModalScreenNativeComponent.d.ts +1 -0
  96. package/lib/typescript/fabric/ModalScreenNativeComponent.d.ts.map +1 -1
  97. package/lib/typescript/fabric/ScreenNativeComponent.d.ts +1 -0
  98. package/lib/typescript/fabric/ScreenNativeComponent.d.ts.map +1 -1
  99. package/lib/typescript/native-stack/types.d.ts +10 -0
  100. package/lib/typescript/native-stack/types.d.ts.map +1 -1
  101. package/lib/typescript/native-stack/views/NativeStackView.d.ts.map +1 -1
  102. package/lib/typescript/types.d.ts +10 -0
  103. package/lib/typescript/types.d.ts.map +1 -1
  104. package/native-stack/README.md +110 -99
  105. package/package.json +6 -3
  106. package/react-native.config.js +17 -15
  107. package/src/TransitionProgressContext.tsx +1 -1
  108. package/src/components/Screen.tsx +4 -4
  109. package/src/components/ScreenStack.tsx +11 -1
  110. package/src/components/ScreenStackHeaderConfig.tsx +5 -5
  111. package/src/components/ScreenStackHeaderConfig.web.tsx +6 -6
  112. package/src/components/SearchBar.tsx +4 -4
  113. package/src/core.ts +1 -1
  114. package/src/fabric/ModalScreenNativeComponent.ts +1 -0
  115. package/src/fabric/ScreenNativeComponent.ts +1 -0
  116. package/src/fabric/ScreenNavigationContainerNativeComponent.ts +1 -1
  117. package/src/fabric/ScreenStackHeaderConfigNativeComponent.ts +1 -1
  118. package/src/fabric/ScreenStackHeaderSubviewNativeComponent.ts +1 -1
  119. package/src/fabric/SearchBarNativeComponent.ts +1 -1
  120. package/src/gesture-handler/ScreenGestureDetector.tsx +5 -5
  121. package/src/gesture-handler/constraints.ts +5 -5
  122. package/src/gesture-handler/fabricUtils.ts +1 -1
  123. package/src/native-stack/contexts/GHContext.tsx +1 -1
  124. package/src/native-stack/navigators/createNativeStackNavigator.tsx +3 -3
  125. package/src/native-stack/types.tsx +14 -4
  126. package/src/native-stack/utils/getDefaultHeaderHeight.tsx +1 -1
  127. package/src/native-stack/utils/getStatusBarHeight.tsx +1 -1
  128. package/src/native-stack/utils/useAnimatedHeaderHeight.tsx +1 -1
  129. package/src/native-stack/utils/useBackPressSubscription.tsx +1 -1
  130. package/src/native-stack/utils/useHeaderHeight.tsx +1 -1
  131. package/src/native-stack/views/FontProcessor.tsx +1 -1
  132. package/src/native-stack/views/HeaderConfig.tsx +1 -1
  133. package/src/native-stack/views/NativeStackView.tsx +11 -9
  134. package/src/reanimated/ReanimatedHeaderHeightContext.tsx +1 -1
  135. package/src/reanimated/ReanimatedNativeStackScreen.tsx +5 -5
  136. package/src/reanimated/ReanimatedScreen.tsx +2 -2
  137. package/src/reanimated/ReanimatedScreenProvider.tsx +1 -1
  138. package/src/reanimated/useReanimatedHeaderHeight.tsx +1 -1
  139. package/src/reanimated/useReanimatedTransitionProgress.tsx +1 -1
  140. package/src/types.tsx +15 -5
  141. package/src/useTransitionProgress.tsx +1 -1
  142. package/windows/README.md +4 -1
@@ -1,7 +1,6 @@
1
1
  package com.swmansion.rnscreens
2
2
 
3
3
  import android.view.View
4
- import android.view.ViewGroup
5
4
  import com.facebook.react.bridge.ReactApplicationContext
6
5
  import com.facebook.react.module.annotations.ReactModule
7
6
  import com.facebook.react.uimanager.LayoutShadowNode
@@ -13,7 +12,9 @@ import com.facebook.react.viewmanagers.RNSScreenStackManagerInterface
13
12
  import com.swmansion.rnscreens.events.StackFinishTransitioningEvent
14
13
 
15
14
  @ReactModule(name = ScreenStackViewManager.REACT_CLASS)
16
- class ScreenStackViewManager : ViewGroupManager<ScreenStack>(), RNSScreenStackManagerInterface<ScreenStack> {
15
+ class ScreenStackViewManager :
16
+ ViewGroupManager<ScreenStack>(),
17
+ RNSScreenStackManagerInterface<ScreenStack> {
17
18
  private val delegate: ViewManagerDelegate<ScreenStack>
18
19
 
19
20
  init {
@@ -24,40 +25,41 @@ class ScreenStackViewManager : ViewGroupManager<ScreenStack>(), RNSScreenStackMa
24
25
 
25
26
  override fun createViewInstance(reactContext: ThemedReactContext) = ScreenStack(reactContext)
26
27
 
27
- override fun addView(parent: ScreenStack, child: View, index: Int) {
28
+ override fun addView(
29
+ parent: ScreenStack,
30
+ child: View,
31
+ index: Int,
32
+ ) {
28
33
  require(child is Screen) { "Attempt attach child that is not of type RNScreen" }
34
+ NativeProxy.addScreenToMap(child.id, child)
29
35
  parent.addScreen(child, index)
30
36
  }
31
37
 
32
- override fun removeViewAt(parent: ScreenStack, index: Int) {
33
- prepareOutTransition(parent.getScreenAt(index))
38
+ override fun removeViewAt(
39
+ parent: ScreenStack,
40
+ index: Int,
41
+ ) {
42
+ val screen = parent.getScreenAt(index)
43
+ prepareOutTransition(screen)
34
44
  parent.removeScreenAt(index)
45
+ NativeProxy.removeScreenFromMap(screen.id)
35
46
  }
36
47
 
37
48
  private fun prepareOutTransition(screen: Screen?) {
38
- startTransitionRecursive(screen)
49
+ screen?.startRemovalTransition()
39
50
  }
40
51
 
41
- private fun startTransitionRecursive(parent: ViewGroup?) {
42
- parent?.let {
43
- for (i in 0 until it.childCount) {
44
- val child = it.getChildAt(i)
45
- child?.let { view -> it.startViewTransition(view) }
46
- if (child is ScreenStackHeaderConfig) {
47
- // we want to start transition on children of the toolbar too,
48
- // which is not a child of ScreenStackHeaderConfig
49
- startTransitionRecursive(child.toolbar)
50
- }
51
- if (child is ViewGroup) {
52
- startTransitionRecursive(child)
53
- }
54
- }
55
- }
52
+ override fun invalidate() {
53
+ super.invalidate()
54
+ NativeProxy.clearMapOnInvalidate()
56
55
  }
57
56
 
58
57
  override fun getChildCount(parent: ScreenStack) = parent.screenCount
59
58
 
60
- override fun getChildAt(parent: ScreenStack, index: Int): View = parent.getScreenAt(index)
59
+ override fun getChildAt(
60
+ parent: ScreenStack,
61
+ index: Int,
62
+ ): View = parent.getScreenAt(index)
61
63
 
62
64
  override fun createShadowNodeInstance(context: ReactApplicationContext): LayoutShadowNode = ScreensShadowNode(context)
63
65
 
@@ -65,9 +67,10 @@ class ScreenStackViewManager : ViewGroupManager<ScreenStack>(), RNSScreenStackMa
65
67
 
66
68
  protected override fun getDelegate(): ViewManagerDelegate<ScreenStack> = delegate
67
69
 
68
- override fun getExportedCustomDirectEventTypeConstants(): MutableMap<String, Any> = mutableMapOf(
69
- StackFinishTransitioningEvent.EVENT_NAME to mutableMapOf("registrationName" to "onFinishTransitioning")
70
- )
70
+ override fun getExportedCustomDirectEventTypeConstants(): MutableMap<String, Any> =
71
+ mutableMapOf(
72
+ StackFinishTransitioningEvent.EVENT_NAME to mutableMapOf("registrationName" to "onFinishTransitioning"),
73
+ )
71
74
 
72
75
  companion object {
73
76
  const val REACT_CLASS = "RNSScreenStack"
@@ -22,7 +22,9 @@ import com.swmansion.rnscreens.events.ScreenWillAppearEvent
22
22
  import com.swmansion.rnscreens.events.ScreenWillDisappearEvent
23
23
 
24
24
  @ReactModule(name = ScreenViewManager.REACT_CLASS)
25
- open class ScreenViewManager : ViewGroupManager<Screen>(), RNSScreenManagerInterface<Screen> {
25
+ open class ScreenViewManager :
26
+ ViewGroupManager<Screen>(),
27
+ RNSScreenManagerInterface<Screen> {
26
28
  private val delegate: ViewManagerDelegate<Screen>
27
29
 
28
30
  init {
@@ -33,24 +35,30 @@ open class ScreenViewManager : ViewGroupManager<Screen>(), RNSScreenManagerInter
33
35
 
34
36
  override fun createViewInstance(reactContext: ThemedReactContext) = Screen(reactContext)
35
37
 
36
- override fun setActivityState(view: Screen, activityState: Float) {
38
+ override fun setActivityState(
39
+ view: Screen,
40
+ activityState: Float,
41
+ ) {
37
42
  setActivityState(view, activityState.toInt())
38
43
  }
39
44
 
40
45
  override fun updateState(
41
46
  view: Screen,
42
47
  props: ReactStylesDiffMap?,
43
- stateWrapper: StateWrapper?
48
+ stateWrapper: StateWrapper?,
44
49
  ): Any? {
45
50
  if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
46
51
  // fabricViewStateManager should never be null in Fabric. The null check is only for Paper's empty impl.
47
- view.fabricViewStateManager?.setStateWrapper(stateWrapper)
52
+ view.setStateWrapper(stateWrapper)
48
53
  }
49
54
  return super.updateState(view, props, stateWrapper)
50
55
  }
51
56
 
52
57
  @ReactProp(name = "activityState")
53
- fun setActivityState(view: Screen, activityState: Int) {
58
+ fun setActivityState(
59
+ view: Screen,
60
+ activityState: Int,
61
+ ) {
54
62
  if (activityState == -1) {
55
63
  // Null will be provided when activityState is set as an animated value and we change
56
64
  // it from JS to be a plain value (non animated).
@@ -66,137 +74,224 @@ open class ScreenViewManager : ViewGroupManager<Screen>(), RNSScreenManagerInter
66
74
  }
67
75
 
68
76
  @ReactProp(name = "stackPresentation")
69
- override fun setStackPresentation(view: Screen, presentation: String?) {
70
- view.stackPresentation = when (presentation) {
71
- "push" -> Screen.StackPresentation.PUSH
72
- "modal", "containedModal", "fullScreenModal", "formSheet" ->
73
- Screen.StackPresentation.MODAL
74
- "transparentModal", "containedTransparentModal" ->
75
- Screen.StackPresentation.TRANSPARENT_MODAL
76
- else -> throw JSApplicationIllegalArgumentException("Unknown presentation type $presentation")
77
- }
77
+ override fun setStackPresentation(
78
+ view: Screen,
79
+ presentation: String?,
80
+ ) {
81
+ view.stackPresentation =
82
+ when (presentation) {
83
+ "push" -> Screen.StackPresentation.PUSH
84
+ "modal", "containedModal", "fullScreenModal", "formSheet" ->
85
+ Screen.StackPresentation.MODAL
86
+ "transparentModal", "containedTransparentModal" ->
87
+ Screen.StackPresentation.TRANSPARENT_MODAL
88
+ else -> throw JSApplicationIllegalArgumentException("Unknown presentation type $presentation")
89
+ }
78
90
  }
79
91
 
80
92
  @ReactProp(name = "stackAnimation")
81
- override fun setStackAnimation(view: Screen, animation: String?) {
82
- view.stackAnimation = when (animation) {
83
- null, "default", "flip", "simple_push" -> Screen.StackAnimation.DEFAULT
84
- "none" -> Screen.StackAnimation.NONE
85
- "fade" -> Screen.StackAnimation.FADE
86
- "slide_from_right" -> Screen.StackAnimation.SLIDE_FROM_RIGHT
87
- "slide_from_left" -> Screen.StackAnimation.SLIDE_FROM_LEFT
88
- "slide_from_bottom" -> Screen.StackAnimation.SLIDE_FROM_BOTTOM
89
- "fade_from_bottom" -> Screen.StackAnimation.FADE_FROM_BOTTOM
90
- "ios" -> Screen.StackAnimation.IOS
91
- else -> throw JSApplicationIllegalArgumentException("Unknown animation type $animation")
92
- }
93
+ override fun setStackAnimation(
94
+ view: Screen,
95
+ animation: String?,
96
+ ) {
97
+ view.stackAnimation =
98
+ when (animation) {
99
+ null, "default", "flip", "simple_push" -> Screen.StackAnimation.DEFAULT
100
+ "none" -> Screen.StackAnimation.NONE
101
+ "fade" -> Screen.StackAnimation.FADE
102
+ "slide_from_right" -> Screen.StackAnimation.SLIDE_FROM_RIGHT
103
+ "slide_from_left" -> Screen.StackAnimation.SLIDE_FROM_LEFT
104
+ "slide_from_bottom" -> Screen.StackAnimation.SLIDE_FROM_BOTTOM
105
+ "fade_from_bottom" -> Screen.StackAnimation.FADE_FROM_BOTTOM
106
+ "ios" -> Screen.StackAnimation.IOS
107
+ else -> throw JSApplicationIllegalArgumentException("Unknown animation type $animation")
108
+ }
93
109
  }
94
110
 
95
111
  @ReactProp(name = "gestureEnabled", defaultBoolean = true)
96
- override fun setGestureEnabled(view: Screen, gestureEnabled: Boolean) {
112
+ override fun setGestureEnabled(
113
+ view: Screen,
114
+ gestureEnabled: Boolean,
115
+ ) {
97
116
  view.isGestureEnabled = gestureEnabled
98
117
  }
99
118
 
100
119
  @ReactProp(name = "replaceAnimation")
101
- override fun setReplaceAnimation(view: Screen, animation: String?) {
102
- view.replaceAnimation = when (animation) {
103
- null, "pop" -> Screen.ReplaceAnimation.POP
104
- "push" -> Screen.ReplaceAnimation.PUSH
105
- else -> throw JSApplicationIllegalArgumentException("Unknown replace animation type $animation")
106
- }
120
+ override fun setReplaceAnimation(
121
+ view: Screen,
122
+ animation: String?,
123
+ ) {
124
+ view.replaceAnimation =
125
+ when (animation) {
126
+ null, "pop" -> Screen.ReplaceAnimation.POP
127
+ "push" -> Screen.ReplaceAnimation.PUSH
128
+ else -> throw JSApplicationIllegalArgumentException("Unknown replace animation type $animation")
129
+ }
107
130
  }
108
131
 
109
132
  @ReactProp(name = "screenOrientation")
110
- override fun setScreenOrientation(view: Screen, screenOrientation: String?) {
133
+ override fun setScreenOrientation(
134
+ view: Screen,
135
+ screenOrientation: String?,
136
+ ) {
111
137
  view.setScreenOrientation(screenOrientation)
112
138
  }
113
139
 
114
140
  @ReactProp(name = "statusBarAnimation")
115
- override fun setStatusBarAnimation(view: Screen, statusBarAnimation: String?) {
141
+ override fun setStatusBarAnimation(
142
+ view: Screen,
143
+ statusBarAnimation: String?,
144
+ ) {
116
145
  val animated = statusBarAnimation != null && "none" != statusBarAnimation
117
146
  view.isStatusBarAnimated = animated
118
147
  }
119
148
 
120
149
  @ReactProp(name = "statusBarColor", customType = "Color")
121
- override fun setStatusBarColor(view: Screen, statusBarColor: Int?) {
150
+ override fun setStatusBarColor(
151
+ view: Screen,
152
+ statusBarColor: Int?,
153
+ ) {
122
154
  view.statusBarColor = statusBarColor
123
155
  }
124
156
 
125
157
  @ReactProp(name = "statusBarStyle")
126
- override fun setStatusBarStyle(view: Screen, statusBarStyle: String?) {
158
+ override fun setStatusBarStyle(
159
+ view: Screen,
160
+ statusBarStyle: String?,
161
+ ) {
127
162
  view.statusBarStyle = statusBarStyle
128
163
  }
129
164
 
130
165
  @ReactProp(name = "statusBarTranslucent")
131
- override fun setStatusBarTranslucent(view: Screen, statusBarTranslucent: Boolean) {
166
+ override fun setStatusBarTranslucent(
167
+ view: Screen,
168
+ statusBarTranslucent: Boolean,
169
+ ) {
132
170
  view.isStatusBarTranslucent = statusBarTranslucent
133
171
  }
134
172
 
135
173
  @ReactProp(name = "statusBarHidden")
136
- override fun setStatusBarHidden(view: Screen, statusBarHidden: Boolean) {
174
+ override fun setStatusBarHidden(
175
+ view: Screen,
176
+ statusBarHidden: Boolean,
177
+ ) {
137
178
  view.isStatusBarHidden = statusBarHidden
138
179
  }
139
180
 
140
181
  @ReactProp(name = "navigationBarColor", customType = "Color")
141
- override fun setNavigationBarColor(view: Screen, navigationBarColor: Int?) {
182
+ override fun setNavigationBarColor(
183
+ view: Screen,
184
+ navigationBarColor: Int?,
185
+ ) {
142
186
  view.navigationBarColor = navigationBarColor
143
187
  }
144
188
 
145
189
  @ReactProp(name = "navigationBarTranslucent")
146
- override fun setNavigationBarTranslucent(view: Screen, navigationBarTranslucent: Boolean) {
190
+ override fun setNavigationBarTranslucent(
191
+ view: Screen,
192
+ navigationBarTranslucent: Boolean,
193
+ ) {
147
194
  view.isNavigationBarTranslucent = navigationBarTranslucent
148
195
  }
149
196
 
150
197
  @ReactProp(name = "navigationBarHidden")
151
- override fun setNavigationBarHidden(view: Screen, navigationBarHidden: Boolean) {
198
+ override fun setNavigationBarHidden(
199
+ view: Screen,
200
+ navigationBarHidden: Boolean,
201
+ ) {
152
202
  view.isNavigationBarHidden = navigationBarHidden
153
203
  }
154
204
 
155
205
  @ReactProp(name = "nativeBackButtonDismissalEnabled")
156
206
  override fun setNativeBackButtonDismissalEnabled(
157
207
  view: Screen,
158
- nativeBackButtonDismissalEnabled: Boolean
208
+ nativeBackButtonDismissalEnabled: Boolean,
159
209
  ) {
160
210
  view.nativeBackButtonDismissalEnabled = nativeBackButtonDismissalEnabled
161
211
  }
162
212
 
163
213
  // these props are not available on Android, however we must override their setters
164
- override fun setFullScreenSwipeEnabled(view: Screen?, value: Boolean) = Unit
165
-
166
- override fun setTransitionDuration(view: Screen?, value: Int) = Unit
167
-
168
- override fun setHideKeyboardOnSwipe(view: Screen?, value: Boolean) = Unit
169
-
170
- override fun setCustomAnimationOnSwipe(view: Screen?, value: Boolean) = Unit
171
-
172
- override fun setGestureResponseDistance(view: Screen?, value: ReadableMap?) = Unit
173
-
174
- override fun setHomeIndicatorHidden(view: Screen?, value: Boolean) = Unit
175
-
176
- override fun setPreventNativeDismiss(view: Screen?, value: Boolean) = Unit
177
-
178
- override fun setSwipeDirection(view: Screen?, value: String?) = Unit
179
-
180
- override fun setSheetAllowedDetents(view: Screen, value: String?) = Unit
181
-
182
- override fun setSheetLargestUndimmedDetent(view: Screen, value: String?) = Unit
183
-
184
- override fun setSheetGrabberVisible(view: Screen?, value: Boolean) = Unit
185
-
186
- override fun setSheetCornerRadius(view: Screen?, value: Float) = Unit
187
-
188
- override fun setSheetExpandsWhenScrolledToEdge(view: Screen?, value: Boolean) = Unit
214
+ override fun setFullScreenSwipeEnabled(
215
+ view: Screen?,
216
+ value: Boolean,
217
+ ) = Unit
218
+
219
+ override fun setFullScreenSwipeShadowEnabled(
220
+ view: Screen?,
221
+ value: Boolean,
222
+ ) = Unit
223
+
224
+ override fun setTransitionDuration(
225
+ view: Screen?,
226
+ value: Int,
227
+ ) = Unit
228
+
229
+ override fun setHideKeyboardOnSwipe(
230
+ view: Screen?,
231
+ value: Boolean,
232
+ ) = Unit
233
+
234
+ override fun setCustomAnimationOnSwipe(
235
+ view: Screen?,
236
+ value: Boolean,
237
+ ) = Unit
238
+
239
+ override fun setGestureResponseDistance(
240
+ view: Screen?,
241
+ value: ReadableMap?,
242
+ ) = Unit
243
+
244
+ override fun setHomeIndicatorHidden(
245
+ view: Screen?,
246
+ value: Boolean,
247
+ ) = Unit
248
+
249
+ override fun setPreventNativeDismiss(
250
+ view: Screen?,
251
+ value: Boolean,
252
+ ) = Unit
253
+
254
+ override fun setSwipeDirection(
255
+ view: Screen?,
256
+ value: String?,
257
+ ) = Unit
258
+
259
+ override fun setSheetAllowedDetents(
260
+ view: Screen,
261
+ value: String?,
262
+ ) = Unit
189
263
 
190
- override fun getExportedCustomDirectEventTypeConstants(): MutableMap<String, Any> = mutableMapOf(
191
- ScreenDismissedEvent.EVENT_NAME to MapBuilder.of("registrationName", "onDismissed"),
192
- ScreenWillAppearEvent.EVENT_NAME to MapBuilder.of("registrationName", "onWillAppear"),
193
- ScreenAppearEvent.EVENT_NAME to MapBuilder.of("registrationName", "onAppear"),
194
- ScreenWillDisappearEvent.EVENT_NAME to MapBuilder.of("registrationName", "onWillDisappear"),
195
- ScreenDisappearEvent.EVENT_NAME to MapBuilder.of("registrationName", "onDisappear"),
196
- HeaderHeightChangeEvent.EVENT_NAME to MapBuilder.of("registrationName", "onHeaderHeightChange"),
197
- HeaderBackButtonClickedEvent.EVENT_NAME to MapBuilder.of("registrationName", "onHeaderBackButtonClicked"),
198
- ScreenTransitionProgressEvent.EVENT_NAME to MapBuilder.of("registrationName", "onTransitionProgress")
199
- )
264
+ override fun setSheetLargestUndimmedDetent(
265
+ view: Screen,
266
+ value: String?,
267
+ ) = Unit
268
+
269
+ override fun setSheetGrabberVisible(
270
+ view: Screen?,
271
+ value: Boolean,
272
+ ) = Unit
273
+
274
+ override fun setSheetCornerRadius(
275
+ view: Screen?,
276
+ value: Float,
277
+ ) = Unit
278
+
279
+ override fun setSheetExpandsWhenScrolledToEdge(
280
+ view: Screen?,
281
+ value: Boolean,
282
+ ) = Unit
283
+
284
+ override fun getExportedCustomDirectEventTypeConstants(): MutableMap<String, Any> =
285
+ mutableMapOf(
286
+ ScreenDismissedEvent.EVENT_NAME to MapBuilder.of("registrationName", "onDismissed"),
287
+ ScreenWillAppearEvent.EVENT_NAME to MapBuilder.of("registrationName", "onWillAppear"),
288
+ ScreenAppearEvent.EVENT_NAME to MapBuilder.of("registrationName", "onAppear"),
289
+ ScreenWillDisappearEvent.EVENT_NAME to MapBuilder.of("registrationName", "onWillDisappear"),
290
+ ScreenDisappearEvent.EVENT_NAME to MapBuilder.of("registrationName", "onDisappear"),
291
+ HeaderHeightChangeEvent.EVENT_NAME to MapBuilder.of("registrationName", "onHeaderHeightChange"),
292
+ HeaderBackButtonClickedEvent.EVENT_NAME to MapBuilder.of("registrationName", "onHeaderBackButtonClicked"),
293
+ ScreenTransitionProgressEvent.EVENT_NAME to MapBuilder.of("registrationName", "onTransitionProgress"),
294
+ )
200
295
 
201
296
  protected override fun getDelegate(): ViewManagerDelegate<Screen> = delegate
202
297
 
@@ -2,7 +2,6 @@ package com.swmansion.rnscreens
2
2
 
3
3
  import android.animation.ArgbEvaluator
4
4
  import android.animation.ValueAnimator
5
- import android.annotation.SuppressLint
6
5
  import android.annotation.TargetApi
7
6
  import android.app.Activity
8
7
  import android.content.pm.ActivityInfo
@@ -39,7 +38,10 @@ object ScreenWindowTraits {
39
38
  didSetNavigationBarAppearance = true
40
39
  }
41
40
 
42
- internal fun setOrientation(screen: Screen, activity: Activity?) {
41
+ internal fun setOrientation(
42
+ screen: Screen,
43
+ activity: Activity?,
44
+ ) {
43
45
  if (activity == null) {
44
46
  return
45
47
  }
@@ -48,7 +50,11 @@ object ScreenWindowTraits {
48
50
  activity.requestedOrientation = orientation
49
51
  }
50
52
 
51
- internal fun setColor(screen: Screen, activity: Activity?, context: ReactContext?) {
53
+ internal fun setColor(
54
+ screen: Screen,
55
+ activity: Activity?,
56
+ context: ReactContext?,
57
+ ) {
52
58
  if (activity == null || context == null) {
53
59
  return
54
60
  }
@@ -76,10 +82,15 @@ object ScreenWindowTraits {
76
82
  }
77
83
  colorAnimation.start()
78
84
  }
79
- })
85
+ },
86
+ )
80
87
  }
81
88
 
82
- internal fun setStyle(screen: Screen, activity: Activity?, context: ReactContext?) {
89
+ internal fun setStyle(
90
+ screen: Screen,
91
+ activity: Activity?,
92
+ context: ReactContext?,
93
+ ) {
83
94
  if (activity == null || context == null || Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
84
95
  return
85
96
  }
@@ -98,7 +109,7 @@ object ScreenWindowTraits {
98
109
  internal fun setTranslucent(
99
110
  screen: Screen,
100
111
  activity: Activity?,
101
- context: ReactContext?
112
+ context: ReactContext?,
102
113
  ) {
103
114
  if (activity == null || context == null) {
104
115
  return
@@ -128,16 +139,15 @@ object ScreenWindowTraits {
128
139
  windowInsets.left,
129
140
  0,
130
141
  windowInsets.right,
131
- windowInsets.bottom
132
- )
133
- )
134
- .build()
142
+ windowInsets.bottom,
143
+ ),
144
+ ).build()
135
145
  } else {
136
146
  defaultInsets.replaceSystemWindowInsets(
137
147
  defaultInsets.systemWindowInsetLeft,
138
148
  0,
139
149
  defaultInsets.systemWindowInsetRight,
140
- defaultInsets.systemWindowInsetBottom
150
+ defaultInsets.systemWindowInsetBottom,
141
151
  )
142
152
  }
143
153
  }
@@ -146,10 +156,14 @@ object ScreenWindowTraits {
146
156
  }
147
157
  ViewCompat.requestApplyInsets(decorView)
148
158
  }
149
- })
159
+ },
160
+ )
150
161
  }
151
162
 
152
- internal fun setHidden(screen: Screen, activity: Activity?) {
163
+ internal fun setHidden(
164
+ screen: Screen,
165
+ activity: Activity?,
166
+ ) {
153
167
  if (activity == null) {
154
168
  return
155
169
  }
@@ -169,7 +183,10 @@ object ScreenWindowTraits {
169
183
 
170
184
  // Methods concerning navigationBar management were taken from `react-native-navigation`'s repo:
171
185
  // https://github.com/wix/react-native-navigation/blob/9bb70d81700692141a2c505c081c2d86c7f9c66e/lib/android/app/src/main/java/com/reactnativenavigation/utils/SystemUiUtils.kt
172
- internal fun setNavigationBarColor(screen: Screen, activity: Activity?) {
186
+ internal fun setNavigationBarColor(
187
+ screen: Screen,
188
+ activity: Activity?,
189
+ ) {
173
190
  if (activity == null) {
174
191
  return
175
192
  }
@@ -186,7 +203,10 @@ object ScreenWindowTraits {
186
203
  window.navigationBarColor = color
187
204
  }
188
205
 
189
- internal fun setNavigationBarTranslucent(screen: Screen, activity: Activity?) {
206
+ internal fun setNavigationBarTranslucent(
207
+ screen: Screen,
208
+ activity: Activity?,
209
+ ) {
190
210
  if (activity == null) {
191
211
  return
192
212
  }
@@ -200,7 +220,10 @@ object ScreenWindowTraits {
200
220
  WindowCompat.setDecorFitsSystemWindows(window, !translucent)
201
221
  }
202
222
 
203
- internal fun setNavigationBarHidden(screen: Screen, activity: Activity?) {
223
+ internal fun setNavigationBarHidden(
224
+ screen: Screen,
225
+ activity: Activity?,
226
+ ) {
204
227
  if (activity == null) {
205
228
  return
206
229
  }
@@ -219,12 +242,16 @@ object ScreenWindowTraits {
219
242
  } else {
220
243
  WindowInsetsControllerCompat(
221
244
  window,
222
- window.decorView
245
+ window.decorView,
223
246
  ).show(WindowInsetsCompat.Type.navigationBars())
224
247
  }
225
248
  }
226
249
 
227
- internal fun trySetWindowTraits(screen: Screen, activity: Activity?, context: ReactContext?) {
250
+ internal fun trySetWindowTraits(
251
+ screen: Screen,
252
+ activity: Activity?,
253
+ context: ReactContext?,
254
+ ) {
228
255
  if (didSetOrientation) {
229
256
  setOrientation(screen, activity)
230
257
  }
@@ -241,7 +268,10 @@ object ScreenWindowTraits {
241
268
  }
242
269
  }
243
270
 
244
- private fun findScreenForTrait(screen: Screen, trait: WindowTraits): Screen? {
271
+ private fun findScreenForTrait(
272
+ screen: Screen,
273
+ trait: WindowTraits,
274
+ ): Screen? {
245
275
  val childWithTrait = childScreenWithTraitSet(screen, trait)
246
276
  if (childWithTrait != null) {
247
277
  return childWithTrait
@@ -255,7 +285,10 @@ object ScreenWindowTraits {
255
285
  }
256
286
  }
257
287
 
258
- private fun findParentWithTraitSet(screen: Screen, trait: WindowTraits): Screen? {
288
+ private fun findParentWithTraitSet(
289
+ screen: Screen,
290
+ trait: WindowTraits,
291
+ ): Screen? {
259
292
  var parent: ViewParent? = screen.container
260
293
  while (parent != null) {
261
294
  if (parent is Screen) {
@@ -270,7 +303,7 @@ object ScreenWindowTraits {
270
303
 
271
304
  private fun childScreenWithTraitSet(
272
305
  screen: Screen?,
273
- trait: WindowTraits
306
+ trait: WindowTraits,
274
307
  ): Screen? {
275
308
  screen?.fragmentWrapper?.let {
276
309
  for (sc in it.childScreenContainers) {
@@ -288,8 +321,11 @@ object ScreenWindowTraits {
288
321
  return null
289
322
  }
290
323
 
291
- private fun checkTraitForScreen(screen: Screen, trait: WindowTraits): Boolean {
292
- return when (trait) {
324
+ private fun checkTraitForScreen(
325
+ screen: Screen,
326
+ trait: WindowTraits,
327
+ ): Boolean =
328
+ when (trait) {
293
329
  WindowTraits.ORIENTATION -> screen.screenOrientation != null
294
330
  WindowTraits.COLOR -> screen.statusBarColor != null
295
331
  WindowTraits.STYLE -> screen.statusBarStyle != null
@@ -300,7 +336,6 @@ object ScreenWindowTraits {
300
336
  WindowTraits.NAVIGATION_BAR_TRANSLUCENT -> screen.isNavigationBarTranslucent != null
301
337
  WindowTraits.NAVIGATION_BAR_HIDDEN -> screen.isNavigationBarHidden != null
302
338
  }
303
- }
304
339
 
305
340
  private fun isColorLight(color: Int): Boolean {
306
341
  val darkness: Double =