react-native-screens 3.10.1 → 3.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +13 -7
  3. package/RNScreens.podspec +36 -6
  4. package/android/build.gradle +74 -3
  5. package/android/src/fabric/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt +49 -0
  6. package/android/src/fabric/java/com/swmansion/rnscreens/RNScreensComponentsRegistry.java +28 -0
  7. package/android/src/main/java/com/swmansion/rnscreens/RNScreensPackage.kt +11 -2
  8. package/android/src/main/java/com/swmansion/rnscreens/Screen.kt +52 -21
  9. package/android/src/main/java/com/swmansion/rnscreens/ScreenContainer.kt +1 -1
  10. package/android/src/main/java/com/swmansion/rnscreens/ScreenFragment.kt +64 -33
  11. package/android/src/main/java/com/swmansion/rnscreens/ScreenStack.kt +9 -31
  12. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragment.kt +0 -30
  13. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfig.kt +12 -5
  14. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigViewManager.kt +83 -18
  15. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubviewManager.kt +17 -5
  16. package/android/src/main/java/com/swmansion/rnscreens/ScreenStackViewManager.kt +14 -1
  17. package/android/src/main/java/com/swmansion/rnscreens/ScreenViewManager.kt +41 -14
  18. package/android/src/main/java/com/swmansion/rnscreens/ScreenWindowTraits.kt +72 -11
  19. package/android/src/main/java/com/swmansion/rnscreens/SearchBarManager.kt +18 -1
  20. package/android/src/main/java/com/swmansion/rnscreens/SearchBarView.kt +7 -2
  21. package/android/src/main/java/com/swmansion/rnscreens/SearchViewFormatter.kt +29 -2
  22. package/android/src/main/jni/Android.mk +45 -0
  23. package/android/src/main/jni/OnLoad.cpp +9 -0
  24. package/android/src/main/jni/RNScreensComponentsRegistry.cpp +66 -0
  25. package/android/src/main/jni/RNScreensComponentsRegistry.h +34 -0
  26. package/android/src/main/res/anim/rns_default_enter_in.xml +18 -0
  27. package/android/src/main/res/anim/rns_default_enter_out.xml +19 -0
  28. package/android/src/main/res/anim/rns_default_exit_in.xml +17 -0
  29. package/android/src/main/res/anim/rns_default_exit_out.xml +18 -0
  30. package/android/src/main/res/anim/rns_fade_in.xml +7 -0
  31. package/android/src/main/res/anim/rns_fade_out.xml +7 -0
  32. package/android/src/main/res/anim/rns_no_animation_20.xml +6 -0
  33. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerDelegate.java +71 -0
  34. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerInterface.java +30 -0
  35. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderConfigManagerDelegate.java +104 -0
  36. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderConfigManagerInterface.java +41 -0
  37. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderSubviewManagerDelegate.java +31 -0
  38. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderSubviewManagerInterface.java +17 -0
  39. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackManagerDelegate.java +25 -0
  40. package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackManagerInterface.java +16 -0
  41. package/android/src/paper/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt +16 -0
  42. package/common/cpp/Android.mk +38 -0
  43. package/common/cpp/rnscreens/RNSScreenComponentDescriptor.h +41 -0
  44. package/common/cpp/rnscreens/RNSScreenShadowNode.cpp +9 -0
  45. package/common/cpp/rnscreens/RNSScreenShadowNode.h +29 -0
  46. package/common/cpp/rnscreens/RNSScreenState.cpp +14 -0
  47. package/common/cpp/rnscreens/RNSScreenState.h +46 -0
  48. package/createNativeStackNavigator/README.md +12 -0
  49. package/ios/RNSScreen.h +10 -0
  50. package/ios/RNSScreen.m +34 -0
  51. package/ios/RNSScreenComponentView.h +23 -0
  52. package/ios/RNSScreenComponentView.mm +159 -0
  53. package/ios/RNSScreenContainer.m +5 -0
  54. package/ios/RNSScreenController.h +10 -0
  55. package/ios/RNSScreenController.mm +79 -0
  56. package/ios/RNSScreenStack.m +22 -7
  57. package/ios/RNSScreenStackAnimator.m +45 -14
  58. package/ios/RNSScreenStackComponentView.h +15 -0
  59. package/ios/RNSScreenStackComponentView.mm +295 -0
  60. package/ios/RNSScreenStackHeaderConfig.m +4 -1
  61. package/ios/RNSScreenStackHeaderConfigComponentView.h +42 -0
  62. package/ios/RNSScreenStackHeaderConfigComponentView.mm +662 -0
  63. package/ios/RNSScreenStackHeaderSubviewComponentView.h +14 -0
  64. package/ios/RNSScreenStackHeaderSubviewComponentView.mm +77 -0
  65. package/ios/RNSScreenWindowTraits.h +1 -0
  66. package/ios/RNSScreenWindowTraits.m +20 -0
  67. package/ios/UIViewController+RNScreens.m +10 -0
  68. package/ios/utils/RNSUIBarButtonItem.h +5 -0
  69. package/ios/utils/RNSUIBarButtonItem.mm +22 -0
  70. package/lib/commonjs/fabric/Screen.js +27 -0
  71. package/lib/commonjs/fabric/Screen.js.map +1 -0
  72. package/lib/commonjs/fabric/ScreenNativeComponent.js +23 -0
  73. package/lib/commonjs/fabric/ScreenNativeComponent.js.map +1 -0
  74. package/lib/commonjs/fabric/ScreenStack.js +27 -0
  75. package/lib/commonjs/fabric/ScreenStack.js.map +1 -0
  76. package/lib/commonjs/fabric/ScreenStackHeaderConfigNativeComponent.js +27 -0
  77. package/lib/commonjs/fabric/ScreenStackHeaderConfigNativeComponent.js.map +1 -0
  78. package/lib/commonjs/fabric/ScreenStackHeaderSubview.js +34 -0
  79. package/lib/commonjs/fabric/ScreenStackHeaderSubview.js.map +1 -0
  80. package/lib/commonjs/fabric/ScreenStackHeaderSubviewNativeComponent.js +27 -0
  81. package/lib/commonjs/fabric/ScreenStackHeaderSubviewNativeComponent.js.map +1 -0
  82. package/lib/commonjs/fabric/ScreenStackNativeComponent.js +21 -0
  83. package/lib/commonjs/fabric/ScreenStackNativeComponent.js.map +1 -0
  84. package/lib/commonjs/fabric/index.js +40 -0
  85. package/lib/commonjs/fabric/index.js.map +1 -0
  86. package/lib/commonjs/index.native.js +32 -15
  87. package/lib/commonjs/index.native.js.map +1 -1
  88. package/lib/commonjs/native-stack/views/NativeStackView.js +33 -4
  89. package/lib/commonjs/native-stack/views/NativeStackView.js.map +1 -1
  90. package/lib/module/fabric/Screen.js +11 -0
  91. package/lib/module/fabric/Screen.js.map +1 -0
  92. package/lib/module/fabric/ScreenNativeComponent.js +11 -0
  93. package/lib/module/fabric/ScreenNativeComponent.js.map +1 -0
  94. package/lib/module/fabric/ScreenStack.js +12 -0
  95. package/lib/module/fabric/ScreenStack.js.map +1 -0
  96. package/lib/module/fabric/ScreenStackHeaderConfigNativeComponent.js +10 -0
  97. package/lib/module/fabric/ScreenStackHeaderConfigNativeComponent.js.map +1 -0
  98. package/lib/module/fabric/ScreenStackHeaderSubview.js +21 -0
  99. package/lib/module/fabric/ScreenStackHeaderSubview.js.map +1 -0
  100. package/lib/module/fabric/ScreenStackHeaderSubviewNativeComponent.js +10 -0
  101. package/lib/module/fabric/ScreenStackHeaderSubviewNativeComponent.js.map +1 -0
  102. package/lib/module/fabric/ScreenStackNativeComponent.js +9 -0
  103. package/lib/module/fabric/ScreenStackNativeComponent.js.map +1 -0
  104. package/lib/module/fabric/index.js +6 -0
  105. package/lib/module/fabric/index.js.map +1 -0
  106. package/lib/module/index.native.js +32 -15
  107. package/lib/module/index.native.js.map +1 -1
  108. package/lib/module/native-stack/views/NativeStackView.js +33 -4
  109. package/lib/module/native-stack/views/NativeStackView.js.map +1 -1
  110. package/lib/typescript/native-stack/types.d.ts +34 -0
  111. package/lib/typescript/reanimated/ReanimatedNativeStackScreen.d.ts +1 -1
  112. package/lib/typescript/reanimated/ReanimatedScreen.d.ts +1 -1
  113. package/lib/typescript/types.d.ts +60 -5
  114. package/native-stack/README.md +39 -3
  115. package/package.json +17 -3
  116. package/reanimated/package.json +6 -0
  117. package/src/fabric/Screen.js +12 -0
  118. package/src/fabric/ScreenNativeComponent.js +64 -0
  119. package/src/fabric/ScreenStack.js +8 -0
  120. package/src/fabric/ScreenStackHeaderConfigNativeComponent.js +54 -0
  121. package/src/fabric/ScreenStackHeaderSubview.js +20 -0
  122. package/src/fabric/ScreenStackHeaderSubviewNativeComponent.js +31 -0
  123. package/src/fabric/ScreenStackNativeComponent.js +19 -0
  124. package/src/fabric/index.js +11 -0
  125. package/src/index.native.tsx +35 -14
  126. package/src/native-stack/types.tsx +34 -0
  127. package/src/native-stack/views/NativeStackView.tsx +33 -4
  128. package/src/types.tsx +60 -5
