react-native-screens 4.4.0 → 4.6.0-beta.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 +7 -14
- package/android/build.gradle +9 -8
- package/android/src/fabric/java/com/swmansion/rnscreens/FabricEnabledHeaderConfigViewGroup.kt +31 -10
- package/android/src/fabric/java/com/swmansion/rnscreens/FabricEnabledHeaderSubviewViewGroup.kt +51 -0
- package/android/src/main/AndroidManifest.xml +1 -2
- package/android/src/main/java/com/swmansion/rnscreens/CustomToolbar.kt +12 -2
- package/android/src/main/java/com/swmansion/rnscreens/RNScreensPackage.kt +4 -2
- package/android/src/main/java/com/swmansion/rnscreens/Screen.kt +0 -26
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubview.kt +12 -7
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubviewManager.kt +13 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenContainerManagerDelegate.java +3 -2
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenContentWrapperManagerDelegate.java +3 -2
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenFooterManagerDelegate.java +3 -2
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerDelegate.java +3 -2
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderConfigManagerDelegate.java +3 -2
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderSubviewManagerDelegate.java +3 -2
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackManagerDelegate.java +3 -2
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSSearchBarManagerDelegate.java +3 -2
- package/android/src/paper/java/com/swmansion/rnscreens/FabricEnabledHeaderConfigViewGroup.kt +9 -1
- package/android/src/paper/java/com/swmansion/rnscreens/FabricEnabledHeaderSubviewViewGroup.kt +18 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigComponentDescriptor.h +12 -2
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigShadowNode.cpp +12 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigShadowNode.h +4 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigState.cpp +4 -10
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigState.h +15 -9
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderSubviewComponentDescriptor.h +20 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderSubviewShadowNode.cpp +14 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderSubviewShadowNode.h +2 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderSubviewState.cpp +3 -1
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderSubviewState.h +16 -2
- package/ios/RNSScreenStack.mm +11 -7
- package/ios/RNSScreenStackHeaderConfig.h +21 -7
- package/ios/RNSScreenStackHeaderConfig.mm +74 -15
- package/ios/RNSScreenStackHeaderSubview.h +4 -0
- package/ios/RNSScreenStackHeaderSubview.mm +26 -1
- package/lib/commonjs/components/ScreenStackHeaderConfig.js +0 -1
- package/lib/commonjs/components/ScreenStackHeaderConfig.js.map +1 -1
- package/lib/commonjs/gesture-handler/ScreenGestureDetector.js +12 -0
- package/lib/commonjs/gesture-handler/ScreenGestureDetector.js.map +1 -1
- package/lib/commonjs/gesture-handler/defaults.js +1 -2
- package/lib/commonjs/gesture-handler/defaults.js.map +1 -1
- package/lib/module/components/ScreenStackHeaderConfig.js +0 -1
- package/lib/module/components/ScreenStackHeaderConfig.js.map +1 -1
- package/lib/module/gesture-handler/ScreenGestureDetector.js +12 -0
- package/lib/module/gesture-handler/ScreenGestureDetector.js.map +1 -1
- package/lib/module/gesture-handler/defaults.js +1 -2
- package/lib/module/gesture-handler/defaults.js.map +1 -1
- package/lib/typescript/gesture-handler/ScreenGestureDetector.d.ts.map +1 -1
- package/lib/typescript/gesture-handler/defaults.d.ts.map +1 -1
- package/package.json +10 -11
- package/src/components/ScreenStackHeaderConfig.tsx +0 -1
- package/src/gesture-handler/ScreenGestureDetector.tsx +14 -2
- package/src/gesture-handler/defaults.ts +0 -1
package/README.md
CHANGED
|
@@ -106,18 +106,17 @@ Screens are already integrated with the React Native's most popular navigation l
|
|
|
106
106
|
|
|
107
107
|
## Supported react-native version
|
|
108
108
|
|
|
109
|
+
Below we present tables with mapping of the library version to the last supported react-native version. These tables are for the `4.x` line of the library. For compat tables
|
|
110
|
+
of `3.x` line please see consult [readme on the `3.x` branch](https://github.com/software-mansion/react-native-screens/tree/3.x?tab=readme-ov-file#supported-react-native-version).
|
|
111
|
+
|
|
109
112
|
### Support for Paper
|
|
110
113
|
|
|
111
114
|
Paper is the default rendering system for React Native versions prior to 0.76.
|
|
112
115
|
|
|
113
116
|
| library version | react-native version |
|
|
114
117
|
| --------------- | -------------------- |
|
|
115
|
-
|
|
|
116
|
-
|
|
|
117
|
-
| 3.30.0+ | 0.68.0+ |
|
|
118
|
-
| 3.14.0+ | 0.64.0+ |
|
|
119
|
-
| 3.0.0+ | 0.62.0+ |
|
|
120
|
-
| 2.0.0+ | 0.60.0+ |
|
|
118
|
+
| 4.5.0+ | 0.74.0+ |
|
|
119
|
+
| 4.0.0+ | 0.72.0+ |
|
|
121
120
|
|
|
122
121
|
### Support for Fabric
|
|
123
122
|
|
|
@@ -127,14 +126,8 @@ Here's a table with summary of supported `react-native` versions when Fabric is
|
|
|
127
126
|
|
|
128
127
|
| library version | react-native version |
|
|
129
128
|
| --------------- | -------------------- |
|
|
130
|
-
|
|
|
131
|
-
|
|
|
132
|
-
| 3.32.0+ | 0.74.0+ |
|
|
133
|
-
| 3.28.0+ | 0.73.0+ |
|
|
134
|
-
| 3.21.0+ | 0.72.0+ |
|
|
135
|
-
| 3.19.0+ | 0.71.0+ |
|
|
136
|
-
| 3.18.0+ | 0.70.0+ |
|
|
137
|
-
| 3.14.0+ | 0.69.0+ |
|
|
129
|
+
| 4.5.0+ | 0.77.0+ |
|
|
130
|
+
| 4.0.0+ | 0.76.0+ |
|
|
138
131
|
|
|
139
132
|
## Usage with [react-navigation](https://github.com/react-navigation/react-navigation)
|
|
140
133
|
|
package/android/build.gradle
CHANGED
|
@@ -99,13 +99,7 @@ def IS_NEW_ARCHITECTURE_ENABLED = isNewArchitectureEnabled()
|
|
|
99
99
|
|
|
100
100
|
android {
|
|
101
101
|
compileSdkVersion safeExtGet('compileSdkVersion', rnsDefaultCompileSdkVersion)
|
|
102
|
-
|
|
103
|
-
if (agpVersion.tokenize('.')[0].toInteger() >= 7) {
|
|
104
|
-
namespace "com.swmansion.rnscreens"
|
|
105
|
-
buildFeatures {
|
|
106
|
-
buildConfig true
|
|
107
|
-
}
|
|
108
|
-
}
|
|
102
|
+
namespace "com.swmansion.rnscreens"
|
|
109
103
|
|
|
110
104
|
// Used to override the NDK path/version on internal CI or by allowing
|
|
111
105
|
// users to customize the NDK path/version from their root project (e.g. for M1 support)
|
|
@@ -134,6 +128,7 @@ android {
|
|
|
134
128
|
}
|
|
135
129
|
buildFeatures {
|
|
136
130
|
prefab true
|
|
131
|
+
buildConfig true
|
|
137
132
|
}
|
|
138
133
|
externalNativeBuild {
|
|
139
134
|
cmake {
|
|
@@ -159,7 +154,13 @@ android {
|
|
|
159
154
|
"**/libc++_shared.so",
|
|
160
155
|
"**/libreact_render*.so",
|
|
161
156
|
"**/libreactnativejni.so",
|
|
162
|
-
"**/libreact_performance_timeline.so"
|
|
157
|
+
"**/libreact_performance_timeline.so",
|
|
158
|
+
// In 0.76 multiple react-native's libraries were merged and these are the main new artifacts we're using.
|
|
159
|
+
// Some of above lib* names could be removed after we remove support for 0.76.
|
|
160
|
+
// https://github.com/facebook/react-native/pull/43909
|
|
161
|
+
// https://github.com/facebook/react-native/pull/46059
|
|
162
|
+
"**/libfbjni.so",
|
|
163
|
+
"**/libreactnative.so"
|
|
163
164
|
]
|
|
164
165
|
}
|
|
165
166
|
sourceSets.main {
|
package/android/src/fabric/java/com/swmansion/rnscreens/FabricEnabledHeaderConfigViewGroup.kt
CHANGED
|
@@ -14,6 +14,8 @@ abstract class FabricEnabledHeaderConfigViewGroup(
|
|
|
14
14
|
) : ViewGroup(context) {
|
|
15
15
|
private var mStateWrapper: StateWrapper? = null
|
|
16
16
|
|
|
17
|
+
private var lastWidth = 0f
|
|
18
|
+
private var lastHeight = 0f
|
|
17
19
|
private var lastPaddingStart = 0f
|
|
18
20
|
private var lastPaddingEnd = 0f
|
|
19
21
|
|
|
@@ -21,36 +23,55 @@ abstract class FabricEnabledHeaderConfigViewGroup(
|
|
|
21
23
|
mStateWrapper = wrapper
|
|
22
24
|
}
|
|
23
25
|
|
|
24
|
-
fun
|
|
26
|
+
fun updatePaddings(
|
|
25
27
|
paddingStart: Int,
|
|
26
28
|
paddingEnd: Int,
|
|
27
29
|
) {
|
|
28
|
-
|
|
30
|
+
// Do nothing on Fabric. This method is used only on Paper.
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
fun updateHeaderConfigState(
|
|
34
|
+
width: Int,
|
|
35
|
+
height: Int,
|
|
36
|
+
paddingStart: Int,
|
|
37
|
+
paddingEnd: Int,
|
|
38
|
+
) {
|
|
39
|
+
updateState(width, height, paddingStart, paddingEnd)
|
|
29
40
|
}
|
|
30
41
|
|
|
31
42
|
@UiThread
|
|
32
43
|
fun updateState(
|
|
44
|
+
width: Int,
|
|
45
|
+
height: Int,
|
|
33
46
|
paddingStart: Int,
|
|
34
47
|
paddingEnd: Int,
|
|
35
48
|
) {
|
|
36
|
-
val
|
|
37
|
-
val
|
|
49
|
+
val realWidth: Float = PixelUtil.toDIPFromPixel(width.toFloat())
|
|
50
|
+
val realHeight: Float = PixelUtil.toDIPFromPixel(height.toFloat())
|
|
51
|
+
val realPaddingStart: Float = PixelUtil.toDIPFromPixel(paddingStart.toFloat())
|
|
52
|
+
val realPaddingEnd: Float = PixelUtil.toDIPFromPixel(paddingEnd.toFloat())
|
|
38
53
|
|
|
39
54
|
// Check incoming state values. If they're already the correct value, return early to prevent
|
|
40
55
|
// infinite UpdateState/SetState loop.
|
|
41
|
-
if (abs(
|
|
42
|
-
abs(
|
|
56
|
+
if (abs(lastWidth - realWidth) < DELTA &&
|
|
57
|
+
abs(lastHeight - realHeight) < DELTA &&
|
|
58
|
+
abs(lastPaddingStart - realPaddingStart) < DELTA &&
|
|
59
|
+
abs(lastPaddingEnd - realPaddingEnd) < DELTA
|
|
43
60
|
) {
|
|
44
61
|
return
|
|
45
62
|
}
|
|
46
63
|
|
|
47
|
-
|
|
48
|
-
|
|
64
|
+
lastWidth = realWidth
|
|
65
|
+
lastHeight = realHeight
|
|
66
|
+
lastPaddingStart = realPaddingStart
|
|
67
|
+
lastPaddingEnd = realPaddingEnd
|
|
49
68
|
|
|
50
69
|
val map: WritableMap =
|
|
51
70
|
WritableNativeMap().apply {
|
|
52
|
-
putDouble("
|
|
53
|
-
putDouble("
|
|
71
|
+
putDouble("frameWidth", realWidth.toDouble())
|
|
72
|
+
putDouble("frameHeight", realHeight.toDouble())
|
|
73
|
+
putDouble("paddingStart", realPaddingStart.toDouble())
|
|
74
|
+
putDouble("paddingEnd", realPaddingEnd.toDouble())
|
|
54
75
|
}
|
|
55
76
|
mStateWrapper?.updateState(map)
|
|
56
77
|
}
|
package/android/src/fabric/java/com/swmansion/rnscreens/FabricEnabledHeaderSubviewViewGroup.kt
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
package com.swmansion.rnscreens
|
|
2
|
+
|
|
3
|
+
import android.content.Context
|
|
4
|
+
import android.view.ViewGroup
|
|
5
|
+
import androidx.annotation.UiThread
|
|
6
|
+
import com.facebook.react.bridge.WritableMap
|
|
7
|
+
import com.facebook.react.bridge.WritableNativeMap
|
|
8
|
+
import com.facebook.react.uimanager.PixelUtil
|
|
9
|
+
import com.facebook.react.uimanager.StateWrapper
|
|
10
|
+
|
|
11
|
+
abstract class FabricEnabledHeaderSubviewViewGroup(
|
|
12
|
+
context: Context?,
|
|
13
|
+
) : ViewGroup(context) {
|
|
14
|
+
private var mStateWrapper: StateWrapper? = null
|
|
15
|
+
|
|
16
|
+
fun setStateWrapper(wrapper: StateWrapper?) {
|
|
17
|
+
mStateWrapper = wrapper
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
protected fun updateSubviewFrameState(
|
|
21
|
+
width: Int,
|
|
22
|
+
height: Int,
|
|
23
|
+
offsetX: Int,
|
|
24
|
+
offsetY: Int,
|
|
25
|
+
) {
|
|
26
|
+
updateState(width, height, offsetX, offsetY)
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
@UiThread
|
|
30
|
+
fun updateState(
|
|
31
|
+
width: Int,
|
|
32
|
+
height: Int,
|
|
33
|
+
offsetX: Int,
|
|
34
|
+
offsetY: Int,
|
|
35
|
+
) {
|
|
36
|
+
val realWidth: Float = PixelUtil.toDIPFromPixel(width.toFloat())
|
|
37
|
+
val realHeight: Float = PixelUtil.toDIPFromPixel(height.toFloat())
|
|
38
|
+
val offsetXDip: Float = PixelUtil.toDIPFromPixel(offsetX.toFloat())
|
|
39
|
+
val offsetYDip: Float = PixelUtil.toDIPFromPixel(offsetY.toFloat())
|
|
40
|
+
|
|
41
|
+
val map: WritableMap =
|
|
42
|
+
WritableNativeMap().apply {
|
|
43
|
+
putDouble("frameWidth", realWidth.toDouble())
|
|
44
|
+
putDouble("frameHeight", realHeight.toDouble())
|
|
45
|
+
putDouble("contentOffsetX", offsetXDip.toDouble())
|
|
46
|
+
putDouble("contentOffsetY", offsetYDip.toDouble())
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
mStateWrapper?.updateState(map)
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -68,8 +68,18 @@ open class CustomToolbar(
|
|
|
68
68
|
) {
|
|
69
69
|
super.onLayout(changed, l, t, r, b)
|
|
70
70
|
|
|
71
|
-
|
|
71
|
+
if (!changed) {
|
|
72
|
+
return
|
|
73
|
+
}
|
|
74
|
+
|
|
72
75
|
val contentInsetStart = if (navigationIcon != null) contentInsetStartWithNavigation else contentInsetStart
|
|
73
|
-
|
|
76
|
+
if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
|
|
77
|
+
val width = r - l;
|
|
78
|
+
val height = b - t;
|
|
79
|
+
config.updateHeaderConfigState(width, height, contentInsetStart, contentInsetEnd)
|
|
80
|
+
} else {
|
|
81
|
+
// our children are already laid out
|
|
82
|
+
config.updatePaddings(contentInsetStart, contentInsetEnd)
|
|
83
|
+
}
|
|
74
84
|
}
|
|
75
85
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
package com.swmansion.rnscreens
|
|
2
2
|
|
|
3
|
-
import com.facebook.react.
|
|
3
|
+
import com.facebook.react.BaseReactPackage
|
|
4
4
|
import com.facebook.react.bridge.NativeModule
|
|
5
5
|
import com.facebook.react.bridge.ReactApplicationContext
|
|
6
6
|
import com.facebook.react.module.annotations.ReactModuleList
|
|
@@ -9,12 +9,14 @@ import com.facebook.react.module.model.ReactModuleInfoProvider
|
|
|
9
9
|
import com.facebook.react.uimanager.ViewManager
|
|
10
10
|
import com.swmansion.rnscreens.utils.ScreenDummyLayoutHelper
|
|
11
11
|
|
|
12
|
+
// Fool autolinking for older versions that do not support BaseReactPackage.
|
|
13
|
+
// public class RNScreensPackage implements TurboReactPackage {
|
|
12
14
|
@ReactModuleList(
|
|
13
15
|
nativeModules = [
|
|
14
16
|
ScreensModule::class,
|
|
15
17
|
],
|
|
16
18
|
)
|
|
17
|
-
class RNScreensPackage :
|
|
19
|
+
class RNScreensPackage : BaseReactPackage() {
|
|
18
20
|
// We just retain it here. This object helps us tackle jumping content when using native header.
|
|
19
21
|
// See: https://github.com/software-mansion/react-native-screens/pull/2169
|
|
20
22
|
private var screenDummyLayoutHelper: ScreenDummyLayoutHelper? = null
|
|
@@ -17,12 +17,9 @@ import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
|
|
17
17
|
import com.facebook.react.bridge.GuardedRunnable
|
|
18
18
|
import com.facebook.react.bridge.ReactContext
|
|
19
19
|
import com.facebook.react.uimanager.PixelUtil
|
|
20
|
-
import com.facebook.react.uimanager.ReactClippingViewGroup
|
|
21
20
|
import com.facebook.react.uimanager.UIManagerHelper
|
|
22
21
|
import com.facebook.react.uimanager.UIManagerModule
|
|
23
22
|
import com.facebook.react.uimanager.events.EventDispatcher
|
|
24
|
-
import com.facebook.react.views.scroll.ReactHorizontalScrollView
|
|
25
|
-
import com.facebook.react.views.scroll.ReactScrollView
|
|
26
23
|
import com.google.android.material.bottomsheet.BottomSheetBehavior
|
|
27
24
|
import com.google.android.material.shape.CornerFamily
|
|
28
25
|
import com.google.android.material.shape.MaterialShapeDrawable
|
|
@@ -404,29 +401,6 @@ class Screen(
|
|
|
404
401
|
}
|
|
405
402
|
|
|
406
403
|
if (child is ViewGroup) {
|
|
407
|
-
// The children are miscounted when there's removeClippedSubviews prop
|
|
408
|
-
// set to true (which is the default for FlatLists).
|
|
409
|
-
// Unless the child is a ScrollView it's safe to assume that it's true
|
|
410
|
-
// and add a simple view for each possibly clipped item to make it work as expected.
|
|
411
|
-
// See https://github.com/software-mansion/react-native-screens/pull/2495
|
|
412
|
-
|
|
413
|
-
if (child is ReactClippingViewGroup &&
|
|
414
|
-
child.removeClippedSubviews &&
|
|
415
|
-
child !is ReactScrollView &&
|
|
416
|
-
child !is ReactHorizontalScrollView
|
|
417
|
-
) {
|
|
418
|
-
// We need to workaround the issue until our changes land in core.
|
|
419
|
-
// Some views do not accept any children or have set amount and they throw
|
|
420
|
-
// when we want to brute-forcefully manipulate that.
|
|
421
|
-
// Is this ugly? Very. Do we have better option before changes land in core?
|
|
422
|
-
// I'm not aware of any.
|
|
423
|
-
try {
|
|
424
|
-
for (j in 0 until child.childCount) {
|
|
425
|
-
child.addView(View(context))
|
|
426
|
-
}
|
|
427
|
-
} catch (_: Exception) {
|
|
428
|
-
}
|
|
429
|
-
}
|
|
430
404
|
startTransitionRecursive(child)
|
|
431
405
|
}
|
|
432
406
|
}
|
|
@@ -3,12 +3,11 @@ package com.swmansion.rnscreens
|
|
|
3
3
|
import android.annotation.SuppressLint
|
|
4
4
|
import android.view.View
|
|
5
5
|
import com.facebook.react.bridge.ReactContext
|
|
6
|
-
import com.facebook.react.views.view.ReactViewGroup
|
|
7
6
|
|
|
8
7
|
@SuppressLint("ViewConstructor")
|
|
9
8
|
class ScreenStackHeaderSubview(
|
|
10
9
|
context: ReactContext?,
|
|
11
|
-
) :
|
|
10
|
+
) : FabricEnabledHeaderSubviewViewGroup(context) {
|
|
12
11
|
private var reactWidth = 0
|
|
13
12
|
private var reactHeight = 0
|
|
14
13
|
var type = Type.RIGHT
|
|
@@ -37,11 +36,17 @@ class ScreenStackHeaderSubview(
|
|
|
37
36
|
|
|
38
37
|
override fun onLayout(
|
|
39
38
|
changed: Boolean,
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
)
|
|
39
|
+
l: Int,
|
|
40
|
+
t: Int,
|
|
41
|
+
r: Int,
|
|
42
|
+
b: Int,
|
|
43
|
+
) {
|
|
44
|
+
if (changed && BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
|
|
45
|
+
val width = r - l
|
|
46
|
+
val height = b - t
|
|
47
|
+
updateSubviewFrameState(width, height, l, t)
|
|
48
|
+
}
|
|
49
|
+
}
|
|
45
50
|
|
|
46
51
|
enum class Type {
|
|
47
52
|
LEFT,
|
|
@@ -2,6 +2,8 @@ package com.swmansion.rnscreens
|
|
|
2
2
|
|
|
3
3
|
import com.facebook.react.bridge.JSApplicationIllegalArgumentException
|
|
4
4
|
import com.facebook.react.module.annotations.ReactModule
|
|
5
|
+
import com.facebook.react.uimanager.ReactStylesDiffMap
|
|
6
|
+
import com.facebook.react.uimanager.StateWrapper
|
|
5
7
|
import com.facebook.react.uimanager.ThemedReactContext
|
|
6
8
|
import com.facebook.react.uimanager.ViewGroupManager
|
|
7
9
|
import com.facebook.react.uimanager.ViewManagerDelegate
|
|
@@ -39,6 +41,17 @@ class ScreenStackHeaderSubviewManager :
|
|
|
39
41
|
}
|
|
40
42
|
}
|
|
41
43
|
|
|
44
|
+
override fun updateState(
|
|
45
|
+
view: ScreenStackHeaderSubview,
|
|
46
|
+
props: ReactStylesDiffMap?,
|
|
47
|
+
stateWrapper: StateWrapper?
|
|
48
|
+
): Any? {
|
|
49
|
+
if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) {
|
|
50
|
+
view.setStateWrapper(stateWrapper)
|
|
51
|
+
}
|
|
52
|
+
return super.updateState(view, props, stateWrapper)
|
|
53
|
+
}
|
|
54
|
+
|
|
42
55
|
protected override fun getDelegate(): ViewManagerDelegate<ScreenStackHeaderSubview> = delegate
|
|
43
56
|
|
|
44
57
|
companion object {
|
|
@@ -11,10 +11,11 @@ package com.facebook.react.viewmanagers;
|
|
|
11
11
|
|
|
12
12
|
import android.view.View;
|
|
13
13
|
import androidx.annotation.Nullable;
|
|
14
|
+
import com.facebook.react.uimanager.BaseViewManager;
|
|
14
15
|
import com.facebook.react.uimanager.BaseViewManagerDelegate;
|
|
15
|
-
import com.facebook.react.uimanager.
|
|
16
|
+
import com.facebook.react.uimanager.LayoutShadowNode;
|
|
16
17
|
|
|
17
|
-
public class RNSScreenContainerManagerDelegate<T extends View, U extends
|
|
18
|
+
public class RNSScreenContainerManagerDelegate<T extends View, U extends BaseViewManager<T, ? extends LayoutShadowNode> & RNSScreenContainerManagerInterface<T>> extends BaseViewManagerDelegate<T, U> {
|
|
18
19
|
public RNSScreenContainerManagerDelegate(U viewManager) {
|
|
19
20
|
super(viewManager);
|
|
20
21
|
}
|
|
@@ -11,10 +11,11 @@ package com.facebook.react.viewmanagers;
|
|
|
11
11
|
|
|
12
12
|
import android.view.View;
|
|
13
13
|
import androidx.annotation.Nullable;
|
|
14
|
+
import com.facebook.react.uimanager.BaseViewManager;
|
|
14
15
|
import com.facebook.react.uimanager.BaseViewManagerDelegate;
|
|
15
|
-
import com.facebook.react.uimanager.
|
|
16
|
+
import com.facebook.react.uimanager.LayoutShadowNode;
|
|
16
17
|
|
|
17
|
-
public class RNSScreenContentWrapperManagerDelegate<T extends View, U extends
|
|
18
|
+
public class RNSScreenContentWrapperManagerDelegate<T extends View, U extends BaseViewManager<T, ? extends LayoutShadowNode> & RNSScreenContentWrapperManagerInterface<T>> extends BaseViewManagerDelegate<T, U> {
|
|
18
19
|
public RNSScreenContentWrapperManagerDelegate(U viewManager) {
|
|
19
20
|
super(viewManager);
|
|
20
21
|
}
|
package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenFooterManagerDelegate.java
CHANGED
|
@@ -11,10 +11,11 @@ package com.facebook.react.viewmanagers;
|
|
|
11
11
|
|
|
12
12
|
import android.view.View;
|
|
13
13
|
import androidx.annotation.Nullable;
|
|
14
|
+
import com.facebook.react.uimanager.BaseViewManager;
|
|
14
15
|
import com.facebook.react.uimanager.BaseViewManagerDelegate;
|
|
15
|
-
import com.facebook.react.uimanager.
|
|
16
|
+
import com.facebook.react.uimanager.LayoutShadowNode;
|
|
16
17
|
|
|
17
|
-
public class RNSScreenFooterManagerDelegate<T extends View, U extends
|
|
18
|
+
public class RNSScreenFooterManagerDelegate<T extends View, U extends BaseViewManager<T, ? extends LayoutShadowNode> & RNSScreenFooterManagerInterface<T>> extends BaseViewManagerDelegate<T, U> {
|
|
18
19
|
public RNSScreenFooterManagerDelegate(U viewManager) {
|
|
19
20
|
super(viewManager);
|
|
20
21
|
}
|
package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerDelegate.java
CHANGED
|
@@ -14,10 +14,11 @@ import androidx.annotation.Nullable;
|
|
|
14
14
|
import com.facebook.react.bridge.ColorPropConverter;
|
|
15
15
|
import com.facebook.react.bridge.ReadableArray;
|
|
16
16
|
import com.facebook.react.bridge.ReadableMap;
|
|
17
|
+
import com.facebook.react.uimanager.BaseViewManager;
|
|
17
18
|
import com.facebook.react.uimanager.BaseViewManagerDelegate;
|
|
18
|
-
import com.facebook.react.uimanager.
|
|
19
|
+
import com.facebook.react.uimanager.LayoutShadowNode;
|
|
19
20
|
|
|
20
|
-
public class RNSScreenManagerDelegate<T extends View, U extends
|
|
21
|
+
public class RNSScreenManagerDelegate<T extends View, U extends BaseViewManager<T, ? extends LayoutShadowNode> & RNSScreenManagerInterface<T>> extends BaseViewManagerDelegate<T, U> {
|
|
21
22
|
public RNSScreenManagerDelegate(U viewManager) {
|
|
22
23
|
super(viewManager);
|
|
23
24
|
}
|
|
@@ -12,10 +12,11 @@ package com.facebook.react.viewmanagers;
|
|
|
12
12
|
import android.view.View;
|
|
13
13
|
import androidx.annotation.Nullable;
|
|
14
14
|
import com.facebook.react.bridge.ColorPropConverter;
|
|
15
|
+
import com.facebook.react.uimanager.BaseViewManager;
|
|
15
16
|
import com.facebook.react.uimanager.BaseViewManagerDelegate;
|
|
16
|
-
import com.facebook.react.uimanager.
|
|
17
|
+
import com.facebook.react.uimanager.LayoutShadowNode;
|
|
17
18
|
|
|
18
|
-
public class RNSScreenStackHeaderConfigManagerDelegate<T extends View, U extends
|
|
19
|
+
public class RNSScreenStackHeaderConfigManagerDelegate<T extends View, U extends BaseViewManager<T, ? extends LayoutShadowNode> & RNSScreenStackHeaderConfigManagerInterface<T>> extends BaseViewManagerDelegate<T, U> {
|
|
19
20
|
public RNSScreenStackHeaderConfigManagerDelegate(U viewManager) {
|
|
20
21
|
super(viewManager);
|
|
21
22
|
}
|
|
@@ -11,10 +11,11 @@ package com.facebook.react.viewmanagers;
|
|
|
11
11
|
|
|
12
12
|
import android.view.View;
|
|
13
13
|
import androidx.annotation.Nullable;
|
|
14
|
+
import com.facebook.react.uimanager.BaseViewManager;
|
|
14
15
|
import com.facebook.react.uimanager.BaseViewManagerDelegate;
|
|
15
|
-
import com.facebook.react.uimanager.
|
|
16
|
+
import com.facebook.react.uimanager.LayoutShadowNode;
|
|
16
17
|
|
|
17
|
-
public class RNSScreenStackHeaderSubviewManagerDelegate<T extends View, U extends
|
|
18
|
+
public class RNSScreenStackHeaderSubviewManagerDelegate<T extends View, U extends BaseViewManager<T, ? extends LayoutShadowNode> & RNSScreenStackHeaderSubviewManagerInterface<T>> extends BaseViewManagerDelegate<T, U> {
|
|
18
19
|
public RNSScreenStackHeaderSubviewManagerDelegate(U viewManager) {
|
|
19
20
|
super(viewManager);
|
|
20
21
|
}
|
package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackManagerDelegate.java
CHANGED
|
@@ -11,10 +11,11 @@ package com.facebook.react.viewmanagers;
|
|
|
11
11
|
|
|
12
12
|
import android.view.View;
|
|
13
13
|
import androidx.annotation.Nullable;
|
|
14
|
+
import com.facebook.react.uimanager.BaseViewManager;
|
|
14
15
|
import com.facebook.react.uimanager.BaseViewManagerDelegate;
|
|
15
|
-
import com.facebook.react.uimanager.
|
|
16
|
+
import com.facebook.react.uimanager.LayoutShadowNode;
|
|
16
17
|
|
|
17
|
-
public class RNSScreenStackManagerDelegate<T extends View, U extends
|
|
18
|
+
public class RNSScreenStackManagerDelegate<T extends View, U extends BaseViewManager<T, ? extends LayoutShadowNode> & RNSScreenStackManagerInterface<T>> extends BaseViewManagerDelegate<T, U> {
|
|
18
19
|
public RNSScreenStackManagerDelegate(U viewManager) {
|
|
19
20
|
super(viewManager);
|
|
20
21
|
}
|
package/android/src/paper/java/com/facebook/react/viewmanagers/RNSSearchBarManagerDelegate.java
CHANGED
|
@@ -13,10 +13,11 @@ import android.view.View;
|
|
|
13
13
|
import androidx.annotation.Nullable;
|
|
14
14
|
import com.facebook.react.bridge.ColorPropConverter;
|
|
15
15
|
import com.facebook.react.bridge.ReadableArray;
|
|
16
|
+
import com.facebook.react.uimanager.BaseViewManager;
|
|
16
17
|
import com.facebook.react.uimanager.BaseViewManagerDelegate;
|
|
17
|
-
import com.facebook.react.uimanager.
|
|
18
|
+
import com.facebook.react.uimanager.LayoutShadowNode;
|
|
18
19
|
|
|
19
|
-
public class RNSSearchBarManagerDelegate<T extends View, U extends
|
|
20
|
+
public class RNSSearchBarManagerDelegate<T extends View, U extends BaseViewManager<T, ? extends LayoutShadowNode> & RNSSearchBarManagerInterface<T>> extends BaseViewManagerDelegate<T, U> {
|
|
20
21
|
public RNSSearchBarManagerDelegate(U viewManager) {
|
|
21
22
|
super(viewManager);
|
|
22
23
|
}
|
package/android/src/paper/java/com/swmansion/rnscreens/FabricEnabledHeaderConfigViewGroup.kt
CHANGED
|
@@ -16,7 +16,15 @@ abstract class FabricEnabledHeaderConfigViewGroup(
|
|
|
16
16
|
|
|
17
17
|
fun setStateWrapper(wrapper: StateWrapper?) = Unit
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
// Do nothing on Paper. This method is used only on Fabric.
|
|
20
|
+
fun updateHeaderConfigState(
|
|
21
|
+
width: Int,
|
|
22
|
+
height: Int,
|
|
23
|
+
paddingStart: Int,
|
|
24
|
+
paddingEnd: Int,
|
|
25
|
+
) = Unit
|
|
26
|
+
|
|
27
|
+
fun updatePaddings(
|
|
20
28
|
paddingStart: Int,
|
|
21
29
|
paddingEnd: Int,
|
|
22
30
|
) {
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
package com.swmansion.rnscreens
|
|
2
|
+
|
|
3
|
+
import android.content.Context
|
|
4
|
+
import android.view.ViewGroup
|
|
5
|
+
import com.facebook.react.uimanager.StateWrapper
|
|
6
|
+
|
|
7
|
+
abstract class FabricEnabledHeaderSubviewViewGroup(context: Context?): ViewGroup(context) {
|
|
8
|
+
|
|
9
|
+
fun setStateWrapper(wrapper: StateWrapper?) = Unit
|
|
10
|
+
|
|
11
|
+
// Fabric only
|
|
12
|
+
protected fun updateSubviewFrameState(
|
|
13
|
+
width: Int,
|
|
14
|
+
height: Int,
|
|
15
|
+
offsetX: Int,
|
|
16
|
+
offsetY: Int
|
|
17
|
+
) = Unit
|
|
18
|
+
}
|
|
@@ -34,8 +34,18 @@ class RNSScreenStackHeaderConfigComponentDescriptor final
|
|
|
34
34
|
shadowNode.getState());
|
|
35
35
|
auto stateData = state->getData();
|
|
36
36
|
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
if (stateData.frameSize.width != 0 && stateData.frameSize.height != 0) {
|
|
38
|
+
layoutableShadowNode.setSize(
|
|
39
|
+
{stateData.frameSize.width, stateData.frameSize.height});
|
|
40
|
+
#ifdef ANDROID
|
|
41
|
+
layoutableShadowNode.setPadding({
|
|
42
|
+
stateData.paddingStart,
|
|
43
|
+
0,
|
|
44
|
+
stateData.paddingEnd,
|
|
45
|
+
0,
|
|
46
|
+
});
|
|
47
|
+
#endif // ANDROID
|
|
48
|
+
}
|
|
39
49
|
|
|
40
50
|
ConcreteComponentDescriptor::adopt(shadowNode);
|
|
41
51
|
#if !defined(ANDROID) && !defined(NDEBUG)
|
package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigShadowNode.cpp
CHANGED
|
@@ -5,6 +5,18 @@ namespace facebook::react {
|
|
|
5
5
|
extern const char RNSScreenStackHeaderConfigComponentName[] =
|
|
6
6
|
"RNSScreenStackHeaderConfig";
|
|
7
7
|
|
|
8
|
+
void RNSScreenStackHeaderConfigShadowNode::layout(LayoutContext layoutContext) {
|
|
9
|
+
YogaLayoutableShadowNode::layout(layoutContext);
|
|
10
|
+
applyFrameCorrections();
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
void RNSScreenStackHeaderConfigShadowNode::applyFrameCorrections() {
|
|
14
|
+
ensureUnsealed();
|
|
15
|
+
|
|
16
|
+
const auto &stateData = getStateData();
|
|
17
|
+
layoutMetrics_.frame.origin.y = -stateData.frameSize.height;
|
|
18
|
+
}
|
|
19
|
+
|
|
8
20
|
#if !defined(ANDROID) && !defined(NDEBUG)
|
|
9
21
|
void RNSScreenStackHeaderConfigShadowNode::setImageLoader(
|
|
10
22
|
std::weak_ptr<void> imageLoader) {
|
package/common/cpp/react/renderer/components/rnscreens/RNSScreenStackHeaderConfigShadowNode.h
CHANGED
|
@@ -25,13 +25,17 @@ class JSI_EXPORT RNSScreenStackHeaderConfigShadowNode final
|
|
|
25
25
|
using StateData = ConcreteViewShadowNode::ConcreteStateData;
|
|
26
26
|
|
|
27
27
|
#pragma mark - ShadowNode overrides
|
|
28
|
+
void layout(LayoutContext layoutContext) override;
|
|
28
29
|
|
|
29
30
|
#pragma mark - Custom interface
|
|
31
|
+
|
|
30
32
|
#if !defined(ANDROID) && !defined(NDEBUG)
|
|
31
33
|
void setImageLoader(std::weak_ptr<void> imageLoader);
|
|
32
34
|
#endif // !ANDROID && !NDEBUG
|
|
33
35
|
|
|
34
36
|
private:
|
|
37
|
+
void applyFrameCorrections();
|
|
38
|
+
|
|
35
39
|
#if !defined(ANDROID) && !defined(NDEBUG)
|
|
36
40
|
StateData &getStateDataMutable();
|
|
37
41
|
#endif // !ANDROID && !NDEBUG
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
|
|
1
2
|
#include "RNSScreenStackHeaderConfigState.h"
|
|
2
3
|
|
|
3
4
|
namespace facebook {
|
|
@@ -5,8 +6,9 @@ namespace react {
|
|
|
5
6
|
|
|
6
7
|
#ifdef ANDROID
|
|
7
8
|
folly::dynamic RNSScreenStackHeaderConfigState::getDynamic() const {
|
|
8
|
-
return folly::dynamic::object("
|
|
9
|
-
"
|
|
9
|
+
return folly::dynamic::object("frameWidth", frameSize.width)(
|
|
10
|
+
"frameHeight", frameSize.height)("paddingStart", paddingStart)(
|
|
11
|
+
"paddingEnd", paddingEnd);
|
|
10
12
|
}
|
|
11
13
|
#else // ANDROID
|
|
12
14
|
#ifndef NDEBUG
|
|
@@ -22,13 +24,5 @@ std::weak_ptr<void> RNSScreenStackHeaderConfigState::getImageLoader()
|
|
|
22
24
|
#endif // !NDEBUG
|
|
23
25
|
#endif // ANDROID
|
|
24
26
|
|
|
25
|
-
Float RNSScreenStackHeaderConfigState::getPaddingStart() const noexcept {
|
|
26
|
-
return paddingStart_;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
Float RNSScreenStackHeaderConfigState::getPaddingEnd() const noexcept {
|
|
30
|
-
return paddingEnd_;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
27
|
} // namespace react
|
|
34
28
|
} // namespace facebook
|