react-native-screens 3.32.0 → 3.33.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +17 -13
- package/RNScreens.podspec +10 -52
- package/android/CMakeLists.txt +48 -4
- package/android/build.gradle +9 -81
- package/android/src/fabric/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt +25 -16
- package/android/src/fabric/java/com/swmansion/rnscreens/NativeProxy.kt +53 -0
- package/android/src/main/cpp/NativeProxy.cpp +51 -0
- package/android/src/main/cpp/NativeProxy.h +35 -0
- package/android/src/main/cpp/OnLoad.cpp +8 -0
- package/android/src/main/java/com/swmansion/rnscreens/CustomSearchView.kt +5 -2
- package/android/src/main/java/com/swmansion/rnscreens/CustomToolbar.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/FragmentBackPressOverrider.kt +2 -2
- package/android/src/main/java/com/swmansion/rnscreens/RNScreensPackage.kt +36 -17
- package/android/src/main/java/com/swmansion/rnscreens/Screen.kt +134 -38
- package/android/src/main/java/com/swmansion/rnscreens/ScreenContainer.kt +52 -30
- package/android/src/main/java/com/swmansion/rnscreens/ScreenContainerViewManager.kt +17 -7
- package/android/src/main/java/com/swmansion/rnscreens/ScreenEventDispatcher.kt +10 -2
- package/android/src/main/java/com/swmansion/rnscreens/ScreenFragment.kt +56 -27
- package/android/src/main/java/com/swmansion/rnscreens/ScreenFragmentWrapper.kt +8 -1
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStack.kt +50 -19
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragment.kt +60 -37
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragmentWrapper.kt +4 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfig.kt +85 -58
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigViewManager.kt +128 -37
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubview.kt +19 -4
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubviewManager.kt +16 -10
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackViewManager.kt +28 -25
- package/android/src/main/java/com/swmansion/rnscreens/ScreenViewManager.kt +173 -78
- package/android/src/main/java/com/swmansion/rnscreens/ScreenWindowTraits.kt +59 -24
- package/android/src/main/java/com/swmansion/rnscreens/ScreensModule.kt +30 -8
- package/android/src/main/java/com/swmansion/rnscreens/ScreensShadowNode.kt +3 -1
- package/android/src/main/java/com/swmansion/rnscreens/SearchBarManager.kt +101 -50
- package/android/src/main/java/com/swmansion/rnscreens/SearchBarView.kt +29 -22
- package/android/src/main/java/com/swmansion/rnscreens/SearchViewFormatter.kt +7 -2
- package/android/src/main/java/com/swmansion/rnscreens/events/HeaderAttachedEvent.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/events/HeaderBackButtonClickedEvent.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/events/HeaderDetachedEvent.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/events/HeaderHeightChangeEvent.kt +5 -5
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenAppearEvent.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenDisappearEvent.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenDismissedEvent.kt +8 -4
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenTransitionProgressEvent.kt +7 -6
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenWillAppearEvent.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenWillDisappearEvent.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarBlurEvent.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarChangeTextEvent.kt +4 -3
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarCloseEvent.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarFocusEvent.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarOpenEvent.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarSearchButtonPressEvent.kt +9 -4
- package/android/src/main/java/com/swmansion/rnscreens/events/StackFinishTransitioningEvent.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/utils/DeviceUtils.kt +1 -5
- package/android/src/main/java/com/swmansion/rnscreens/utils/ScreenDummyLayoutHelper.kt +214 -0
- package/android/src/main/jni/CMakeLists.txt +5 -4
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerDelegate.java +3 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerInterface.java +1 -0
- package/android/src/paper/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt +10 -5
- package/android/src/paper/java/com/swmansion/rnscreens/NativeProxy.kt +19 -0
- package/android/src/paper/java/com/swmansion/rnscreens/NativeScreensModuleSpec.java +4 -0
- package/common/cpp/react/renderer/components/rnscreens/FrameCorrectionModes.h +51 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSModalScreenShadowNode.cpp +2 -1
- package/common/cpp/react/renderer/components/rnscreens/RNSModalScreenShadowNode.h +1 -1
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenComponentDescriptor.h +140 -1
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.cpp +51 -1
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.h +23 -1
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenState.cpp +20 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenState.h +23 -1
- package/common/cpp/react/renderer/components/rnscreens/utils/RectUtil.h +36 -0
- package/cpp/RNSScreenRemovalListener.cpp +25 -0
- package/cpp/RNSScreenRemovalListener.h +20 -0
- package/ios/RNSConvert.h +1 -0
- package/ios/RNSModalScreen.mm +22 -0
- package/ios/RNSModule.mm +1 -1
- package/ios/RNSScreen.h +2 -1
- package/ios/RNSScreen.mm +27 -19
- package/ios/RNSScreenStack.mm +24 -77
- package/ios/RNSScreenStackAnimator.mm +43 -6
- package/ios/RNSScreenStackHeaderConfig.mm +49 -11
- package/ios/RNSScreenStackHeaderSubview.mm +8 -0
- package/ios/utils/UIView+RNSUtility.h +23 -0
- package/ios/utils/UIView+RNSUtility.mm +55 -0
- package/lib/commonjs/components/ScreenStack.js +8 -1
- package/lib/commonjs/components/ScreenStack.js.map +1 -1
- package/lib/commonjs/fabric/ModalScreenNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/ScreenNativeComponent.js.map +1 -1
- package/lib/commonjs/native-stack/views/NativeStackView.js +2 -0
- package/lib/commonjs/native-stack/views/NativeStackView.js.map +1 -1
- package/lib/module/components/ScreenStack.js +8 -1
- package/lib/module/components/ScreenStack.js.map +1 -1
- package/lib/module/fabric/ModalScreenNativeComponent.js.map +1 -1
- package/lib/module/fabric/ScreenNativeComponent.js.map +1 -1
- package/lib/module/native-stack/views/NativeStackView.js +2 -0
- package/lib/module/native-stack/views/NativeStackView.js.map +1 -1
- package/lib/typescript/components/ScreenStack.d.ts.map +1 -1
- package/lib/typescript/fabric/ModalScreenNativeComponent.d.ts +1 -0
- package/lib/typescript/fabric/ModalScreenNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/ScreenNativeComponent.d.ts +1 -0
- package/lib/typescript/fabric/ScreenNativeComponent.d.ts.map +1 -1
- package/lib/typescript/native-stack/types.d.ts +10 -0
- package/lib/typescript/native-stack/types.d.ts.map +1 -1
- package/lib/typescript/native-stack/views/NativeStackView.d.ts.map +1 -1
- package/lib/typescript/types.d.ts +10 -0
- package/lib/typescript/types.d.ts.map +1 -1
- package/native-stack/README.md +110 -99
- package/package.json +6 -3
- package/react-native.config.js +17 -15
- package/src/TransitionProgressContext.tsx +1 -1
- package/src/components/Screen.tsx +4 -4
- package/src/components/ScreenStack.tsx +11 -1
- package/src/components/ScreenStackHeaderConfig.tsx +5 -5
- package/src/components/ScreenStackHeaderConfig.web.tsx +6 -6
- package/src/components/SearchBar.tsx +4 -4
- package/src/core.ts +1 -1
- package/src/fabric/ModalScreenNativeComponent.ts +1 -0
- package/src/fabric/ScreenNativeComponent.ts +1 -0
- package/src/fabric/ScreenNavigationContainerNativeComponent.ts +1 -1
- package/src/fabric/ScreenStackHeaderConfigNativeComponent.ts +1 -1
- package/src/fabric/ScreenStackHeaderSubviewNativeComponent.ts +1 -1
- package/src/fabric/SearchBarNativeComponent.ts +1 -1
- package/src/gesture-handler/ScreenGestureDetector.tsx +5 -5
- package/src/gesture-handler/constraints.ts +5 -5
- package/src/gesture-handler/fabricUtils.ts +1 -1
- package/src/native-stack/contexts/GHContext.tsx +1 -1
- package/src/native-stack/navigators/createNativeStackNavigator.tsx +3 -3
- package/src/native-stack/types.tsx +14 -4
- package/src/native-stack/utils/getDefaultHeaderHeight.tsx +1 -1
- package/src/native-stack/utils/getStatusBarHeight.tsx +1 -1
- package/src/native-stack/utils/useAnimatedHeaderHeight.tsx +1 -1
- package/src/native-stack/utils/useBackPressSubscription.tsx +1 -1
- package/src/native-stack/utils/useHeaderHeight.tsx +1 -1
- package/src/native-stack/views/FontProcessor.tsx +1 -1
- package/src/native-stack/views/HeaderConfig.tsx +1 -1
- package/src/native-stack/views/NativeStackView.tsx +11 -9
- package/src/reanimated/ReanimatedHeaderHeightContext.tsx +1 -1
- package/src/reanimated/ReanimatedNativeStackScreen.tsx +5 -5
- package/src/reanimated/ReanimatedScreen.tsx +2 -2
- package/src/reanimated/ReanimatedScreenProvider.tsx +1 -1
- package/src/reanimated/useReanimatedHeaderHeight.tsx +1 -1
- package/src/reanimated/useReanimatedTransitionProgress.tsx +1 -1
- package/src/types.tsx +15 -5
- package/src/useTransitionProgress.tsx +1 -1
- 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 :
|
|
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(
|
|
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(
|
|
33
|
-
|
|
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
|
-
|
|
49
|
+
screen?.startRemovalTransition()
|
|
39
50
|
}
|
|
40
51
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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(
|
|
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> =
|
|
69
|
-
|
|
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 :
|
|
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(
|
|
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.
|
|
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(
|
|
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(
|
|
70
|
-
view
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
Screen.StackPresentation.
|
|
76
|
-
|
|
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(
|
|
82
|
-
view
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
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(
|
|
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(
|
|
102
|
-
view
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
override fun
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
override fun
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
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
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
292
|
-
|
|
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 =
|