react-native-screens 3.13.0 → 3.14.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 (141) hide show
  1. package/README.md +2 -2
  2. package/RNScreens.podspec +5 -4
  3. package/android/build.gradle +18 -1
  4. package/android/src/main/java/com/swmansion/rnscreens/ScreenStack.kt +8 -4
  5. package/android/src/main/java/com/swmansion/rnscreens/ScreenViewManager.kt +24 -6
  6. package/android/src/main/java/com/swmansion/rnscreens/ScreenWindowTraits.kt +14 -18
  7. package/android/src/main/jni/Android.mk +1 -2
  8. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerDelegate.java +39 -14
  9. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerInterface.java +15 -6
  10. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderConfigManagerDelegate.java +3 -3
  11. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderConfigManagerInterface.java +1 -1
  12. package/common/cpp/Android.mk +1 -2
  13. package/createNativeStackNavigator/README.md +4 -0
  14. package/ios/RNSConvert.h +30 -0
  15. package/ios/RNSConvert.mm +120 -0
  16. package/ios/RNSEnums.h +59 -0
  17. package/ios/RNSFullWindowOverlay.h +17 -2
  18. package/ios/RNSFullWindowOverlay.mm +199 -0
  19. package/ios/RNSScreen.h +70 -79
  20. package/ios/{RNSScreen.m → RNSScreen.mm} +679 -302
  21. package/ios/RNSScreenContainer.h +15 -1
  22. package/ios/{RNSScreenContainer.m → RNSScreenContainer.mm} +99 -8
  23. package/ios/{RNSScreenNavigationContainer.m → RNSScreenNavigationContainer.mm} +22 -0
  24. package/ios/RNSScreenStack.h +19 -3
  25. package/ios/{RNSScreenStack.m → RNSScreenStack.mm} +377 -126
  26. package/ios/{RNSScreenStackAnimator.m → RNSScreenStackAnimator.mm} +19 -14
  27. package/ios/RNSScreenStackHeaderConfig.h +20 -21
  28. package/ios/{RNSScreenStackHeaderConfig.m → RNSScreenStackHeaderConfig.mm} +232 -117
  29. package/ios/RNSScreenStackHeaderSubview.h +45 -0
  30. package/ios/RNSScreenStackHeaderSubview.mm +137 -0
  31. package/ios/RNSScreenViewEvent.h +12 -0
  32. package/ios/RNSScreenViewEvent.mm +59 -0
  33. package/ios/{RNSScreenWindowTraits.m → RNSScreenWindowTraits.mm} +3 -2
  34. package/ios/RNSSearchBar.h +14 -1
  35. package/ios/RNSSearchBar.mm +351 -0
  36. package/ios/{UIViewController+RNScreens.m → UIViewController+RNScreens.mm} +0 -0
  37. package/ios/{UIWindow+RNScreens.m → UIWindow+RNScreens.mm} +0 -0
  38. package/lib/commonjs/fabric/FullWindowOverlay.js +26 -0
  39. package/lib/commonjs/fabric/FullWindowOverlay.js.map +1 -0
  40. package/lib/commonjs/fabric/FullWindowOverlayNativeComponent.js +21 -0
  41. package/lib/commonjs/fabric/FullWindowOverlayNativeComponent.js.map +1 -0
  42. package/lib/commonjs/fabric/Screen.js +10 -8
  43. package/lib/commonjs/fabric/Screen.js.map +1 -1
  44. package/lib/commonjs/fabric/ScreenContainer.js +28 -0
  45. package/lib/commonjs/fabric/ScreenContainer.js.map +1 -0
  46. package/lib/commonjs/fabric/ScreenContainerNativeComponent.js +21 -0
  47. package/lib/commonjs/fabric/ScreenContainerNativeComponent.js.map +1 -0
  48. package/lib/commonjs/fabric/ScreenNativeComponent.js.map +1 -1
  49. package/lib/commonjs/fabric/ScreenNavigationContainer.js +28 -0
  50. package/lib/commonjs/fabric/ScreenNavigationContainer.js.map +1 -0
  51. package/lib/commonjs/fabric/ScreenNavigationContainerNativeComponent.js +21 -0
  52. package/lib/commonjs/fabric/ScreenNavigationContainerNativeComponent.js.map +1 -0
  53. package/lib/commonjs/fabric/ScreenStack.js +6 -7
  54. package/lib/commonjs/fabric/ScreenStack.js.map +1 -1
  55. package/lib/commonjs/fabric/ScreenStackHeaderConfigNativeComponent.js.map +1 -1
  56. package/lib/commonjs/fabric/ScreenStackHeaderSubview.js +4 -1
  57. package/lib/commonjs/fabric/ScreenStackHeaderSubview.js.map +1 -1
  58. package/lib/commonjs/fabric/ScreenStackNativeComponent.js.map +1 -1
  59. package/lib/commonjs/fabric/SearchBar.js +37 -0
  60. package/lib/commonjs/fabric/SearchBar.js.map +1 -0
  61. package/lib/commonjs/fabric/SearchBarNativeComponent.js +25 -0
  62. package/lib/commonjs/fabric/SearchBarNativeComponent.js.map +1 -0
  63. package/lib/commonjs/fabric/index.js +32 -0
  64. package/lib/commonjs/fabric/index.js.map +1 -1
  65. package/lib/commonjs/index.native.js +14 -18
  66. package/lib/commonjs/index.native.js.map +1 -1
  67. package/lib/commonjs/native-stack/views/NativeStackView.js +4 -0
  68. package/lib/commonjs/native-stack/views/NativeStackView.js.map +1 -1
  69. package/lib/commonjs/reanimated/ReanimatedNativeStackScreen.js +8 -2
  70. package/lib/commonjs/reanimated/ReanimatedNativeStackScreen.js.map +1 -1
  71. package/lib/module/fabric/FullWindowOverlay.js +15 -0
  72. package/lib/module/fabric/FullWindowOverlay.js.map +1 -0
  73. package/lib/module/fabric/FullWindowOverlayNativeComponent.js +9 -0
  74. package/lib/module/fabric/FullWindowOverlayNativeComponent.js.map +1 -0
  75. package/lib/module/fabric/Screen.js +8 -3
  76. package/lib/module/fabric/Screen.js.map +1 -1
  77. package/lib/module/fabric/ScreenContainer.js +17 -0
  78. package/lib/module/fabric/ScreenContainer.js.map +1 -0
  79. package/lib/module/fabric/ScreenContainerNativeComponent.js +9 -0
  80. package/lib/module/fabric/ScreenContainerNativeComponent.js.map +1 -0
  81. package/lib/module/fabric/ScreenNativeComponent.js.map +1 -1
  82. package/lib/module/fabric/ScreenNavigationContainer.js +17 -0
  83. package/lib/module/fabric/ScreenNavigationContainer.js.map +1 -0
  84. package/lib/module/fabric/ScreenNavigationContainerNativeComponent.js +9 -0
  85. package/lib/module/fabric/ScreenNavigationContainerNativeComponent.js.map +1 -0
  86. package/lib/module/fabric/ScreenStack.js +5 -2
  87. package/lib/module/fabric/ScreenStack.js.map +1 -1
  88. package/lib/module/fabric/ScreenStackHeaderConfigNativeComponent.js.map +1 -1
  89. package/lib/module/fabric/ScreenStackHeaderSubview.js +4 -1
  90. package/lib/module/fabric/ScreenStackHeaderSubview.js.map +1 -1
  91. package/lib/module/fabric/ScreenStackNativeComponent.js.map +1 -1
  92. package/lib/module/fabric/SearchBar.js +24 -0
  93. package/lib/module/fabric/SearchBar.js.map +1 -0
  94. package/lib/module/fabric/SearchBarNativeComponent.js +11 -0
  95. package/lib/module/fabric/SearchBarNativeComponent.js.map +1 -0
  96. package/lib/module/fabric/index.js +5 -1
  97. package/lib/module/fabric/index.js.map +1 -1
  98. package/lib/module/index.native.js +15 -20
  99. package/lib/module/index.native.js.map +1 -1
  100. package/lib/module/native-stack/views/NativeStackView.js +4 -0
  101. package/lib/module/native-stack/views/NativeStackView.js.map +1 -1
  102. package/lib/module/reanimated/ReanimatedNativeStackScreen.js +7 -2
  103. package/lib/module/reanimated/ReanimatedNativeStackScreen.js.map +1 -1
  104. package/lib/typescript/native-stack/types.d.ts +12 -0
  105. package/lib/typescript/reanimated/ReanimatedNativeStackScreen.d.ts +1 -1
  106. package/lib/typescript/reanimated/ReanimatedScreen.d.ts +1 -1
  107. package/lib/typescript/types.d.ts +24 -0
  108. package/native-stack/README.md +21 -0
  109. package/package.json +2 -2
  110. package/src/fabric/FullWindowOverlay.js +13 -0
  111. package/src/fabric/FullWindowOverlayNativeComponent.js +19 -0
  112. package/src/fabric/Screen.js +5 -2
  113. package/src/fabric/ScreenContainer.js +16 -0
  114. package/src/fabric/ScreenContainerNativeComponent.js +19 -0
  115. package/src/fabric/ScreenNativeComponent.js +41 -8
  116. package/src/fabric/ScreenNavigationContainer.js +16 -0
  117. package/src/fabric/ScreenNavigationContainerNativeComponent.js +19 -0
  118. package/src/fabric/ScreenStack.js +4 -2
  119. package/src/fabric/ScreenStackHeaderConfigNativeComponent.js +1 -1
  120. package/src/fabric/ScreenStackHeaderSubview.js +3 -1
  121. package/src/fabric/ScreenStackNativeComponent.js +4 -0
  122. package/src/fabric/SearchBar.js +20 -0
  123. package/src/fabric/SearchBarNativeComponent.js +62 -0
  124. package/src/fabric/index.js +8 -0
  125. package/src/index.native.tsx +20 -19
  126. package/src/native-stack/types.tsx +12 -0
  127. package/src/native-stack/views/NativeStackView.tsx +4 -0
  128. package/src/reanimated/ReanimatedNativeStackScreen.tsx +6 -0
  129. package/src/types.tsx +25 -0
  130. package/ios/RNSFullWindowOverlay.m +0 -105
  131. package/ios/RNSScreenComponentView.h +0 -23
  132. package/ios/RNSScreenComponentView.mm +0 -159
  133. package/ios/RNSScreenController.h +0 -10
  134. package/ios/RNSScreenController.mm +0 -79
  135. package/ios/RNSScreenStackComponentView.h +0 -15
  136. package/ios/RNSScreenStackComponentView.mm +0 -295
  137. package/ios/RNSScreenStackHeaderConfigComponentView.h +0 -42
  138. package/ios/RNSScreenStackHeaderConfigComponentView.mm +0 -662
  139. package/ios/RNSScreenStackHeaderSubviewComponentView.h +0 -14
  140. package/ios/RNSScreenStackHeaderSubviewComponentView.mm +0 -77
  141. package/ios/RNSSearchBar.m +0 -198
