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.
Files changed (51) hide show
  1. package/README.md +5 -1
  2. package/android/build.gradle +0 -34
  3. package/android/src/main/java/com/swmansion/rnscreens/CustomSearchView.kt +2 -0
  4. package/android/src/main/java/com/swmansion/rnscreens/LifecycleHelper.kt +1 -2
  5. package/android/src/main/java/com/swmansion/rnscreens/RNScreensPackage.kt +2 -11
  6. package/android/src/main/java/com/swmansion/rnscreens/Screen.kt +1 -6
  7. package/android/src/main/java/com/swmansion/rnscreens/ScreenContainer.kt +18 -31
  8. package/android/src/main/java/com/swmansion/rnscreens/ScreenContainerViewManager.kt +6 -18
  9. package/android/src/main/java/com/swmansion/rnscreens/ScreenFragment.kt +23 -34
  10. package/android/src/main/java/com/swmansion/rnscreens/ScreenStack.kt +19 -38
  11. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragment.kt +37 -32
  12. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfig.kt +14 -26
  13. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigViewManager.kt +6 -18
  14. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubview.kt +2 -6
  15. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubviewManager.kt +3 -9
  16. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackViewManager.kt +11 -32
  17. package/android/src/main/java/com/swmansion/rnscreens/ScreenViewManager.kt +3 -10
  18. package/android/src/main/java/com/swmansion/rnscreens/ScreenWindowTraits.kt +1 -0
  19. package/android/src/main/jni/CMakeLists.txt +72 -0
  20. package/android/src/main/jni/rnscreens.cpp +16 -0
  21. package/android/src/main/jni/rnscreens.h +28 -0
  22. package/common/cpp/{rnscreens → react/renderer/components/rnscreens}/RNSScreenComponentDescriptor.h +0 -0
  23. package/common/cpp/{rnscreens → react/renderer/components/rnscreens}/RNSScreenShadowNode.cpp +0 -0
  24. package/common/cpp/{rnscreens → react/renderer/components/rnscreens}/RNSScreenShadowNode.h +3 -2
  25. package/common/cpp/{rnscreens → react/renderer/components/rnscreens}/RNSScreenState.cpp +0 -0
  26. package/common/cpp/{rnscreens → react/renderer/components/rnscreens}/RNSScreenState.h +1 -1
  27. package/ios/RNSFullWindowOverlay.mm +1 -1
  28. package/ios/RNSScreen.mm +1 -1
  29. package/ios/RNSScreenContainer.mm +1 -1
  30. package/ios/RNSScreenNavigationContainer.mm +1 -1
  31. package/ios/RNSScreenStackHeaderConfig.mm +5 -2
  32. package/ios/RNSSearchBar.mm +1 -1
  33. package/lib/commonjs/native-stack/utils/getDefaultHeaderHeight.js +1 -1
  34. package/lib/commonjs/native-stack/utils/getDefaultHeaderHeight.js.map +1 -1
  35. package/lib/module/native-stack/utils/getDefaultHeaderHeight.js +1 -1
  36. package/lib/module/native-stack/utils/getDefaultHeaderHeight.js.map +1 -1
  37. package/lib/typescript/native-stack/types.d.ts +5 -5
  38. package/lib/typescript/reanimated/ReanimatedNativeStackScreen.d.ts +1 -1
  39. package/lib/typescript/reanimated/ReanimatedScreen.d.ts +1 -1
  40. package/lib/typescript/types.d.ts +20 -5
  41. package/package.json +8 -8
  42. package/react-native.config.js +19 -0
  43. package/src/native-stack/types.tsx +5 -5
  44. package/src/native-stack/utils/getDefaultHeaderHeight.tsx +1 -1
  45. package/src/types.tsx +20 -5
  46. package/android/src/fabric/java/com/swmansion/rnscreens/RNScreensComponentsRegistry.java +0 -28
  47. package/android/src/main/jni/Android.mk +0 -44
  48. package/android/src/main/jni/OnLoad.cpp +0 -9
  49. package/android/src/main/jni/RNScreensComponentsRegistry.cpp +0 -66
  50. package/android/src/main/jni/RNScreensComponentsRegistry.h +0 -34
  51. 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
- val navigationIcon = toolbar.navigationIcon
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
- var i = 0
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): ScreenStackHeaderConfig {
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(): Boolean {
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(): String {
21
- return REACT_CLASS
22
- }
20
+ override fun getName() = REACT_CLASS
23
21
 
24
- override fun createViewInstance(context: ThemedReactContext): ScreenStackHeaderSubview {
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(): String {
25
- return REACT_CLASS
26
- }
23
+ override fun getName() = REACT_CLASS
27
24
 
28
- override fun createViewInstance(reactContext: ThemedReactContext): ScreenStack {
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
- val size = it.childCount
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): Int {
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(): Boolean {
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
- return MapBuilder.of(
88
- StackFinishTransitioningEvent.EVENT_NAME,
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(): String {
31
- return REACT_CLASS
32
- }
29
+ override fun getName() = REACT_CLASS
33
30
 
34
- override fun createViewInstance(reactContext: ThemedReactContext): Screen {
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 &params) {
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 &params);
26
+
27
+ } // namespace react
28
+ } // namespace facebook
@@ -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,
@@ -13,7 +13,7 @@
13
13
  namespace facebook {
14
14
  namespace react {
15
15
 
16
- class RNSScreenState final {
16
+ class JSI_EXPORT RNSScreenState final {
17
17
  public:
18
18
  using Shared = std::shared_ptr<const RNSScreenState>;
19
19
 
@@ -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
@@ -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.isTVOS) {
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","isTVOS"],"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,MAA/B,EAAuC;AACrCT,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.isTVOS) {\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"]}
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.isTVOS) {
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","isTVOS"],"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,MAA/B,EAAuC;AACrCR,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.isTVOS) {\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"]}
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"]}