react-native-screens 3.17.0 → 3.18.1
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 +5 -1
- package/android/build.gradle +0 -34
- package/android/src/main/java/com/swmansion/rnscreens/CustomSearchView.kt +2 -0
- package/android/src/main/java/com/swmansion/rnscreens/LifecycleHelper.kt +1 -2
- package/android/src/main/java/com/swmansion/rnscreens/RNScreensPackage.kt +2 -11
- package/android/src/main/java/com/swmansion/rnscreens/Screen.kt +1 -6
- package/android/src/main/java/com/swmansion/rnscreens/ScreenContainer.kt +18 -31
- package/android/src/main/java/com/swmansion/rnscreens/ScreenContainerViewManager.kt +6 -18
- package/android/src/main/java/com/swmansion/rnscreens/ScreenFragment.kt +23 -34
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStack.kt +19 -38
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragment.kt +37 -32
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfig.kt +14 -26
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigViewManager.kt +6 -18
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubview.kt +2 -6
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubviewManager.kt +3 -9
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackViewManager.kt +11 -32
- package/android/src/main/java/com/swmansion/rnscreens/ScreenViewManager.kt +3 -10
- package/android/src/main/java/com/swmansion/rnscreens/ScreenWindowTraits.kt +1 -0
- package/android/src/main/jni/CMakeLists.txt +72 -0
- package/android/src/main/jni/rnscreens.cpp +16 -0
- package/android/src/main/jni/rnscreens.h +28 -0
- package/common/cpp/{rnscreens → react/renderer/components/rnscreens}/RNSScreenComponentDescriptor.h +0 -0
- package/common/cpp/{rnscreens → react/renderer/components/rnscreens}/RNSScreenShadowNode.cpp +0 -0
- package/common/cpp/{rnscreens → react/renderer/components/rnscreens}/RNSScreenShadowNode.h +3 -2
- package/common/cpp/{rnscreens → react/renderer/components/rnscreens}/RNSScreenState.cpp +0 -0
- package/common/cpp/{rnscreens → react/renderer/components/rnscreens}/RNSScreenState.h +1 -1
- package/ios/RNSFullWindowOverlay.mm +1 -1
- package/ios/RNSScreen.mm +1 -1
- package/ios/RNSScreenContainer.mm +1 -1
- package/ios/RNSScreenNavigationContainer.mm +1 -1
- package/ios/RNSScreenStackHeaderConfig.mm +5 -2
- package/ios/RNSSearchBar.mm +1 -1
- package/lib/commonjs/native-stack/utils/getDefaultHeaderHeight.js +1 -1
- package/lib/commonjs/native-stack/utils/getDefaultHeaderHeight.js.map +1 -1
- package/lib/module/native-stack/utils/getDefaultHeaderHeight.js +1 -1
- package/lib/module/native-stack/utils/getDefaultHeaderHeight.js.map +1 -1
- package/lib/typescript/native-stack/types.d.ts +5 -5
- package/lib/typescript/reanimated/ReanimatedNativeStackScreen.d.ts +1 -1
- package/lib/typescript/reanimated/ReanimatedScreen.d.ts +1 -1
- package/lib/typescript/types.d.ts +20 -5
- package/package.json +8 -8
- package/react-native.config.js +19 -0
- package/src/native-stack/types.tsx +5 -5
- package/src/native-stack/utils/getDefaultHeaderHeight.tsx +1 -1
- package/src/types.tsx +20 -5
- package/android/src/fabric/java/com/swmansion/rnscreens/RNScreensComponentsRegistry.java +0 -28
- package/android/src/main/jni/Android.mk +0 -44
- package/android/src/main/jni/OnLoad.cpp +0 -9
- package/android/src/main/jni/RNScreensComponentsRegistry.cpp +0 -66
- package/android/src/main/jni/RNScreensComponentsRegistry.h +0 -34
- package/common/cpp/Android.mk +0 -37
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
package com.swmansion.rnscreens
|
|
2
2
|
|
|
3
|
-
import android.annotation.SuppressLint
|
|
4
3
|
import android.content.Context
|
|
5
4
|
import android.graphics.PorterDuff
|
|
6
5
|
import android.os.Build
|
|
@@ -101,23 +100,9 @@ class ScreenStackHeaderConfig(context: Context) : ViewGroup(context) {
|
|
|
101
100
|
}
|
|
102
101
|
|
|
103
102
|
private val screen: Screen?
|
|
104
|
-
get()
|
|
105
|
-
val screen = parent
|
|
106
|
-
return if (screen is Screen) {
|
|
107
|
-
screen
|
|
108
|
-
} else null
|
|
109
|
-
}
|
|
103
|
+
get() = parent as? Screen
|
|
110
104
|
private val screenStack: ScreenStack?
|
|
111
|
-
get()
|
|
112
|
-
val screen = screen
|
|
113
|
-
if (screen != null) {
|
|
114
|
-
val container = screen.container
|
|
115
|
-
if (container is ScreenStack) {
|
|
116
|
-
return container
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
return null
|
|
120
|
-
}
|
|
105
|
+
get() = screen?.container as? ScreenStack
|
|
121
106
|
val screenFragment: ScreenStackFragment?
|
|
122
107
|
get() {
|
|
123
108
|
val screen = parent
|
|
@@ -133,9 +118,11 @@ class ScreenStackHeaderConfig(context: Context) : ViewGroup(context) {
|
|
|
133
118
|
fun onUpdate() {
|
|
134
119
|
val stack = screenStack
|
|
135
120
|
val isTop = stack == null || stack.topScreen == parent
|
|
121
|
+
|
|
136
122
|
if (!mIsAttachedToWindow || !isTop || mDestroyed) {
|
|
137
123
|
return
|
|
138
124
|
}
|
|
125
|
+
|
|
139
126
|
val activity = screenFragment?.activity as AppCompatActivity? ?: return
|
|
140
127
|
if (mDirection != null) {
|
|
141
128
|
if (mDirection == "rtl") {
|
|
@@ -158,15 +145,18 @@ class ScreenStackHeaderConfig(context: Context) : ViewGroup(context) {
|
|
|
158
145
|
}
|
|
159
146
|
ScreenWindowTraits.trySetWindowTraits(it, activity, reactContext)
|
|
160
147
|
}
|
|
148
|
+
|
|
161
149
|
if (mIsHidden) {
|
|
162
150
|
if (toolbar.parent != null) {
|
|
163
151
|
screenFragment?.removeToolbar()
|
|
164
152
|
}
|
|
165
153
|
return
|
|
166
154
|
}
|
|
155
|
+
|
|
167
156
|
if (toolbar.parent == null) {
|
|
168
157
|
screenFragment?.setToolbar(toolbar)
|
|
169
158
|
}
|
|
159
|
+
|
|
170
160
|
if (mIsTopInsetEnabled) {
|
|
171
161
|
headerTopInset.let {
|
|
172
162
|
toolbar.setPadding(0, it ?: 0, 0, 0)
|
|
@@ -176,6 +166,7 @@ class ScreenStackHeaderConfig(context: Context) : ViewGroup(context) {
|
|
|
176
166
|
toolbar.setPadding(0, 0, 0, 0)
|
|
177
167
|
}
|
|
178
168
|
}
|
|
169
|
+
|
|
179
170
|
activity.setSupportActionBar(toolbar)
|
|
180
171
|
// non-null toolbar is set in the line above and it is used here
|
|
181
172
|
val actionBar = requireNotNull(activity.supportActionBar)
|
|
@@ -212,10 +203,12 @@ class ScreenStackHeaderConfig(context: Context) : ViewGroup(context) {
|
|
|
212
203
|
// which would impact the position of custom header views rendered at the center.
|
|
213
204
|
toolbar.contentInsetStartWithNavigation = 0
|
|
214
205
|
}
|
|
206
|
+
|
|
215
207
|
val titleTextView = titleTextView
|
|
216
208
|
if (mTitleColor != 0) {
|
|
217
209
|
toolbar.setTitleTextColor(mTitleColor)
|
|
218
210
|
}
|
|
211
|
+
|
|
219
212
|
if (titleTextView != null) {
|
|
220
213
|
if (mTitleFontFamily != null || mTitleFontWeight > 0) {
|
|
221
214
|
val titleTypeface = ReactTypefaceUtils.applyStyles(
|
|
@@ -233,8 +226,7 @@ class ScreenStackHeaderConfig(context: Context) : ViewGroup(context) {
|
|
|
233
226
|
|
|
234
227
|
// color
|
|
235
228
|
if (mTintColor != 0) {
|
|
236
|
-
|
|
237
|
-
navigationIcon?.setColorFilter(mTintColor, PorterDuff.Mode.SRC_ATOP)
|
|
229
|
+
toolbar.navigationIcon?.setColorFilter(mTintColor, PorterDuff.Mode.SRC_ATOP)
|
|
238
230
|
}
|
|
239
231
|
|
|
240
232
|
// subviews
|
|
@@ -243,6 +235,7 @@ class ScreenStackHeaderConfig(context: Context) : ViewGroup(context) {
|
|
|
243
235
|
toolbar.removeViewAt(i)
|
|
244
236
|
}
|
|
245
237
|
}
|
|
238
|
+
|
|
246
239
|
var i = 0
|
|
247
240
|
val size = mConfigSubviews.size
|
|
248
241
|
while (i < size) {
|
|
@@ -290,9 +283,7 @@ class ScreenStackHeaderConfig(context: Context) : ViewGroup(context) {
|
|
|
290
283
|
}
|
|
291
284
|
}
|
|
292
285
|
|
|
293
|
-
fun getConfigSubview(index: Int): ScreenStackHeaderSubview
|
|
294
|
-
return mConfigSubviews[index]
|
|
295
|
-
}
|
|
286
|
+
fun getConfigSubview(index: Int): ScreenStackHeaderSubview = mConfigSubviews[index]
|
|
296
287
|
|
|
297
288
|
val configSubviewsCount: Int
|
|
298
289
|
get() = mConfigSubviews.size
|
|
@@ -314,16 +305,13 @@ class ScreenStackHeaderConfig(context: Context) : ViewGroup(context) {
|
|
|
314
305
|
|
|
315
306
|
private val titleTextView: TextView?
|
|
316
307
|
get() {
|
|
317
|
-
|
|
318
|
-
val size = toolbar.childCount
|
|
319
|
-
while (i < size) {
|
|
308
|
+
for (i in 0 until toolbar.childCount) {
|
|
320
309
|
val view = toolbar.getChildAt(i)
|
|
321
310
|
if (view is TextView) {
|
|
322
311
|
if (view.text == toolbar.title) {
|
|
323
312
|
return view
|
|
324
313
|
}
|
|
325
314
|
}
|
|
326
|
-
i++
|
|
327
315
|
}
|
|
328
316
|
return null
|
|
329
317
|
}
|
|
@@ -21,13 +21,9 @@ class ScreenStackHeaderConfigViewManager : ViewGroupManager<ScreenStackHeaderCon
|
|
|
21
21
|
mDelegate = RNSScreenStackHeaderConfigManagerDelegate<ScreenStackHeaderConfig, ScreenStackHeaderConfigViewManager>(this)
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
override fun getName(): String
|
|
25
|
-
return REACT_CLASS
|
|
26
|
-
}
|
|
24
|
+
override fun getName(): String = REACT_CLASS
|
|
27
25
|
|
|
28
|
-
override fun createViewInstance(reactContext: ThemedReactContext)
|
|
29
|
-
return ScreenStackHeaderConfig(reactContext)
|
|
30
|
-
}
|
|
26
|
+
override fun createViewInstance(reactContext: ThemedReactContext) = ScreenStackHeaderConfig(reactContext)
|
|
31
27
|
|
|
32
28
|
override fun addView(parent: ScreenStackHeaderConfig, child: View, index: Int) {
|
|
33
29
|
if (child !is ScreenStackHeaderSubview) {
|
|
@@ -50,17 +46,11 @@ class ScreenStackHeaderConfigViewManager : ViewGroupManager<ScreenStackHeaderCon
|
|
|
50
46
|
parent.removeConfigSubview(index)
|
|
51
47
|
}
|
|
52
48
|
|
|
53
|
-
override fun getChildCount(parent: ScreenStackHeaderConfig): Int
|
|
54
|
-
return parent.configSubviewsCount
|
|
55
|
-
}
|
|
49
|
+
override fun getChildCount(parent: ScreenStackHeaderConfig): Int = parent.configSubviewsCount
|
|
56
50
|
|
|
57
|
-
override fun getChildAt(parent: ScreenStackHeaderConfig, index: Int): View
|
|
58
|
-
return parent.getConfigSubview(index)
|
|
59
|
-
}
|
|
51
|
+
override fun getChildAt(parent: ScreenStackHeaderConfig, index: Int): View = parent.getConfigSubview(index)
|
|
60
52
|
|
|
61
|
-
override fun needsCustomLayoutForChildren()
|
|
62
|
-
return true
|
|
63
|
-
}
|
|
53
|
+
override fun needsCustomLayoutForChildren() = true
|
|
64
54
|
|
|
65
55
|
override fun onAfterUpdateTransaction(parent: ScreenStackHeaderConfig) {
|
|
66
56
|
super.onAfterUpdateTransaction(parent)
|
|
@@ -149,9 +139,7 @@ class ScreenStackHeaderConfigViewManager : ViewGroupManager<ScreenStackHeaderCon
|
|
|
149
139
|
.build()
|
|
150
140
|
}
|
|
151
141
|
|
|
152
|
-
protected override fun getDelegate(): ViewManagerDelegate<ScreenStackHeaderConfig>
|
|
153
|
-
return mDelegate
|
|
154
|
-
}
|
|
142
|
+
protected override fun getDelegate(): ViewManagerDelegate<ScreenStackHeaderConfig> = mDelegate
|
|
155
143
|
|
|
156
144
|
companion object {
|
|
157
145
|
const val REACT_CLASS = "RNSScreenStackHeaderConfig"
|
|
@@ -12,9 +12,7 @@ class ScreenStackHeaderSubview(context: ReactContext?) : ReactViewGroup(context)
|
|
|
12
12
|
var type = Type.RIGHT
|
|
13
13
|
|
|
14
14
|
val config: ScreenStackHeaderConfig?
|
|
15
|
-
get()
|
|
16
|
-
return (parent as? CustomToolbar)?.config
|
|
17
|
-
}
|
|
15
|
+
get() = (parent as? CustomToolbar)?.config
|
|
18
16
|
|
|
19
17
|
override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) {
|
|
20
18
|
if (MeasureSpec.getMode(widthMeasureSpec) == MeasureSpec.EXACTLY &&
|
|
@@ -32,9 +30,7 @@ class ScreenStackHeaderSubview(context: ReactContext?) : ReactViewGroup(context)
|
|
|
32
30
|
setMeasuredDimension(mReactWidth, mReactHeight)
|
|
33
31
|
}
|
|
34
32
|
|
|
35
|
-
override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int)
|
|
36
|
-
// no-op
|
|
37
|
-
}
|
|
33
|
+
override fun onLayout(changed: Boolean, left: Int, top: Int, right: Int, bottom: Int) = Unit
|
|
38
34
|
|
|
39
35
|
enum class Type {
|
|
40
36
|
LEFT, CENTER, RIGHT, BACK, SEARCH_BAR
|
|
@@ -17,13 +17,9 @@ class ScreenStackHeaderSubviewManager : ViewGroupManager<ScreenStackHeaderSubvie
|
|
|
17
17
|
mDelegate = RNSScreenStackHeaderSubviewManagerDelegate<ScreenStackHeaderSubview, ScreenStackHeaderSubviewManager>(this)
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
override fun getName()
|
|
21
|
-
return REACT_CLASS
|
|
22
|
-
}
|
|
20
|
+
override fun getName() = REACT_CLASS
|
|
23
21
|
|
|
24
|
-
override fun createViewInstance(context: ThemedReactContext)
|
|
25
|
-
return ScreenStackHeaderSubview(context)
|
|
26
|
-
}
|
|
22
|
+
override fun createViewInstance(context: ThemedReactContext) = ScreenStackHeaderSubview(context)
|
|
27
23
|
|
|
28
24
|
@ReactProp(name = "type")
|
|
29
25
|
override fun setType(view: ScreenStackHeaderSubview, type: String?) {
|
|
@@ -37,9 +33,7 @@ class ScreenStackHeaderSubviewManager : ViewGroupManager<ScreenStackHeaderSubvie
|
|
|
37
33
|
}
|
|
38
34
|
}
|
|
39
35
|
|
|
40
|
-
protected override fun getDelegate(): ViewManagerDelegate<ScreenStackHeaderSubview>
|
|
41
|
-
return mDelegate
|
|
42
|
-
}
|
|
36
|
+
protected override fun getDelegate(): ViewManagerDelegate<ScreenStackHeaderSubview> = mDelegate
|
|
43
37
|
|
|
44
38
|
companion object {
|
|
45
39
|
const val REACT_CLASS = "RNSScreenStackHeaderSubview"
|
|
@@ -3,7 +3,6 @@ package com.swmansion.rnscreens
|
|
|
3
3
|
import android.view.View
|
|
4
4
|
import android.view.ViewGroup
|
|
5
5
|
import com.facebook.react.bridge.ReactApplicationContext
|
|
6
|
-
import com.facebook.react.common.MapBuilder
|
|
7
6
|
import com.facebook.react.module.annotations.ReactModule
|
|
8
7
|
import com.facebook.react.uimanager.LayoutShadowNode
|
|
9
8
|
import com.facebook.react.uimanager.ThemedReactContext
|
|
@@ -21,13 +20,9 @@ class ScreenStackViewManager : ViewGroupManager<ScreenStack>(), RNSScreenStackMa
|
|
|
21
20
|
mDelegate = RNSScreenStackManagerDelegate<ScreenStack, ScreenStackViewManager>(this)
|
|
22
21
|
}
|
|
23
22
|
|
|
24
|
-
override fun getName()
|
|
25
|
-
return REACT_CLASS
|
|
26
|
-
}
|
|
23
|
+
override fun getName() = REACT_CLASS
|
|
27
24
|
|
|
28
|
-
override fun createViewInstance(reactContext: ThemedReactContext)
|
|
29
|
-
return ScreenStack(reactContext)
|
|
30
|
-
}
|
|
25
|
+
override fun createViewInstance(reactContext: ThemedReactContext) = ScreenStack(reactContext)
|
|
31
26
|
|
|
32
27
|
override fun addView(parent: ScreenStack, child: View, index: Int) {
|
|
33
28
|
require(child is Screen) { "Attempt attach child that is not of type RNScreen" }
|
|
@@ -44,10 +39,8 @@ class ScreenStackViewManager : ViewGroupManager<ScreenStack>(), RNSScreenStackMa
|
|
|
44
39
|
}
|
|
45
40
|
|
|
46
41
|
private fun startTransitionRecursive(parent: ViewGroup?) {
|
|
47
|
-
var i = 0
|
|
48
42
|
parent?.let {
|
|
49
|
-
|
|
50
|
-
while (i < size) {
|
|
43
|
+
for (i in 0 until it.childCount) {
|
|
51
44
|
val child = it.getChildAt(i)
|
|
52
45
|
child?.let { view -> it.startViewTransition(view) }
|
|
53
46
|
if (child is ScreenStackHeaderConfig) {
|
|
@@ -58,37 +51,23 @@ class ScreenStackViewManager : ViewGroupManager<ScreenStack>(), RNSScreenStackMa
|
|
|
58
51
|
if (child is ViewGroup) {
|
|
59
52
|
startTransitionRecursive(child)
|
|
60
53
|
}
|
|
61
|
-
i++
|
|
62
54
|
}
|
|
63
55
|
}
|
|
64
56
|
}
|
|
65
57
|
|
|
66
|
-
override fun getChildCount(parent: ScreenStack)
|
|
67
|
-
return parent.screenCount
|
|
68
|
-
}
|
|
58
|
+
override fun getChildCount(parent: ScreenStack) = parent.screenCount
|
|
69
59
|
|
|
70
|
-
override fun getChildAt(parent: ScreenStack, index: Int): View
|
|
71
|
-
return parent.getScreenAt(index)
|
|
72
|
-
}
|
|
60
|
+
override fun getChildAt(parent: ScreenStack, index: Int): View = parent.getScreenAt(index)
|
|
73
61
|
|
|
74
|
-
override fun createShadowNodeInstance(context: ReactApplicationContext): LayoutShadowNode
|
|
75
|
-
return ScreensShadowNode(context)
|
|
76
|
-
}
|
|
62
|
+
override fun createShadowNodeInstance(context: ReactApplicationContext): LayoutShadowNode = ScreensShadowNode(context)
|
|
77
63
|
|
|
78
|
-
override fun needsCustomLayoutForChildren()
|
|
79
|
-
return true
|
|
80
|
-
}
|
|
64
|
+
override fun needsCustomLayoutForChildren() = true
|
|
81
65
|
|
|
82
|
-
protected override fun getDelegate(): ViewManagerDelegate<ScreenStack>
|
|
83
|
-
return mDelegate
|
|
84
|
-
}
|
|
66
|
+
protected override fun getDelegate(): ViewManagerDelegate<ScreenStack> = mDelegate
|
|
85
67
|
|
|
86
|
-
override fun getExportedCustomDirectEventTypeConstants(): MutableMap<String, Any>
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
MapBuilder.of("registrationName", "onFinishTransitioning"),
|
|
90
|
-
)
|
|
91
|
-
}
|
|
68
|
+
override fun getExportedCustomDirectEventTypeConstants(): MutableMap<String, Any> = mutableMapOf(
|
|
69
|
+
StackFinishTransitioningEvent.EVENT_NAME to mutableMapOf("registrationName" to "onFinishTransitioning")
|
|
70
|
+
)
|
|
92
71
|
|
|
93
72
|
companion object {
|
|
94
73
|
const val REACT_CLASS = "RNSScreenStack"
|
|
@@ -17,7 +17,6 @@ import com.swmansion.rnscreens.events.ScreenDismissedEvent
|
|
|
17
17
|
import com.swmansion.rnscreens.events.ScreenTransitionProgressEvent
|
|
18
18
|
import com.swmansion.rnscreens.events.ScreenWillAppearEvent
|
|
19
19
|
import com.swmansion.rnscreens.events.ScreenWillDisappearEvent
|
|
20
|
-
import com.swmansion.rnscreens.events.StackFinishTransitioningEvent
|
|
21
20
|
|
|
22
21
|
@ReactModule(name = ScreenViewManager.REACT_CLASS)
|
|
23
22
|
class ScreenViewManager : ViewGroupManager<Screen>(), RNSScreenManagerInterface<Screen> {
|
|
@@ -27,13 +26,9 @@ class ScreenViewManager : ViewGroupManager<Screen>(), RNSScreenManagerInterface<
|
|
|
27
26
|
mDelegate = RNSScreenManagerDelegate<Screen, ScreenViewManager>(this)
|
|
28
27
|
}
|
|
29
28
|
|
|
30
|
-
override fun getName()
|
|
31
|
-
return REACT_CLASS
|
|
32
|
-
}
|
|
29
|
+
override fun getName() = REACT_CLASS
|
|
33
30
|
|
|
34
|
-
override fun createViewInstance(reactContext: ThemedReactContext)
|
|
35
|
-
return Screen(reactContext)
|
|
36
|
-
}
|
|
31
|
+
override fun createViewInstance(reactContext: ThemedReactContext) = Screen(reactContext)
|
|
37
32
|
|
|
38
33
|
override fun setActivityState(view: Screen, activityState: Float) {
|
|
39
34
|
setActivityState(view, activityState.toInt())
|
|
@@ -180,9 +175,7 @@ class ScreenViewManager : ViewGroupManager<Screen>(), RNSScreenManagerInterface<
|
|
|
180
175
|
)
|
|
181
176
|
}
|
|
182
177
|
|
|
183
|
-
protected override fun getDelegate(): ViewManagerDelegate<Screen>
|
|
184
|
-
return mDelegate
|
|
185
|
-
}
|
|
178
|
+
protected override fun getDelegate(): ViewManagerDelegate<Screen> = mDelegate
|
|
186
179
|
|
|
187
180
|
companion object {
|
|
188
181
|
const val REACT_CLASS = "RNSScreen"
|
|
@@ -25,6 +25,7 @@ object ScreenWindowTraits {
|
|
|
25
25
|
private var mDidSetStatusBarAppearance = false
|
|
26
26
|
private var mDidSetNavigationBarAppearance = false
|
|
27
27
|
private var mDefaultStatusBarColor: Int? = null
|
|
28
|
+
|
|
28
29
|
internal fun applyDidSetOrientation() {
|
|
29
30
|
mDidSetOrientation = true
|
|
30
31
|
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
cmake_minimum_required(VERSION 3.13)
|
|
2
|
+
set(CMAKE_VERBOSE_MAKEFILE ON)
|
|
3
|
+
|
|
4
|
+
set(LIB_LITERAL rnscreens)
|
|
5
|
+
set(LIB_TARGET_NAME react_codegen_${LIB_LITERAL})
|
|
6
|
+
|
|
7
|
+
set(LIB_ANDROID_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../..)
|
|
8
|
+
set(LIB_COMMON_DIR ${LIB_ANDROID_DIR}/../common/cpp)
|
|
9
|
+
set(LIB_ANDROID_GENERATED_JNI_DIR ${LIB_ANDROID_DIR}/build/generated/source/codegen/jni)
|
|
10
|
+
set(LIB_ANDROID_GENERATED_COMPONENTS_DIR ${LIB_ANDROID_GENERATED_JNI_DIR}/react/renderer/components/${LIB_LITERAL})
|
|
11
|
+
|
|
12
|
+
add_compile_options(
|
|
13
|
+
-fexceptions
|
|
14
|
+
-frtti
|
|
15
|
+
-std=c++17
|
|
16
|
+
-Wall
|
|
17
|
+
-Wpedantic
|
|
18
|
+
-Wno-gnu-zero-variadic-macro-arguments
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
file(GLOB LIB_CUSTOM_SRCS CONFIGURE_DEPENDS *.cpp ${LIB_COMMON_DIR}/react/renderer/components/${LIB_LITERAL}/*.cpp)
|
|
22
|
+
file(GLOB LIB_CODEGEN_SRCS CONFIGURE_DEPENDS ${LIB_ANDROID_GENERATED_COMPONENTS_DIR}/*.cpp)
|
|
23
|
+
|
|
24
|
+
add_library(
|
|
25
|
+
${LIB_TARGET_NAME}
|
|
26
|
+
SHARED
|
|
27
|
+
${LIB_CUSTOM_SRCS}
|
|
28
|
+
${LIB_CODEGEN_SRCS}
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
target_include_directories(
|
|
32
|
+
${LIB_TARGET_NAME}
|
|
33
|
+
PUBLIC
|
|
34
|
+
.
|
|
35
|
+
${LIB_COMMON_DIR}
|
|
36
|
+
${LIB_ANDROID_GENERATED_JNI_DIR}
|
|
37
|
+
${LIB_ANDROID_GENERATED_COMPONENTS_DIR}
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
target_link_libraries(
|
|
41
|
+
${LIB_TARGET_NAME}
|
|
42
|
+
fbjni
|
|
43
|
+
folly_runtime
|
|
44
|
+
glog
|
|
45
|
+
jsi
|
|
46
|
+
react_codegen_rncore
|
|
47
|
+
react_debug
|
|
48
|
+
react_nativemodule_core
|
|
49
|
+
react_render_core
|
|
50
|
+
react_render_debug
|
|
51
|
+
react_render_graphics
|
|
52
|
+
react_render_mapbuffer
|
|
53
|
+
rrc_view
|
|
54
|
+
turbomodulejsijni
|
|
55
|
+
yoga
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
target_compile_options(
|
|
59
|
+
${LIB_TARGET_NAME}
|
|
60
|
+
PRIVATE
|
|
61
|
+
-DLOG_TAG=\"ReactNative\"
|
|
62
|
+
-fexceptions
|
|
63
|
+
-frtti
|
|
64
|
+
-std=c++17
|
|
65
|
+
-Wall
|
|
66
|
+
)
|
|
67
|
+
|
|
68
|
+
target_include_directories(
|
|
69
|
+
${CMAKE_PROJECT_NAME}
|
|
70
|
+
PUBLIC
|
|
71
|
+
${CMAKE_CURRENT_SOURCE_DIR}
|
|
72
|
+
)
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
|
|
3
|
+
* @generated by codegen project: GenerateModuleJniCpp.js
|
|
4
|
+
*/
|
|
5
|
+
#include "rnscreens.h"
|
|
6
|
+
|
|
7
|
+
namespace facebook {
|
|
8
|
+
namespace react {
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
std::shared_ptr<TurboModule> rnscreens_ModuleProvider(const std::string &moduleName, const JavaTurboModule::InitParams ¶ms) {
|
|
12
|
+
return nullptr;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
} // namespace react
|
|
16
|
+
} // namespace facebook
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <ReactCommon/JavaTurboModule.h>
|
|
4
|
+
#include <ReactCommon/TurboModule.h>
|
|
5
|
+
#include <jsi/jsi.h>
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Note this import and that it is not present in autogenerated header file
|
|
9
|
+
* under android/build/generated/source/codegen/jni/rnscreens.h
|
|
10
|
+
*
|
|
11
|
+
* It is added here to make our custom symbols visible in autogenerated file with
|
|
12
|
+
* code responsible for registering component descriptor providers. See that rncli.cpp,
|
|
13
|
+
* located under <App>/android/app/build/generated/rncli/src/main/jni/rncli.cpp,
|
|
14
|
+
* includes autogenerated rnscreens.h header by default. We change this behaviour
|
|
15
|
+
* by appropriate include path configuration so that this header file gets included.
|
|
16
|
+
*
|
|
17
|
+
* See: https://github.com/software-mansion/react-native-screens/pull/1585
|
|
18
|
+
*/
|
|
19
|
+
#include <react/renderer/components/rnscreens/RNSScreenComponentDescriptor.h>
|
|
20
|
+
|
|
21
|
+
namespace facebook {
|
|
22
|
+
namespace react {
|
|
23
|
+
|
|
24
|
+
JSI_EXPORT
|
|
25
|
+
std::shared_ptr<TurboModule> rnscreens_ModuleProvider(const std::string &moduleName, const JavaTurboModule::InitParams ¶ms);
|
|
26
|
+
|
|
27
|
+
} // namespace react
|
|
28
|
+
} // namespace facebook
|
package/common/cpp/{rnscreens → react/renderer/components/rnscreens}/RNSScreenComponentDescriptor.h
RENAMED
|
File without changes
|
package/common/cpp/{rnscreens → react/renderer/components/rnscreens}/RNSScreenShadowNode.cpp
RENAMED
|
File without changes
|
|
@@ -4,13 +4,14 @@
|
|
|
4
4
|
#include <react/renderer/components/rnscreens/EventEmitters.h>
|
|
5
5
|
#include <react/renderer/components/rnscreens/Props.h>
|
|
6
6
|
#include <react/renderer/components/view/ConcreteViewShadowNode.h>
|
|
7
|
+
#include <jsi/jsi.h>
|
|
7
8
|
|
|
8
9
|
namespace facebook {
|
|
9
10
|
namespace react {
|
|
10
11
|
|
|
11
|
-
extern const char RNSScreenComponentName[];
|
|
12
|
+
JSI_EXPORT extern const char RNSScreenComponentName[];
|
|
12
13
|
|
|
13
|
-
class RNSScreenShadowNode final : public ConcreteViewShadowNode<
|
|
14
|
+
class JSI_EXPORT RNSScreenShadowNode final : public ConcreteViewShadowNode<
|
|
14
15
|
RNSScreenComponentName,
|
|
15
16
|
RNSScreenProps,
|
|
16
17
|
RNSScreenEventEmitter,
|
|
File without changes
|
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
|
|
5
5
|
#ifdef RN_FABRIC_ENABLED
|
|
6
6
|
#import <React/RCTConversions.h>
|
|
7
|
+
#import <React/RCTFabricComponentsPlugins.h>
|
|
7
8
|
#import <React/RCTSurfaceTouchHandler.h>
|
|
8
9
|
#import <react/renderer/components/rnscreens/ComponentDescriptors.h>
|
|
9
10
|
#import <react/renderer/components/rnscreens/Props.h>
|
|
10
11
|
#import <react/renderer/components/rnscreens/RCTComponentViewHelpers.h>
|
|
11
|
-
#import <React/RCTFabricComponentsPlugins.h>
|
|
12
12
|
#else
|
|
13
13
|
#import <React/RCTTouchHandler.h>
|
|
14
14
|
#endif // RN_FABRIC_ENABLED
|
package/ios/RNSScreen.mm
CHANGED
|
@@ -6,13 +6,13 @@
|
|
|
6
6
|
|
|
7
7
|
#ifdef RN_FABRIC_ENABLED
|
|
8
8
|
#import <React/RCTConversions.h>
|
|
9
|
+
#import <React/RCTFabricComponentsPlugins.h>
|
|
9
10
|
#import <React/RCTRootComponentView.h>
|
|
10
11
|
#import <React/RCTSurfaceTouchHandler.h>
|
|
11
12
|
#import <react/renderer/components/rnscreens/EventEmitters.h>
|
|
12
13
|
#import <react/renderer/components/rnscreens/Props.h>
|
|
13
14
|
#import <react/renderer/components/rnscreens/RCTComponentViewHelpers.h>
|
|
14
15
|
#import <rnscreens/RNSScreenComponentDescriptor.h>
|
|
15
|
-
#import <React/RCTFabricComponentsPlugins.h>
|
|
16
16
|
#import "RNSConvert.h"
|
|
17
17
|
#import "RNSScreenViewEvent.h"
|
|
18
18
|
#else
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
|
|
4
4
|
#ifdef RN_FABRIC_ENABLED
|
|
5
5
|
#import <React/RCTConversions.h>
|
|
6
|
+
#import <React/RCTFabricComponentsPlugins.h>
|
|
6
7
|
#import <react/renderer/components/rnscreens/ComponentDescriptors.h>
|
|
7
8
|
#import <react/renderer/components/rnscreens/Props.h>
|
|
8
|
-
#import <React/RCTFabricComponentsPlugins.h>
|
|
9
9
|
#endif
|
|
10
10
|
|
|
11
11
|
@implementation RNScreensViewController
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
#import "RNSScreenContainer.h"
|
|
4
4
|
|
|
5
5
|
#ifdef RN_FABRIC_ENABLED
|
|
6
|
+
#import <React/RCTFabricComponentsPlugins.h>
|
|
6
7
|
#import <react/renderer/components/rnscreens/ComponentDescriptors.h>
|
|
7
8
|
#import <react/renderer/components/rnscreens/Props.h>
|
|
8
|
-
#import <React/RCTFabricComponentsPlugins.h>
|
|
9
9
|
#endif
|
|
10
10
|
|
|
11
11
|
@implementation RNScreensContainerNavigationController
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
#ifdef RN_FABRIC_ENABLED
|
|
2
2
|
#import <React/RCTConversions.h>
|
|
3
|
+
#import <React/RCTFabricComponentsPlugins.h>
|
|
3
4
|
#import <React/UIView+React.h>
|
|
4
5
|
#import <react/renderer/components/rnscreens/ComponentDescriptors.h>
|
|
5
6
|
#import <react/renderer/components/rnscreens/EventEmitters.h>
|
|
6
7
|
#import <react/renderer/components/rnscreens/Props.h>
|
|
7
8
|
#import <react/renderer/components/rnscreens/RCTComponentViewHelpers.h>
|
|
8
|
-
#import <React/RCTFabricComponentsPlugins.h>
|
|
9
9
|
#else
|
|
10
10
|
#import <React/RCTBridge.h>
|
|
11
11
|
#import <React/RCTImageLoader.h>
|
|
@@ -459,7 +459,6 @@
|
|
|
459
459
|
return;
|
|
460
460
|
}
|
|
461
461
|
|
|
462
|
-
navitem.title = config.title;
|
|
463
462
|
#if !TARGET_OS_TV
|
|
464
463
|
if (config.backTitle != nil || config.backTitleFontFamily || config.backTitleFontSize ||
|
|
465
464
|
config.disableBackButtonMenu) {
|
|
@@ -587,6 +586,10 @@
|
|
|
587
586
|
}
|
|
588
587
|
}
|
|
589
588
|
|
|
589
|
+
// This assignment should be done after `navitem.titleView = ...` assignment (iOS 16.0 bug).
|
|
590
|
+
// See: https://github.com/software-mansion/react-native-screens/issues/1570 (comments)
|
|
591
|
+
navitem.title = config.title;
|
|
592
|
+
|
|
590
593
|
if (animated && vc.transitionCoordinator != nil &&
|
|
591
594
|
vc.transitionCoordinator.presentationStyle == UIModalPresentationNone && !wasHidden) {
|
|
592
595
|
// when there is an ongoing transition we may need to update navbar setting in animation block
|
package/ios/RNSSearchBar.mm
CHANGED
|
@@ -8,11 +8,11 @@
|
|
|
8
8
|
|
|
9
9
|
#ifdef RN_FABRIC_ENABLED
|
|
10
10
|
#import <React/RCTConversions.h>
|
|
11
|
+
#import <React/RCTFabricComponentsPlugins.h>
|
|
11
12
|
#import <react/renderer/components/rnscreens/ComponentDescriptors.h>
|
|
12
13
|
#import <react/renderer/components/rnscreens/EventEmitters.h>
|
|
13
14
|
#import <react/renderer/components/rnscreens/Props.h>
|
|
14
15
|
#import <react/renderer/components/rnscreens/RCTComponentViewHelpers.h>
|
|
15
|
-
#import <React/RCTFabricComponentsPlugins.h>
|
|
16
16
|
#import "RNSConvert.h"
|
|
17
17
|
#endif
|
|
18
18
|
|
|
@@ -23,7 +23,7 @@ function getDefaultHeaderHeight(layout, topInset, stackPresentation) {
|
|
|
23
23
|
statusBarHeight = 0;
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
if (_reactNative.Platform.isPad || _reactNative.Platform.
|
|
26
|
+
if (_reactNative.Platform.isPad || _reactNative.Platform.isTV) {
|
|
27
27
|
headerHeight = isFromSheetModal ? formSheetModalHeight : 50;
|
|
28
28
|
} else {
|
|
29
29
|
if (isLandscape) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["getDefaultHeaderHeight.tsx"],"names":["formSheetModalHeight","getDefaultHeaderHeight","layout","topInset","stackPresentation","headerHeight","Platform","OS","statusBarHeight","isLandscape","width","height","isFromSheetModal","isPad","
|
|
1
|
+
{"version":3,"sources":["getDefaultHeaderHeight.tsx"],"names":["formSheetModalHeight","getDefaultHeaderHeight","layout","topInset","stackPresentation","headerHeight","Platform","OS","statusBarHeight","isLandscape","width","height","isFromSheetModal","isPad","isTV"],"mappings":";;;;;;;AAAA;;AAIA,MAAMA,oBAAoB,GAAG,EAA7B;;AAEe,SAASC,sBAAT,CACbC,MADa,EAEbC,QAFa,EAGbC,iBAHa,EAIL;AACR;AACA,MAAIC,YAAY,GAAGC,sBAASC,EAAT,KAAgB,SAAhB,GAA4B,EAA5B,GAAiC,EAApD;AACA,MAAIC,eAAe,GAAGL,QAAtB;;AAEA,MAAIG,sBAASC,EAAT,KAAgB,KAApB,EAA2B;AACzB,UAAME,WAAW,GAAGP,MAAM,CAACQ,KAAP,GAAeR,MAAM,CAACS,MAA1C;AACA,UAAMC,gBAAgB,GACpBR,iBAAiB,KAAK,OAAtB,IAAiCA,iBAAiB,KAAK,WADzD;;AAEA,QAAIQ,gBAAgB,IAAI,CAACH,WAAzB,EAAsC;AACpC;AACAD,MAAAA,eAAe,GAAG,CAAlB;AACD;;AAED,QAAIF,sBAASO,KAAT,IAAkBP,sBAASQ,IAA/B,EAAqC;AACnCT,MAAAA,YAAY,GAAGO,gBAAgB,GAAGZ,oBAAH,GAA0B,EAAzD;AACD,KAFD,MAEO;AACL,UAAIS,WAAJ,EAAiB;AACfJ,QAAAA,YAAY,GAAG,EAAf;AACD,OAFD,MAEO;AACLA,QAAAA,YAAY,GAAGO,gBAAgB,GAAGZ,oBAAH,GAA0B,EAAzD;AACD;AACF;AACF;;AAED,SAAOK,YAAY,GAAGG,eAAtB;AACD","sourcesContent":["import { Platform } from 'react-native';\nimport { StackPresentationTypes } from 'react-native-screens';\ntype Layout = { width: number; height: number };\n\nconst formSheetModalHeight = 56;\n\nexport default function getDefaultHeaderHeight(\n layout: Layout,\n topInset: number,\n stackPresentation: StackPresentationTypes\n): number {\n // default header heights\n let headerHeight = Platform.OS === 'android' ? 56 : 64;\n let statusBarHeight = topInset;\n\n if (Platform.OS === 'ios') {\n const isLandscape = layout.width > layout.height;\n const isFromSheetModal =\n stackPresentation === 'modal' || stackPresentation === 'formSheet';\n if (isFromSheetModal && !isLandscape) {\n // `modal` and `formSheet` presentations do not take whole screen, so should not take the inset.\n statusBarHeight = 0;\n }\n\n if (Platform.isPad || Platform.isTV) {\n headerHeight = isFromSheetModal ? formSheetModalHeight : 50;\n } else {\n if (isLandscape) {\n headerHeight = 32;\n } else {\n headerHeight = isFromSheetModal ? formSheetModalHeight : 44;\n }\n }\n }\n\n return headerHeight + statusBarHeight;\n}\n"]}
|
|
@@ -14,7 +14,7 @@ export default function getDefaultHeaderHeight(layout, topInset, stackPresentati
|
|
|
14
14
|
statusBarHeight = 0;
|
|
15
15
|
}
|
|
16
16
|
|
|
17
|
-
if (Platform.isPad || Platform.
|
|
17
|
+
if (Platform.isPad || Platform.isTV) {
|
|
18
18
|
headerHeight = isFromSheetModal ? formSheetModalHeight : 50;
|
|
19
19
|
} else {
|
|
20
20
|
if (isLandscape) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["getDefaultHeaderHeight.tsx"],"names":["Platform","formSheetModalHeight","getDefaultHeaderHeight","layout","topInset","stackPresentation","headerHeight","OS","statusBarHeight","isLandscape","width","height","isFromSheetModal","isPad","
|
|
1
|
+
{"version":3,"sources":["getDefaultHeaderHeight.tsx"],"names":["Platform","formSheetModalHeight","getDefaultHeaderHeight","layout","topInset","stackPresentation","headerHeight","OS","statusBarHeight","isLandscape","width","height","isFromSheetModal","isPad","isTV"],"mappings":"AAAA,SAASA,QAAT,QAAyB,cAAzB;AAIA,MAAMC,oBAAoB,GAAG,EAA7B;AAEA,eAAe,SAASC,sBAAT,CACbC,MADa,EAEbC,QAFa,EAGbC,iBAHa,EAIL;AACR;AACA,MAAIC,YAAY,GAAGN,QAAQ,CAACO,EAAT,KAAgB,SAAhB,GAA4B,EAA5B,GAAiC,EAApD;AACA,MAAIC,eAAe,GAAGJ,QAAtB;;AAEA,MAAIJ,QAAQ,CAACO,EAAT,KAAgB,KAApB,EAA2B;AACzB,UAAME,WAAW,GAAGN,MAAM,CAACO,KAAP,GAAeP,MAAM,CAACQ,MAA1C;AACA,UAAMC,gBAAgB,GACpBP,iBAAiB,KAAK,OAAtB,IAAiCA,iBAAiB,KAAK,WADzD;;AAEA,QAAIO,gBAAgB,IAAI,CAACH,WAAzB,EAAsC;AACpC;AACAD,MAAAA,eAAe,GAAG,CAAlB;AACD;;AAED,QAAIR,QAAQ,CAACa,KAAT,IAAkBb,QAAQ,CAACc,IAA/B,EAAqC;AACnCR,MAAAA,YAAY,GAAGM,gBAAgB,GAAGX,oBAAH,GAA0B,EAAzD;AACD,KAFD,MAEO;AACL,UAAIQ,WAAJ,EAAiB;AACfH,QAAAA,YAAY,GAAG,EAAf;AACD,OAFD,MAEO;AACLA,QAAAA,YAAY,GAAGM,gBAAgB,GAAGX,oBAAH,GAA0B,EAAzD;AACD;AACF;AACF;;AAED,SAAOK,YAAY,GAAGE,eAAtB;AACD","sourcesContent":["import { Platform } from 'react-native';\nimport { StackPresentationTypes } from 'react-native-screens';\ntype Layout = { width: number; height: number };\n\nconst formSheetModalHeight = 56;\n\nexport default function getDefaultHeaderHeight(\n layout: Layout,\n topInset: number,\n stackPresentation: StackPresentationTypes\n): number {\n // default header heights\n let headerHeight = Platform.OS === 'android' ? 56 : 64;\n let statusBarHeight = topInset;\n\n if (Platform.OS === 'ios') {\n const isLandscape = layout.width > layout.height;\n const isFromSheetModal =\n stackPresentation === 'modal' || stackPresentation === 'formSheet';\n if (isFromSheetModal && !isLandscape) {\n // `modal` and `formSheet` presentations do not take whole screen, so should not take the inset.\n statusBarHeight = 0;\n }\n\n if (Platform.isPad || Platform.isTV) {\n headerHeight = isFromSheetModal ? formSheetModalHeight : 50;\n } else {\n if (isLandscape) {\n headerHeight = 32;\n } else {\n headerHeight = isFromSheetModal ? formSheetModalHeight : 44;\n }\n }\n }\n\n return headerHeight + statusBarHeight;\n}\n"]}
|