package/README.md CHANGED
@@ -18,7 +18,7 @@ To learn about how to use `react-native-screens` with Fabric architecture, head
18
18
 
19
19
  ### iOS
20
20
 
21
- Installation on iOS should be completely handled with auto-linking, if you have ensured pods are installed after adding this module, no other actions should be necessary
21
+ Installation on iOS should be completely handled with auto-linking, if you have ensured pods are installed after adding this module, no other actions should be necessary.
22
22
 
23
23
  ### Android
24
24
 
@@ -174,7 +174,7 @@ React native screens library is licensed under [The MIT License](LICENSE).
174
174
 
175
175
  ## Credits
176
176
 
177
- This project has been build and is maintained thanks to the support from [Shopify](https://shopify.com), [Expo.io](https://expo.io) and [Software Mansion](https://swmansion.com)
177
+ This project has been build and is maintained thanks to the support from [Shopify](https://shopify.com), [Expo.io](https://expo.io), and [Software Mansion](https://swmansion.com).
178
178
 
179
179
  [![shopify](https://avatars1.githubusercontent.com/u/8085?v=3&s=100 'Shopify.com')](https://shopify.com)
180
180
  [![expo](https://avatars2.githubusercontent.com/u/12504344?v=3&s=100 'Expo.io')](https://expo.io)
package/RNScreens.podspec CHANGED
@@ -2,7 +2,7 @@ require "json"
2
2
 
3
3
  package = JSON.parse(File.read(File.join(__dir__, "package.json")))
4
4
 
5
- fabric_enabled = ENV['RCT_NEW_ARCH_ENABLED']
5
+ fabric_enabled = ENV['RCT_NEW_ARCH_ENABLED'] == '1'
6
6
 
7
7
  # folly_version must match the version used in React Native
8
8
  # See folly_version in react-native/React/FBReactNativeSpec/FBReactNativeSpec.podspec
@@ -25,10 +25,11 @@ Pod::Spec.new do |s|
25
25
 
26
26
  if fabric_enabled
27
27
  s.pod_target_xcconfig = {
28
- 'HEADER_SEARCH_PATHS' => '"$(PODS_ROOT)/boost" "$(PODS_ROOT)/boost-for-react-native" "$(PODS_ROOT)/RCT-Folly"'
28
+ 'HEADER_SEARCH_PATHS' => '"$(PODS_ROOT)/boost" "$(PODS_ROOT)/boost-for-react-native" "$(PODS_ROOT)/RCT-Folly"',
29
+ "CLANG_CXX_LANGUAGE_STANDARD" => "c++17",
29
30
  }
30
31
  s.platforms = { ios: '11.0', tvos: '11.0' }
31
- s.compiler_flags = folly_compiler_flags
32
+ s.compiler_flags = folly_compiler_flags + ' ' + '-DRN_FABRIC_ENABLED'
32
33
  s.source_files = 'ios/**/*.{h,m,mm,cpp}'
33
34
  s.requires_arc = true
34
35
 
@@ -46,7 +47,7 @@ Pod::Spec.new do |s|
46
47
  ss.pod_target_xcconfig = { "HEADER_SEARCH_PATHS" => "\"$(PODS_TARGET_SRCROOT)/common/cpp\"" }
47
48
  end
48
49
  else
49
- s.source_files = "ios/**/*.{h,m}"
50
+ s.source_files = "ios/**/*.{h,m,mm}"
50
51
  s.requires_arc = true
51
52
 
52
53
  s.dependency "React-Core"
@@ -8,7 +8,7 @@ buildscript {
8
8
  }
9
9
  dependencies {
10
10
  classpath('com.android.tools.build:gradle:4.2.2')
11
- classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${safeExtGet('kotlinVersion', '1.4.10')}"
11
+ classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${safeExtGet('kotlinVersion', '1.6.21')}"
12
12
  classpath "com.diffplug.spotless:spotless-plugin-gradle:5.15.0"
13
13
  }
14
14
  }
@@ -32,9 +32,23 @@ if (isNewArchitectureEnabled()) {
32
32
  apply plugin: 'com.android.library'
33
33
  apply plugin: 'kotlin-android'
34
34
 
35
+ def reactNativeArchitectures() {
36
+ def value = project.getProperties().get("reactNativeArchitectures")
37
+ return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"]
38
+ }
39
+
35
40
  android {
36
41
  compileSdkVersion safeExtGet('compileSdkVersion', 28)
37
42
 
43
+ // Used to override the NDK path/version on internal CI or by allowing
44
+ // users to customize the NDK path/version from their root project (e.g. for M1 support)
45
+ if (rootProject.hasProperty("ndkPath")) {
46
+ ndkPath rootProject.ext.ndkPath
47
+ }
48
+ if (rootProject.hasProperty("ndkVersion")) {
49
+ ndkVersion rootProject.ext.ndkVersion
50
+ }
51
+
38
52
  defaultConfig {
39
53
  minSdkVersion safeExtGet('minSdkVersion', 16)
40
54
  targetSdkVersion safeExtGet('targetSdkVersion', 22)
@@ -58,6 +72,9 @@ android {
58
72
  }
59
73
  }
60
74
  }
75
+ ndk {
76
+ abiFilters (*reactNativeArchitectures())
77
+ }
61
78
  }
62
79
  lintOptions {
63
80
  abortOnError false
@@ -15,7 +15,7 @@ class ScreenStack(context: Context?) : ScreenContainer<ScreenStackFragment>(cont
15
15
  private val mStack = ArrayList<ScreenStackFragment>()
16
16
  private val mDismissed: MutableSet<ScreenStackFragment> = HashSet()
17
17
  private val drawingOpPool: MutableList<DrawingOp> = ArrayList()
18
- private val drawingOps: MutableList<DrawingOp> = ArrayList()
18
+ private var drawingOps: MutableList<DrawingOp> = ArrayList()
19
19
  private var mTopScreen: ScreenStackFragment? = null
20
20
  private var mRemovalTransitionStarted = false
21
21
  private var isDetachingCurrentScreen = false
@@ -273,12 +273,16 @@ class ScreenStack(context: Context?) : ScreenContainer<ScreenStackFragment>(cont
273
273
  }
274
274
 
275
275
  private fun drawAndRelease() {
276
- for (i in drawingOps.indices) {
277
- val op = drawingOps[i]
276
+ // We make a copy of the drawingOps and use it to dispatch draws in order to be sure
277
+ // that we do not modify the original list. There are cases when `op.draw` can call
278
+ // `drawChild` which would modify the list through which we are iterating. See more:
279
+ // https://github.com/software-mansion/react-native-screens/pull/1406
280
+ val drawingOpsCopy = drawingOps
281
+ drawingOps = ArrayList()
282
+ for (op in drawingOpsCopy) {
278
283
  op.draw()
279
284
  drawingOpPool.add(op)
280
285
  }
281
- drawingOps.clear()
282
286
  }
283
287
 
284
288
  override fun dispatchDraw(canvas: Canvas) {
@@ -1,12 +1,9 @@
1
1
  package com.swmansion.rnscreens
2
2
 
3
- import androidx.annotation.NonNull
4
- import androidx.annotation.Nullable
5
3
  import com.facebook.react.bridge.JSApplicationIllegalArgumentException
4
+ import com.facebook.react.bridge.ReadableMap
6
5
  import com.facebook.react.common.MapBuilder
7
6
  import com.facebook.react.module.annotations.ReactModule
8
- import com.facebook.react.uimanager.ReactStylesDiffMap
9
- import com.facebook.react.uimanager.StateWrapper
10
7
  import com.facebook.react.uimanager.ThemedReactContext
11
8
  import com.facebook.react.uimanager.ViewGroupManager
12
9
  import com.facebook.react.uimanager.ViewManagerDelegate
@@ -38,8 +35,12 @@ class ScreenViewManager : ViewGroupManager<Screen>(), RNSScreenManagerInterface<
38
35
  return Screen(reactContext)
39
36
  }
40
37
 
38
+ override fun setActivityState(view: Screen, activityState: Float) {
39
+ setActivityState(view, activityState.toInt())
40
+ }
41
+
41
42
  @ReactProp(name = "activityState")
42
- override fun setActivityState(view: Screen, activityState: Int) {
43
+ fun setActivityState(view: Screen, activityState: Int) {
43
44
  if (activityState == -1) {
44
45
  // Null will be provided when activityState is set as an animated value and we change
45
46
  // it from JS to be a plain value (non animated).
@@ -105,7 +106,7 @@ class ScreenViewManager : ViewGroupManager<Screen>(), RNSScreenManagerInterface<
105
106
  view.isStatusBarAnimated = animated
106
107
  }
107
108
 
108
- @ReactProp(name = "statusBarColor")
109
+ @ReactProp(name = "statusBarColor", customType = "Color")
109
110
  override fun setStatusBarColor(view: Screen, statusBarColor: Int?) {
110
111
  view.statusBarColor = statusBarColor
111
112
  }
@@ -143,6 +144,23 @@ class ScreenViewManager : ViewGroupManager<Screen>(), RNSScreenManagerInterface<
143
144
  view.nativeBackButtonDismissalEnabled = nativeBackButtonDismissalEnabled
144
145
  }
145
146
 
147
+ // these props are not available on Android, however we must override their setters
148
+ override fun setFullScreenSwipeEnabled(view: Screen?, value: Boolean) = Unit
149
+
150
+ override fun setTransitionDuration(view: Screen?, value: Int) = Unit
151
+
152
+ override fun setHideKeyboardOnSwipe(view: Screen?, value: Boolean) = Unit
153
+
154
+ override fun setCustomAnimationOnSwipe(view: Screen?, value: Boolean) = Unit
155
+
156
+ override fun setGestureResponseDistance(view: Screen?, value: ReadableMap?) = Unit
157
+
158
+ override fun setHomeIndicatorHidden(view: Screen?, value: Boolean) = Unit
159
+
160
+ override fun setPreventNativeDismiss(view: Screen?, value: Boolean) = Unit
161
+
162
+ override fun setSwipeDirection(view: Screen?, value: String?) = Unit
163
+
146
164
  override fun getExportedCustomDirectEventTypeConstants(): MutableMap<String, Any> {
147
165
  val map: MutableMap<String, Any> = MapBuilder.of(
148
166
  ScreenDismissedEvent.EVENT_NAME,
@@ -8,9 +8,7 @@ import android.app.Activity
8
8
  import android.content.pm.ActivityInfo
9
9
  import android.graphics.Color
10
10
  import android.os.Build
11
- import android.view.View
12
11
  import android.view.ViewParent
13
- import android.view.WindowManager
14
12
  import androidx.core.view.ViewCompat
15
13
  import androidx.core.view.WindowCompat
16
14
  import androidx.core.view.WindowInsetsCompat
@@ -64,12 +62,12 @@ object ScreenWindowTraits {
64
62
  UiThreadUtil.runOnUiThread(
65
63
  object : GuardedRunnable(context) {
66
64
  override fun runGuarded() {
67
- activity
68
- .window
69
- .addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
70
- val curColor = activity.window.statusBarColor
65
+ val window = activity.window
66
+ val curColor: Int = window.statusBarColor
71
67
  val colorAnimation = ValueAnimator.ofObject(ArgbEvaluator(), curColor, color)
72
- colorAnimation.addUpdateListener { animator -> activity.window.statusBarColor = (animator.animatedValue as Int) }
68
+ colorAnimation.addUpdateListener { animator ->
69
+ window.statusBarColor = animator.animatedValue as Int
70
+ }
73
71
  if (animated) {
74
72
  colorAnimation.setDuration(300).startDelay = 0
75
73
  } else {
@@ -89,13 +87,10 @@ object ScreenWindowTraits {
89
87
 
90
88
  UiThreadUtil.runOnUiThread {
91
89
  val decorView = activity.window.decorView
92
- var systemUiVisibilityFlags = decorView.systemUiVisibility
93
- systemUiVisibilityFlags = if ("dark" == style) {
94
- systemUiVisibilityFlags or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
95
- } else {
96
- systemUiVisibilityFlags and View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR.inv()
97
- }
98
- decorView.systemUiVisibility = systemUiVisibilityFlags
90
+ val window = activity.window
91
+ val controller = WindowInsetsControllerCompat(window, decorView)
92
+
93
+ controller.isAppearanceLightStatusBars = style == "dark"
99
94
  }
100
95
  }
101
96
 
@@ -140,13 +135,14 @@ object ScreenWindowTraits {
140
135
  }
141
136
  val screenForHidden = findScreenForTrait(screen, WindowTraits.HIDDEN)
142
137
  val hidden = screenForHidden?.isStatusBarHidden ?: false
138
+ val window = activity.window
139
+ val controller = WindowInsetsControllerCompat(window, window.decorView)
140
+
143
141
  UiThreadUtil.runOnUiThread {
144
142
  if (hidden) {
145
- activity.window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
146
- activity.window.clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN)
143
+ controller.hide(WindowInsetsCompat.Type.statusBars())
147
144
  } else {
148
- activity.window.addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN)
149
- activity.window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
145
+ controller.show(WindowInsetsCompat.Type.statusBars())
150
146
  }
151
147
  }
152
148
  }
@@ -20,7 +20,7 @@ LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH) $(GENERATED_SRC_DIR)/codegen/jni
20
20
  LOCAL_SHARED_LIBRARIES := libjsi \
21
21
  libfbjni \
22
22
  libglog \
23
- libfolly_json \
23
+ libfolly_runtime \
24
24
  libyoga \
25
25
  libreact_nativemodule_core \
26
26
  libturbomodulejsijni \
@@ -28,7 +28,6 @@ LOCAL_SHARED_LIBRARIES := libjsi \
28
28
  libreact_render_core \
29
29
  libreact_render_graphics \
30
30
  libfabricjni \
31
- libfolly_futures \
32
31
  libreact_debug \
33
32
  libreact_render_componentregistry \
34
33
  libreact_render_debug \
@@ -12,6 +12,7 @@ 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.bridge.ReadableMap;
15
16
  import com.facebook.react.uimanager.BaseViewManagerDelegate;
16
17
  import com.facebook.react.uimanager.BaseViewManagerInterface;
17
18
 
@@ -22,17 +23,26 @@ public class RNSScreenManagerDelegate<T extends View, U extends BaseViewManagerI
22
23
  @Override
23
24
  public void setProperty(T view, String propName, @Nullable Object value) {
24
25
  switch (propName) {
25
- case "stackPresentation":
26
- mViewManager.setStackPresentation(view, (String) value);
26
+ case "customAnimationOnSwipe":
27
+ mViewManager.setCustomAnimationOnSwipe(view, value == null ? false : (boolean) value);
27
28
  break;
28
- case "stackAnimation":
29
- mViewManager.setStackAnimation(view, (String) value);
29
+ case "fullScreenSwipeEnabled":
30
+ mViewManager.setFullScreenSwipeEnabled(view, value == null ? false : (boolean) value);
31
+ break;
32
+ case "homeIndicatorHidden":
33
+ mViewManager.setHomeIndicatorHidden(view, value == null ? false : (boolean) value);
34
+ break;
35
+ case "preventNativeDismiss":
36
+ mViewManager.setPreventNativeDismiss(view, value == null ? false : (boolean) value);
30
37
  break;
31
38
  case "gestureEnabled":
32
39
  mViewManager.setGestureEnabled(view, value == null ? true : (boolean) value);
33
40
  break;
34
- case "replaceAnimation":
35
- mViewManager.setReplaceAnimation(view, (String) value);
41
+ case "statusBarColor":
42
+ mViewManager.setStatusBarColor(view, ColorPropConverter.getColor(value, view.getContext()));
43
+ break;
44
+ case "statusBarHidden":
45
+ mViewManager.setStatusBarHidden(view, value == null ? false : (boolean) value);
36
46
  break;
37
47
  case "screenOrientation":
38
48
  mViewManager.setScreenOrientation(view, value == null ? null : (String) value);
@@ -40,17 +50,35 @@ public class RNSScreenManagerDelegate<T extends View, U extends BaseViewManagerI
40
50
  case "statusBarAnimation":
41
51
  mViewManager.setStatusBarAnimation(view, value == null ? null : (String) value);
42
52
  break;
43
- case "statusBarColor":
44
- mViewManager.setStatusBarColor(view, ColorPropConverter.getColor(value, view.getContext()));
45
- break;
46
53
  case "statusBarStyle":
47
54
  mViewManager.setStatusBarStyle(view, value == null ? null : (String) value);
48
55
  break;
49
56
  case "statusBarTranslucent":
50
57
  mViewManager.setStatusBarTranslucent(view, value == null ? false : (boolean) value);
51
58
  break;
52
- case "statusBarHidden":
53
- mViewManager.setStatusBarHidden(view, value == null ? false : (boolean) value);
59
+ case "gestureResponseDistance":
60
+ mViewManager.setGestureResponseDistance(view, (ReadableMap) value);
61
+ break;
62
+ case "stackPresentation":
63
+ mViewManager.setStackPresentation(view, (String) value);
64
+ break;
65
+ case "stackAnimation":
66
+ mViewManager.setStackAnimation(view, (String) value);
67
+ break;
68
+ case "transitionDuration":
69
+ mViewManager.setTransitionDuration(view, value == null ? 350 : ((Double) value).intValue());
70
+ break;
71
+ case "replaceAnimation":
72
+ mViewManager.setReplaceAnimation(view, (String) value);
73
+ break;
74
+ case "swipeDirection":
75
+ mViewManager.setSwipeDirection(view, (String) value);
76
+ break;
77
+ case "hideKeyboardOnSwipe":
78
+ mViewManager.setHideKeyboardOnSwipe(view, value == null ? false : (boolean) value);
79
+ break;
80
+ case "activityState":
81
+ mViewManager.setActivityState(view, value == null ? -1f : ((Double) value).floatValue());
54
82
  break;
55
83
  case "navigationBarColor":
56
84
  mViewManager.setNavigationBarColor(view, ColorPropConverter.getColor(value, view.getContext()));
@@ -61,9 +89,6 @@ public class RNSScreenManagerDelegate<T extends View, U extends BaseViewManagerI
61
89
  case "nativeBackButtonDismissalEnabled":
62
90
  mViewManager.setNativeBackButtonDismissalEnabled(view, value == null ? false : (boolean) value);
63
91
  break;
64
- case "activityState":
65
- mViewManager.setActivityState(view, value == null ? -1 : ((Double) value).intValue());
66
- break;
67
92
  default:
68
93
  super.setProperty(view, propName, value);
69
94
  }
@@ -11,20 +11,29 @@ package com.facebook.react.viewmanagers;
11
11
 
12
12
  import android.view.View;
13
13
  import androidx.annotation.Nullable;
14
+ import com.facebook.react.bridge.ReadableMap;
14
15
 
15
16
  public interface RNSScreenManagerInterface<T extends View> {
16
- void setStackPresentation(T view, @Nullable String value);
17
- void setStackAnimation(T view, @Nullable String value);
17
+ void setCustomAnimationOnSwipe(T view, boolean value);
18
+ void setFullScreenSwipeEnabled(T view, boolean value);
19
+ void setHomeIndicatorHidden(T view, boolean value);
20
+ void setPreventNativeDismiss(T view, boolean value);
18
21
  void setGestureEnabled(T view, boolean value);
19
- void setReplaceAnimation(T view, @Nullable String value);
22
+ void setStatusBarColor(T view, @Nullable Integer value);
23
+ void setStatusBarHidden(T view, boolean value);
20
24
  void setScreenOrientation(T view, @Nullable String value);
21
25
  void setStatusBarAnimation(T view, @Nullable String value);
22
- void setStatusBarColor(T view, @Nullable Integer value);
23
26
  void setStatusBarStyle(T view, @Nullable String value);
24
27
  void setStatusBarTranslucent(T view, boolean value);
25
- void setStatusBarHidden(T view, boolean value);
28
+ void setGestureResponseDistance(T view, @Nullable ReadableMap value);
29
+ void setStackPresentation(T view, @Nullable String value);
30
+ void setStackAnimation(T view, @Nullable String value);
31
+ void setTransitionDuration(T view, int value);
32
+ void setReplaceAnimation(T view, @Nullable String value);
33
+ void setSwipeDirection(T view, @Nullable String value);
34
+ void setHideKeyboardOnSwipe(T view, boolean value);
35
+ void setActivityState(T view, float value);
26
36
  void setNavigationBarColor(T view, @Nullable Integer value);
27
37
  void setNavigationBarHidden(T view, boolean value);
28
38
  void setNativeBackButtonDismissalEnabled(T view, boolean value);
29
- void setActivityState(T view, int value);
30
39
  }
@@ -91,12 +91,12 @@ public class RNSScreenStackHeaderConfigManagerDelegate<T extends View, U extends
91
91
  case "hideBackButton":
92
92
  mViewManager.setHideBackButton(view, value == null ? false : (boolean) value);
93
93
  break;
94
- case "topInsetEnabled":
95
- mViewManager.setTopInsetEnabled(view, value == null ? false : (boolean) value);
96
- break;
97
94
  case "backButtonInCustomView":
98
95
  mViewManager.setBackButtonInCustomView(view, value == null ? false : (boolean) value);
99
96
  break;
97
+ case "topInsetEnabled":
98
+ mViewManager.setTopInsetEnabled(view, value == null ? false : (boolean) value);
99
+ break;
100
100
  default:
101
101
  super.setProperty(view, propName, value);
102
102
  }
@@ -36,6 +36,6 @@ public interface RNSScreenStackHeaderConfigManagerInterface<T extends View> {
36
36
  void setTitleColor(T view, @Nullable Integer value);
37
37
  void setDisableBackButtonMenu(T view, boolean value);
38
38
  void setHideBackButton(T view, boolean value);
39
- void setTopInsetEnabled(T view, boolean value);
40
39
  void setBackButtonInCustomView(T view, boolean value);
40
+ void setTopInsetEnabled(T view, boolean value);
41
41
  }
@@ -15,7 +15,7 @@ LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH) $(GENERATED_SRC_DIR)/codegen/jni
15
15
  LOCAL_SHARED_LIBRARIES := libjsi \
16
16
  libfbjni \
17
17
  libglog \
18
- libfolly_json \
18
+ libfolly_runtime \
19
19
  libyoga \
20
20
  libreact_nativemodule_core \
21
21
  libturbomodulejsijni \
@@ -23,7 +23,6 @@ LOCAL_SHARED_LIBRARIES := libjsi \
23
23
  libreact_render_core \
24
24
  libreact_render_graphics \
25
25
  libfabricjni \
26
- libfolly_futures \
27
26
  libreact_debug \
28
27
  libreact_render_componentregistry \
29
28
  libreact_render_debug \
@@ -398,6 +398,10 @@ The search field background color.
398
398
 
399
399
  By default bar tint color is translucent.
400
400
 
401
+ #### `tintColor`
402
+
403
+ The color for the cursor caret and cancel button text.
404
+
401
405
  #### `cancelButtonText`
402
406
 
403
407
  The text to be used instead of default `Cancel` button text.
@@ -0,0 +1,30 @@
1
+ #ifdef RN_FABRIC_ENABLED
2
+ #import <react/renderer/components/rnscreens/Props.h>
3
+ #import "RNSEnums.h"
4
+
5
+ @interface RNSConvert : NSObject
6
+
7
+ + (RNSScreenStackPresentation)RNSScreenStackPresentationFromCppEquivalent:
8
+ (facebook::react::RNSScreenStackPresentation)stackPresentation;
9
+
10
+ + (RNSScreenStackAnimation)RNSScreenStackAnimationFromCppEquivalent:
11
+ (facebook::react::RNSScreenStackAnimation)stackAnimation;
12
+
13
+ + (RNSScreenStackHeaderSubviewType)RNSScreenStackHeaderSubviewTypeFromCppEquivalent:
14
+ (facebook::react::RNSScreenStackHeaderSubviewType)subviewType;
15
+
16
+ + (RNSScreenReplaceAnimation)RNSScreenReplaceAnimationFromCppEquivalent:
17
+ (facebook::react::RNSScreenReplaceAnimation)replaceAnimation;
18
+
19
+ + (RNSScreenSwipeDirection)RNSScreenSwipeDirectionFromCppEquivalent:
20
+ (facebook::react::RNSScreenSwipeDirection)swipeDirection;
21
+
22
+ + (NSDictionary *)gestureResponseDistanceDictFromCppStruct:
23
+ (const facebook::react::RNSScreenGestureResponseDistanceStruct &)gestureResponseDistance;
24
+
25
+ + (UITextAutocapitalizationType)UITextAutocapitalizationTypeFromCppEquivalent:
26
+ (facebook::react::RNSSearchBarAutoCapitalize)autoCapitalize;
27
+
28
+ @end
29
+
30
+ #endif // RN_FABRIC_ENABLED
@@ -0,0 +1,120 @@
1
+ #import "RNSConvert.h"
2
+
3
+ #ifdef RN_FABRIC_ENABLED
4
+ @implementation RNSConvert
5
+
6
+ + (RNSScreenStackPresentation)RNSScreenStackPresentationFromCppEquivalent:
7
+ (facebook::react::RNSScreenStackPresentation)stackPresentation
8
+ {
9
+ switch (stackPresentation) {
10
+ case facebook::react::RNSScreenStackPresentation::Push:
11
+ return RNSScreenStackPresentationPush;
12
+ case facebook::react::RNSScreenStackPresentation::Modal:
13
+ return RNSScreenStackPresentationModal;
14
+ case facebook::react::RNSScreenStackPresentation::FullScreenModal:
15
+ return RNSScreenStackPresentationFullScreenModal;
16
+ case facebook::react::RNSScreenStackPresentation::FormSheet:
17
+ return RNSScreenStackPresentationFormSheet;
18
+ case facebook::react::RNSScreenStackPresentation::ContainedModal:
19
+ return RNSScreenStackPresentationContainedModal;
20
+ case facebook::react::RNSScreenStackPresentation::TransparentModal:
21
+ return RNSScreenStackPresentationTransparentModal;
22
+ case facebook::react::RNSScreenStackPresentation::ContainedTransparentModal:
23
+ return RNSScreenStackPresentationContainedTransparentModal;
24
+ }
25
+ }
26
+
27
+ + (RNSScreenStackAnimation)RNSScreenStackAnimationFromCppEquivalent:
28
+ (facebook::react::RNSScreenStackAnimation)stackAnimation
29
+ {
30
+ switch (stackAnimation) {
31
+ // these three are intentionally grouped
32
+ case facebook::react::RNSScreenStackAnimation::Slide_from_right:
33
+ case facebook::react::RNSScreenStackAnimation::Slide_from_left:
34
+ case facebook::react::RNSScreenStackAnimation::Default:
35
+ return RNSScreenStackAnimationDefault;
36
+ case facebook::react::RNSScreenStackAnimation::Flip:
37
+ return RNSScreenStackAnimationFlip;
38
+ case facebook::react::RNSScreenStackAnimation::Simple_push:
39
+ return RNSScreenStackAnimationSimplePush;
40
+ case facebook::react::RNSScreenStackAnimation::None:
41
+ return RNSScreenStackAnimationNone;
42
+ case facebook::react::RNSScreenStackAnimation::Fade:
43
+ return RNSScreenStackAnimationFade;
44
+ case facebook::react::RNSScreenStackAnimation::Slide_from_bottom:
45
+ return RNSScreenStackAnimationSlideFromBottom;
46
+ case facebook::react::RNSScreenStackAnimation::Fade_from_bottom:
47
+ return RNSScreenStackAnimationFadeFromBottom;
48
+ }
49
+ }
50
+
51
+ + (RNSScreenStackHeaderSubviewType)RNSScreenStackHeaderSubviewTypeFromCppEquivalent:
52
+ (facebook::react::RNSScreenStackHeaderSubviewType)subviewType
53
+ {
54
+ switch (subviewType) {
55
+ case facebook::react::RNSScreenStackHeaderSubviewType::Left:
56
+ return RNSScreenStackHeaderSubviewTypeLeft;
57
+ case facebook::react::RNSScreenStackHeaderSubviewType::Right:
58
+ return RNSScreenStackHeaderSubviewTypeRight;
59
+ case facebook::react::RNSScreenStackHeaderSubviewType::Title:
60
+ return RNSScreenStackHeaderSubviewTypeTitle;
61
+ case facebook::react::RNSScreenStackHeaderSubviewType::Center:
62
+ return RNSScreenStackHeaderSubviewTypeCenter;
63
+ case facebook::react::RNSScreenStackHeaderSubviewType::SearchBar:
64
+ return RNSScreenStackHeaderSubviewTypeSearchBar;
65
+ case facebook::react::RNSScreenStackHeaderSubviewType::Back:
66
+ return RNSScreenStackHeaderSubviewTypeBackButton;
67
+ }
68
+ }
69
+
70
+ + (RNSScreenReplaceAnimation)RNSScreenReplaceAnimationFromCppEquivalent:
71
+ (facebook::react::RNSScreenReplaceAnimation)replaceAnimation
72
+ {
73
+ switch (replaceAnimation) {
74
+ case facebook::react::RNSScreenReplaceAnimation::Pop:
75
+ return RNSScreenReplaceAnimationPop;
76
+ case facebook::react::RNSScreenReplaceAnimation::Push:
77
+ return RNSScreenReplaceAnimationPush;
78
+ }
79
+ }
80
+
81
+ + (RNSScreenSwipeDirection)RNSScreenSwipeDirectionFromCppEquivalent:
82
+ (facebook::react::RNSScreenSwipeDirection)swipeDirection
83
+ {
84
+ switch (swipeDirection) {
85
+ case facebook::react::RNSScreenSwipeDirection::Horizontal:
86
+ return RNSScreenSwipeDirectionHorizontal;
87
+ case facebook::react::RNSScreenSwipeDirection::Vertical:
88
+ return RNSScreenSwipeDirectionVertical;
89
+ }
90
+ }
91
+
92
+ + (NSDictionary *)gestureResponseDistanceDictFromCppStruct:
93
+ (const facebook::react::RNSScreenGestureResponseDistanceStruct &)gestureResponseDistance
94
+ {
95
+ return @{
96
+ @"start" : @(gestureResponseDistance.start),
97
+ @"end" : @(gestureResponseDistance.end),
98
+ @"top" : @(gestureResponseDistance.top),
99
+ @"bottom" : @(gestureResponseDistance.bottom),
100
+ };
101
+ }
102
+
103
+ + (UITextAutocapitalizationType)UITextAutocapitalizationTypeFromCppEquivalent:
104
+ (facebook::react::RNSSearchBarAutoCapitalize)autoCapitalize
105
+ {
106
+ switch (autoCapitalize) {
107
+ case facebook::react::RNSSearchBarAutoCapitalize::Words:
108
+ return UITextAutocapitalizationTypeWords;
109
+ case facebook::react::RNSSearchBarAutoCapitalize::Sentences:
110
+ return UITextAutocapitalizationTypeSentences;
111
+ case facebook::react::RNSSearchBarAutoCapitalize::Characters:
112
+ return UITextAutocapitalizationTypeAllCharacters;
113
+ case facebook::react::RNSSearchBarAutoCapitalize::None:
114
+ return UITextAutocapitalizationTypeNone;
115
+ }
116
+ }
117
+
118
+ @end
119
+
120
+ #endif // RN_FABRIC_ENABLED
package/ios/RNSEnums.h ADDED
@@ -0,0 +1,59 @@
1
+ typedef NS_ENUM(NSInteger, RNSScreenStackPresentation) {
2
+ RNSScreenStackPresentationPush,
3
+ RNSScreenStackPresentationModal,
4
+ RNSScreenStackPresentationTransparentModal,
5
+ RNSScreenStackPresentationContainedModal,
6
+ RNSScreenStackPresentationContainedTransparentModal,
7
+ RNSScreenStackPresentationFullScreenModal,
8
+ RNSScreenStackPresentationFormSheet
9
+ };
10
+
11
+ typedef NS_ENUM(NSInteger, RNSScreenStackAnimation) {
12
+ RNSScreenStackAnimationDefault,
13
+ RNSScreenStackAnimationNone,
14
+ RNSScreenStackAnimationFade,
15
+ RNSScreenStackAnimationFadeFromBottom,
16
+ RNSScreenStackAnimationFlip,
17
+ RNSScreenStackAnimationSlideFromBottom,
18
+ RNSScreenStackAnimationSimplePush,
19
+ };
20
+
21
+ typedef NS_ENUM(NSInteger, RNSScreenReplaceAnimation) {
22
+ RNSScreenReplaceAnimationPop,
23
+ RNSScreenReplaceAnimationPush,
24
+ };
25
+
26
+ typedef NS_ENUM(NSInteger, RNSScreenSwipeDirection) {
27
+ RNSScreenSwipeDirectionHorizontal,
28
+ RNSScreenSwipeDirectionVertical,
29
+ };
30
+
31
+ typedef NS_ENUM(NSInteger, RNSActivityState) {
32
+ RNSActivityStateInactive = 0,
33
+ RNSActivityStateTransitioningOrBelowTop = 1,
34
+ RNSActivityStateOnTop = 2
35
+ };
36
+
37
+ typedef NS_ENUM(NSInteger, RNSStatusBarStyle) {
38
+ RNSStatusBarStyleAuto,
39
+ RNSStatusBarStyleInverted,
40
+ RNSStatusBarStyleLight,
41
+ RNSStatusBarStyleDark,
42
+ };
43
+
44
+ typedef NS_ENUM(NSInteger, RNSWindowTrait) {
45
+ RNSWindowTraitStyle,
46
+ RNSWindowTraitAnimation,
47
+ RNSWindowTraitHidden,
48
+ RNSWindowTraitOrientation,
49
+ RNSWindowTraitHomeIndicatorHidden,
50
+ };
51
+
52
+ typedef NS_ENUM(NSInteger, RNSScreenStackHeaderSubviewType) {
53
+ RNSScreenStackHeaderSubviewTypeBackButton,
54
+ RNSScreenStackHeaderSubviewTypeLeft,
55
+ RNSScreenStackHeaderSubviewTypeRight,
56
+ RNSScreenStackHeaderSubviewTypeTitle,
57
+ RNSScreenStackHeaderSubviewTypeCenter,
58
+ RNSScreenStackHeaderSubviewTypeSearchBar,
59
+ };