@@ -6,11 +6,15 @@ import android.annotation.SuppressLint
6
6
  import android.annotation.TargetApi
7
7
  import android.app.Activity
8
8
  import android.content.pm.ActivityInfo
9
+ import android.graphics.Color
9
10
  import android.os.Build
10
11
  import android.view.View
11
12
  import android.view.ViewParent
12
13
  import android.view.WindowManager
13
14
  import androidx.core.view.ViewCompat
15
+ import androidx.core.view.WindowCompat
16
+ import androidx.core.view.WindowInsetsCompat
17
+ import androidx.core.view.WindowInsetsControllerCompat
14
18
  import com.facebook.react.bridge.GuardedRunnable
15
19
  import com.facebook.react.bridge.ReactContext
16
20
  import com.facebook.react.bridge.UiThreadUtil
@@ -21,6 +25,7 @@ object ScreenWindowTraits {
21
25
  // https://github.com/facebook/react-native/blob/master/ReactAndroid/src/main/java/com/facebook/react/modules/statusbar/StatusBarModule.java
22
26
  private var mDidSetOrientation = false
23
27
  private var mDidSetStatusBarAppearance = false
28
+ private var mDidSetNavigationBarAppearance = false
24
29
  private var mDefaultStatusBarColor: Int? = null
25
30
  internal fun applyDidSetOrientation() {
26
31
  mDidSetOrientation = true
@@ -30,6 +35,10 @@ object ScreenWindowTraits {
30
35
  mDidSetStatusBarAppearance = true
31
36
  }
32
37
 
38
+ internal fun applyDidSetNavigationBarAppearance() {
39
+ mDidSetNavigationBarAppearance = true
40
+ }
41
+
33
42
  internal fun setOrientation(screen: Screen, activity: Activity?) {
34
43
  if (activity == null) {
35
44
  return
@@ -72,23 +81,21 @@ object ScreenWindowTraits {
72
81
  }
73
82
 
74
83
  internal fun setStyle(screen: Screen, activity: Activity?, context: ReactContext?) {
75
- if (activity == null || context == null) {
84
+ if (activity == null || context == null || Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
76
85
  return
77
86
  }
78
87
  val screenForStyle = findScreenForTrait(screen, WindowTraits.STYLE)
79
88
  val style = screenForStyle?.statusBarStyle ?: "light"
80
89
 
81
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
82
- UiThreadUtil.runOnUiThread {
83
- val decorView = activity.window.decorView
84
- var systemUiVisibilityFlags = decorView.systemUiVisibility
85
- systemUiVisibilityFlags = if ("dark" == style) {
86
- systemUiVisibilityFlags or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
87
- } else {
88
- systemUiVisibilityFlags and View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR.inv()
89
- }
90
- decorView.systemUiVisibility = systemUiVisibilityFlags
90
+ UiThreadUtil.runOnUiThread {
91
+ 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()
91
97
  }
98
+ decorView.systemUiVisibility = systemUiVisibilityFlags
92
99
  }
93
100
  }
94
101
 
@@ -144,6 +151,48 @@ object ScreenWindowTraits {
144
151
  }
145
152
  }
146
153
 
154
+ // Methods concerning navigationBar management were taken from `react-native-navigation`'s repo:
155
+ // https://github.com/wix/react-native-navigation/blob/9bb70d81700692141a2c505c081c2d86c7f9c66e/lib/android/app/src/main/java/com/reactnativenavigation/utils/SystemUiUtils.kt
156
+ internal fun setNavigationBarColor(screen: Screen, activity: Activity?) {
157
+ if (activity == null) {
158
+ return
159
+ }
160
+
161
+ val window = activity.window
162
+
163
+ val screenForNavBarColor = findScreenForTrait(screen, WindowTraits.NAVIGATION_BAR_COLOR)
164
+ val color = screenForNavBarColor?.navigationBarColor ?: window.navigationBarColor
165
+
166
+ WindowInsetsControllerCompat(window, window.decorView).isAppearanceLightNavigationBars =
167
+ isColorLight(color)
168
+ window.navigationBarColor = color
169
+ }
170
+
171
+ internal fun setNavigationBarHidden(screen: Screen, activity: Activity?) {
172
+ if (activity == null) {
173
+ return
174
+ }
175
+
176
+ val window = activity.window
177
+
178
+ val screenForNavBarHidden = findScreenForTrait(screen, WindowTraits.NAVIGATION_BAR_HIDDEN)
179
+ val hidden = screenForNavBarHidden?.isNavigationBarHidden ?: false
180
+
181
+ WindowCompat.setDecorFitsSystemWindows(window, hidden)
182
+ if (hidden) {
183
+ WindowInsetsControllerCompat(window, window.decorView).let { controller ->
184
+ controller.hide(WindowInsetsCompat.Type.navigationBars())
185
+ controller.systemBarsBehavior =
186
+ WindowInsetsControllerCompat.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE
187
+ }
188
+ } else {
189
+ WindowInsetsControllerCompat(
190
+ window,
191
+ window.decorView
192
+ ).show(WindowInsetsCompat.Type.navigationBars())
193
+ }
194
+ }
195
+
147
196
  internal fun trySetWindowTraits(screen: Screen, activity: Activity?, context: ReactContext?) {
148
197
  if (mDidSetOrientation) {
149
198
  setOrientation(screen, activity)
@@ -154,6 +203,10 @@ object ScreenWindowTraits {
154
203
  setTranslucent(screen, activity, context)
155
204
  setHidden(screen, activity)
156
205
  }
206
+ if (mDidSetNavigationBarAppearance) {
207
+ setNavigationBarColor(screen, activity)
208
+ setNavigationBarHidden(screen, activity)
209
+ }
157
210
  }
158
211
 
159
212
  private fun findScreenForTrait(screen: Screen, trait: WindowTraits): Screen? {
@@ -211,6 +264,14 @@ object ScreenWindowTraits {
211
264
  WindowTraits.TRANSLUCENT -> screen.isStatusBarTranslucent != null
212
265
  WindowTraits.HIDDEN -> screen.isStatusBarHidden != null
213
266
  WindowTraits.ANIMATED -> screen.isStatusBarAnimated != null
267
+ WindowTraits.NAVIGATION_BAR_COLOR -> screen.navigationBarColor != null
268
+ WindowTraits.NAVIGATION_BAR_HIDDEN -> screen.isNavigationBarHidden != null
214
269
  }
215
270
  }
271
+
272
+ private fun isColorLight(color: Int): Boolean {
273
+ val darkness: Double =
274
+ 1 - (0.299 * Color.red(color) + 0.587 * Color.green(color) + 0.114 * Color.blue(color)) / 255
275
+ return darkness < 0.5
276
+ }
216
277
  }
@@ -65,7 +65,9 @@ class SearchBarManager : ViewGroupManager<SearchBarView>() {
65
65
 
66
66
  @ReactProp(name = "placeholder")
67
67
  fun setPlaceholder(view: SearchBarView, placeholder: String?) {
68
- view.placeholder = placeholder
68
+ if (placeholder != null) {
69
+ view.placeholder = placeholder
70
+ }
69
71
  }
70
72
 
71
73
  @ReactProp(name = "textColor", customType = "Color")
@@ -73,6 +75,21 @@ class SearchBarManager : ViewGroupManager<SearchBarView>() {
73
75
  view.textColor = color
74
76
  }
75
77
 
78
+ @ReactProp(name = "headerIconColor", customType = "Color")
79
+ fun setHeaderIconColor(view: SearchBarView, color: Int?) {
80
+ view.headerIconColor = color
81
+ }
82
+
83
+ @ReactProp(name = "hintTextColor", customType = "Color")
84
+ fun setHintTextColor(view: SearchBarView, color: Int?) {
85
+ view.hintTextColor = color
86
+ }
87
+
88
+ @ReactProp(name = "shouldShowHintSearchIcon")
89
+ fun setShouldShowHintSearchIcon(view: SearchBarView, shouldShowHintSearchIcon: Boolean?) {
90
+ view.shouldShowHintSearchIcon = shouldShowHintSearchIcon ?: true
91
+ }
92
+
76
93
  override fun getExportedCustomDirectEventTypeConstants(): Map<String, Any>? {
77
94
  return MapBuilder.builder<String, Any>()
78
95
  .put("onChangeText", MapBuilder.of("registrationName", "onChangeText"))
@@ -15,9 +15,12 @@ class SearchBarView(reactContext: ReactContext?) : ReactViewGroup(reactContext)
15
15
  var autoCapitalize: SearchBarAutoCapitalize = SearchBarAutoCapitalize.NONE
16
16
  var textColor: Int? = null
17
17
  var tintColor: Int? = null
18
- var placeholder: String? = null
18
+ var headerIconColor: Int? = null
19
+ var hintTextColor: Int? = null
20
+ var placeholder: String = ""
19
21
  var shouldOverrideBackButton: Boolean = true
20
22
  var autoFocus: Boolean = false
23
+ var shouldShowHintSearchIcon: Boolean = true
21
24
 
22
25
  private var mSearchViewFormatter: SearchViewFormatter? = null
23
26
 
@@ -45,9 +48,11 @@ class SearchBarView(reactContext: ReactContext?) : ReactViewGroup(reactContext)
45
48
  }
46
49
 
47
50
  searchView.inputType = inputType.toAndroidInputType(autoCapitalize)
48
- searchView.queryHint = placeholder
49
51
  mSearchViewFormatter?.setTextColor(textColor)
50
52
  mSearchViewFormatter?.setTintColor(tintColor)
53
+ mSearchViewFormatter?.setHeaderIconColor(headerIconColor)
54
+ mSearchViewFormatter?.setHintTextColor(hintTextColor)
55
+ mSearchViewFormatter?.setPlaceholder(placeholder, shouldShowHintSearchIcon)
51
56
  searchView.overrideBackAction = shouldOverrideBackButton
52
57
  }
53
58
  }
@@ -3,6 +3,8 @@ package com.swmansion.rnscreens
3
3
  import android.graphics.drawable.Drawable
4
4
  import android.view.View
5
5
  import android.widget.EditText
6
+ import android.widget.ImageView
7
+ import androidx.appcompat.R
6
8
  import androidx.appcompat.widget.SearchView
7
9
 
8
10
  class SearchViewFormatter(var searchView: SearchView) {
@@ -10,9 +12,13 @@ class SearchViewFormatter(var searchView: SearchView) {
10
12
  private var mDefaultTintBackground: Drawable? = null
11
13
 
12
14
  private val searchEditText
13
- get() = searchView.findViewById<View>(androidx.appcompat.R.id.search_src_text) as? EditText
15
+ get() = searchView.findViewById<View>(R.id.search_src_text) as? EditText
14
16
  private val searchTextPlate
15
- get() = searchView.findViewById<View>(androidx.appcompat.R.id.search_plate)
17
+ get() = searchView.findViewById<View>(R.id.search_plate)
18
+ private val searchIcon
19
+ get() = searchView.findViewById<ImageView>(R.id.search_button)
20
+ private val searchCloseIcon
21
+ get() = searchView.findViewById<ImageView>(R.id.search_close_btn)
16
22
 
17
23
  fun setTextColor(textColor: Int?) {
18
24
  val currentDefaultTextColor = mDefaultTextColor
@@ -37,4 +43,25 @@ class SearchViewFormatter(var searchView: SearchView) {
37
43
  searchTextPlate.background = currentDefaultTintColor
38
44
  }
39
45
  }
46
+
47
+ fun setHeaderIconColor(headerIconColor: Int?) {
48
+ headerIconColor?.let {
49
+ searchIcon.setColorFilter(it)
50
+ searchCloseIcon.setColorFilter(it)
51
+ }
52
+ }
53
+
54
+ fun setHintTextColor(hintTextColor: Int?) {
55
+ hintTextColor?.let {
56
+ searchEditText?.setHintTextColor(it)
57
+ }
58
+ }
59
+
60
+ fun setPlaceholder(placeholder: String, shouldShowHintSearchIcon: Boolean) {
61
+ if (shouldShowHintSearchIcon) {
62
+ searchView.queryHint = placeholder
63
+ } else {
64
+ searchEditText?.hint = placeholder
65
+ }
66
+ }
40
67
  }
@@ -0,0 +1,45 @@
1
+ SCREENS_MAIN_THIS_DIR := $(call my-dir)
2
+
3
+ include $(REACT_ANDROID_DIR)/Android-prebuilt.mk
4
+
5
+ include $(SCREENS_MAIN_THIS_DIR)/../../../build/generated/source/codegen/jni/Android.mk
6
+ include $(SCREENS_MAIN_THIS_DIR)/../../../../common/cpp/Android.mk
7
+
8
+ include $(CLEAR_VARS)
9
+
10
+ LOCAL_PATH := $(SCREENS_MAIN_THIS_DIR)
11
+ LOCAL_MODULE := rnscreens_modules
12
+
13
+ LOCAL_C_INCLUDES := $(LOCAL_PATH) $(GENERATED_SRC_DIR)/codegen/jni
14
+ LOCAL_SRC_FILES := $(wildcard $(LOCAL_PATH)/*.cpp) $(wildcard $(GENERATED_SRC_DIR)/codegen/jni/*.cpp)
15
+ LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH) $(GENERATED_SRC_DIR)/codegen/jni
16
+
17
+ # Please note as one of the library listed is libreact_codegen_samplelibrary
18
+ # This name will be generated as libreact_codegen_<library-name>
19
+ # where <library-name> is the one you specified in the Gradle configuration
20
+ LOCAL_SHARED_LIBRARIES := libjsi \
21
+ libfbjni \
22
+ libglog \
23
+ libfolly_json \
24
+ libyoga \
25
+ libreact_nativemodule_core \
26
+ libturbomodulejsijni \
27
+ librrc_view \
28
+ libreact_render_core \
29
+ libreact_render_graphics \
30
+ libfabricjni \
31
+ libfolly_futures \
32
+ libreact_debug \
33
+ libreact_render_componentregistry \
34
+ libreact_render_debug \
35
+ libruntimeexecutor \
36
+ libreact_render_mapbuffer \
37
+ libreact_codegen_rncore \
38
+ libreact_codegen_rnscreens \
39
+ librnscreens_common
40
+
41
+ LOCAL_CFLAGS := \
42
+ -DLOG_TAG=\"ReactNative\"
43
+ LOCAL_CFLAGS += -fexceptions -frtti -std=c++17 -Wall
44
+
45
+ include $(BUILD_SHARED_LIBRARY)
@@ -0,0 +1,9 @@
1
+ #include <fbjni/fbjni.h>
2
+
3
+ #include "RNScreensComponentsRegistry.h"
4
+
5
+ JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *) {
6
+ return facebook::jni::initialize(vm, [] {
7
+ facebook::react::RNScreensComponentsRegistry::registerNatives();
8
+ });
9
+ }
@@ -0,0 +1,66 @@
1
+ #include "RNScreensComponentsRegistry.h"
2
+
3
+ #include <CoreComponentsRegistry.h>
4
+ #include <fbjni/fbjni.h>
5
+ #include <react/renderer/componentregistry/ComponentDescriptorProviderRegistry.h>
6
+ #include <react/renderer/components/rnscreens/ComponentDescriptors.h>
7
+ #include <react/renderer/mapbuffer/MapBuffer.h>
8
+ #include <react/renderer/mapbuffer/MapBufferBuilder.h>
9
+ #include <rnscreens/RNSScreenComponentDescriptor.h>
10
+
11
+ namespace facebook {
12
+ namespace react {
13
+
14
+ RNScreensComponentsRegistry::RNScreensComponentsRegistry(
15
+ ComponentFactory *delegate)
16
+ : delegate_(delegate) {}
17
+
18
+ std::shared_ptr<ComponentDescriptorProviderRegistry const>
19
+ RNScreensComponentsRegistry::sharedProviderRegistry() {
20
+ auto providerRegistry = CoreComponentsRegistry::sharedProviderRegistry();
21
+
22
+ // Screens
23
+ providerRegistry->add(concreteComponentDescriptorProvider<RNSScreenComponentDescriptor>());
24
+ providerRegistry->add(concreteComponentDescriptorProvider<RNSScreenStackComponentDescriptor>());
25
+ providerRegistry->add(concreteComponentDescriptorProvider<RNSScreenStackHeaderConfigComponentDescriptor>());
26
+ providerRegistry->add(concreteComponentDescriptorProvider<RNSScreenStackHeaderSubviewComponentDescriptor>());
27
+
28
+ return providerRegistry;
29
+ }
30
+
31
+ jni::local_ref<RNScreensComponentsRegistry::jhybriddata>
32
+ RNScreensComponentsRegistry::initHybrid(
33
+ jni::alias_ref<jclass>,
34
+ ComponentFactory *delegate) {
35
+ auto instance = makeCxxInstance(delegate);
36
+
37
+ auto buildRegistryFunction =
38
+ [](EventDispatcher::Weak const &eventDispatcher,
39
+ ContextContainer::Shared const &contextContainer)
40
+ -> ComponentDescriptorRegistry::Shared {
41
+ auto registry = RNScreensComponentsRegistry::sharedProviderRegistry()
42
+ ->createComponentDescriptorRegistry(
43
+ {eventDispatcher, contextContainer});
44
+
45
+ return registry;
46
+ };
47
+
48
+ delegate->buildRegistryFunction = buildRegistryFunction;
49
+ return instance;
50
+ }
51
+
52
+ void RNScreensComponentsRegistry::registerNatives() {
53
+ registerHybrid({
54
+ makeNativeMethod("initHybrid", RNScreensComponentsRegistry::initHybrid),
55
+ });
56
+ // This is a temporary solution that allows components exported by the screens
57
+ // library to be added to the main component registry. This code is triggered
58
+ // when c++ screens library is initialized and is needed because RN's autolinking
59
+ // does not currently support Fabric components. As a consequence, users would need
60
+ // to manually put library initialization calls in their ReactNativeHost implementation
61
+ // which is undesirable.
62
+ sharedProviderRegistry();
63
+ }
64
+
65
+ } // namespace react
66
+ } // namespace facebook
@@ -0,0 +1,34 @@
1
+ #pragma once
2
+
3
+ #include <ComponentFactory.h>
4
+ #include <fbjni/fbjni.h>
5
+ #include <react/renderer/componentregistry/ComponentDescriptorProviderRegistry.h>
6
+ #include <react/renderer/componentregistry/ComponentDescriptorRegistry.h>
7
+
8
+ namespace facebook {
9
+ namespace react {
10
+
11
+ class RNScreensComponentsRegistry
12
+ : public facebook::jni::HybridClass<RNScreensComponentsRegistry> {
13
+ public:
14
+ constexpr static auto kJavaDescriptor =
15
+ "Lcom/swmansion/rnscreens/RNScreensComponentsRegistry;";
16
+
17
+ static void registerNatives();
18
+
19
+ RNScreensComponentsRegistry(ComponentFactory *delegate);
20
+
21
+ private:
22
+ friend HybridBase;
23
+
24
+ static std::shared_ptr<ComponentDescriptorProviderRegistry const> sharedProviderRegistry();
25
+
26
+ const ComponentFactory *delegate_;
27
+
28
+ static jni::local_ref<jhybriddata> initHybrid(
29
+ jni::alias_ref<jclass>,
30
+ ComponentFactory *delegate);
31
+ };
32
+
33
+ } // namespace react
34
+ } // namespace facebook
@@ -0,0 +1,18 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <set xmlns:android="http://schemas.android.com/apk/res/android">
3
+ <alpha
4
+ android:interpolator="@android:interpolator/accelerate_decelerate"
5
+ android:fromAlpha="0"
6
+ android:toAlpha="1.0"
7
+ android:startOffset="100"
8
+ android:duration="100"/>
9
+ <scale
10
+ android:interpolator="@android:interpolator/accelerate_decelerate"
11
+ android:fromXScale="0.85"
12
+ android:toXScale="1"
13
+ android:fromYScale="0.85"
14
+ android:toYScale="1"
15
+ android:pivotX="50%"
16
+ android:pivotY="50%"
17
+ android:duration="200"/>
18
+ </set>
@@ -0,0 +1,19 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <set xmlns:android="http://schemas.android.com/apk/res/android">
3
+ <alpha
4
+ android:fromAlpha="1"
5
+ android:toAlpha="0.4"
6
+ android:startOffset="100"
7
+ android:duration="100"
8
+ android:interpolator="@android:interpolator/accelerate_decelerate" />
9
+
10
+ <scale
11
+ android:interpolator="@android:interpolator/accelerate_decelerate"
12
+ android:fromXScale="1"
13
+ android:toXScale="1.15"
14
+ android:fromYScale="1"
15
+ android:toYScale="1.15"
16
+ android:pivotX="50%"
17
+ android:pivotY="50%"
18
+ android:duration="200"/>
19
+ </set>
@@ -0,0 +1,17 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <set xmlns:android="http://schemas.android.com/apk/res/android"
3
+ android:shareInterpolator="false">
4
+ <alpha
5
+ android:fromAlpha="0.0"
6
+ android:toAlpha="1"
7
+ android:startOffset="50"
8
+ android:duration="100"/>
9
+ <scale
10
+ android:fromXScale="1.15"
11
+ android:toXScale="1"
12
+ android:fromYScale="1.15"
13
+ android:toYScale="1"
14
+ android:pivotX="50%"
15
+ android:pivotY="50%"
16
+ android:duration="200"/>
17
+ </set>
@@ -0,0 +1,18 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <set xmlns:android="http://schemas.android.com/apk/res/android"
3
+ android:shareInterpolator="false"
4
+ android:zAdjustment="top">
5
+ <alpha
6
+ android:fromAlpha="1"
7
+ android:toAlpha="0.0"
8
+ android:startOffset="50"
9
+ android:duration="100"/>
10
+ <scale
11
+ android:fromXScale="1"
12
+ android:toXScale="0.85"
13
+ android:fromYScale="1"
14
+ android:toYScale="0.85"
15
+ android:pivotX="50%"
16
+ android:pivotY="50%"
17
+ android:duration="200"/>
18
+ </set>
@@ -0,0 +1,7 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!--Duration taken from debugging source code-->
3
+ <alpha xmlns:android="http://schemas.android.com/apk/res/android"
4
+ android:fromAlpha="0.0"
5
+ android:toAlpha="1.0"
6
+ android:duration="150"
7
+ /> <!--Remember to change duration in the corresponding xml when modifying it-->
@@ -0,0 +1,7 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!--Duration taken from debugging source code-->
3
+ <alpha xmlns:android="http://schemas.android.com/apk/res/android"
4
+ android:fromAlpha="1.0"
5
+ android:toAlpha="0.0"
6
+ android:duration="150"
7
+ /> <!--Remember to change duration in the corresponding xml when modifying it-->
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <alpha xmlns:android="http://schemas.android.com/apk/res/android"
3
+ android:fromAlpha="1.0"
4
+ android:toAlpha="1.0"
5
+ android:duration="20"
6
+ /> <!-- non-zero duration ensures transition events are triggered correctly -->
@@ -0,0 +1,71 @@
1
+ /**
2
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
3
+ *
4
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
5
+ * once the code is regenerated.
6
+ *
7
+ * @generated by codegen project: GeneratePropsJavaDelegate.js
8
+ */
9
+
10
+ package com.facebook.react.viewmanagers;
11
+
12
+ import android.view.View;
13
+ import androidx.annotation.Nullable;
14
+ import com.facebook.react.bridge.ColorPropConverter;
15
+ import com.facebook.react.uimanager.BaseViewManagerDelegate;
16
+ import com.facebook.react.uimanager.BaseViewManagerInterface;
17
+
18
+ public class RNSScreenManagerDelegate<T extends View, U extends BaseViewManagerInterface<T> & RNSScreenManagerInterface<T>> extends BaseViewManagerDelegate<T, U> {
19
+ public RNSScreenManagerDelegate(U viewManager) {
20
+ super(viewManager);
21
+ }
22
+ @Override
23
+ public void setProperty(T view, String propName, @Nullable Object value) {
24
+ switch (propName) {
25
+ case "stackPresentation":
26
+ mViewManager.setStackPresentation(view, (String) value);
27
+ break;
28
+ case "stackAnimation":
29
+ mViewManager.setStackAnimation(view, (String) value);
30
+ break;
31
+ case "gestureEnabled":
32
+ mViewManager.setGestureEnabled(view, value == null ? true : (boolean) value);
33
+ break;
34
+ case "replaceAnimation":
35
+ mViewManager.setReplaceAnimation(view, (String) value);
36
+ break;
37
+ case "screenOrientation":
38
+ mViewManager.setScreenOrientation(view, value == null ? null : (String) value);
39
+ break;
40
+ case "statusBarAnimation":
41
+ mViewManager.setStatusBarAnimation(view, value == null ? null : (String) value);
42
+ break;
43
+ case "statusBarColor":
44
+ mViewManager.setStatusBarColor(view, ColorPropConverter.getColor(value, view.getContext()));
45
+ break;
46
+ case "statusBarStyle":
47
+ mViewManager.setStatusBarStyle(view, value == null ? null : (String) value);
48
+ break;
49
+ case "statusBarTranslucent":
50
+ mViewManager.setStatusBarTranslucent(view, value == null ? false : (boolean) value);
51
+ break;
52
+ case "statusBarHidden":
53
+ mViewManager.setStatusBarHidden(view, value == null ? false : (boolean) value);
54
+ break;
55
+ case "navigationBarColor":
56
+ mViewManager.setNavigationBarColor(view, ColorPropConverter.getColor(value, view.getContext()));
57
+ break;
58
+ case "navigationBarHidden":
59
+ mViewManager.setNavigationBarHidden(view, value == null ? false : (boolean) value);
60
+ break;
61
+ case "nativeBackButtonDismissalEnabled":
62
+ mViewManager.setNativeBackButtonDismissalEnabled(view, value == null ? false : (boolean) value);
63
+ break;
64
+ case "activityState":
65
+ mViewManager.setActivityState(view, value == null ? -1 : ((Double) value).intValue());
66
+ break;
67
+ default:
68
+ super.setProperty(view, propName, value);
69
+ }
70
+ }
71
+ }
@@ -0,0 +1,30 @@
1
+ /**
2
+ * This code was generated by [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
3
+ *
4
+ * Do not edit this file as changes may cause incorrect behavior and will be lost
5
+ * once the code is regenerated.
6
+ *
7
+ * @generated by codegen project: GeneratePropsJavaInterface.js
8
+ */
9
+
10
+ package com.facebook.react.viewmanagers;
11
+
12
+ import android.view.View;
13
+ import androidx.annotation.Nullable;
14
+
15
+ public interface RNSScreenManagerInterface<T extends View> {
16
+ void setStackPresentation(T view, @Nullable String value);
17
+ void setStackAnimation(T view, @Nullable String value);
18
+ void setGestureEnabled(T view, boolean value);
19
+ void setReplaceAnimation(T view, @Nullable String value);
20
+ void setScreenOrientation(T view, @Nullable String value);
21
+ void setStatusBarAnimation(T view, @Nullable String value);
22
+ void setStatusBarColor(T view, @Nullable Integer value);
23
+ void setStatusBarStyle(T view, @Nullable String value);
24
+ void setStatusBarTranslucent(T view, boolean value);
25
+ void setStatusBarHidden(T view, boolean value);
26
+ void setNavigationBarColor(T view, @Nullable Integer value);
27
+ void setNavigationBarHidden(T view, boolean value);
28
+ void setNativeBackButtonDismissalEnabled(T view, boolean value);
29
+ void setActivityState(T view, int value);
30
+ }