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.
- package/LICENSE +1 -1
- package/README.md +13 -7
- package/RNScreens.podspec +36 -6
- package/android/build.gradle +74 -3
- package/android/src/fabric/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt +49 -0
- package/android/src/fabric/java/com/swmansion/rnscreens/RNScreensComponentsRegistry.java +28 -0
- package/android/src/main/java/com/swmansion/rnscreens/RNScreensPackage.kt +11 -2
- package/android/src/main/java/com/swmansion/rnscreens/Screen.kt +52 -21
- package/android/src/main/java/com/swmansion/rnscreens/ScreenContainer.kt +1 -1
- package/android/src/main/java/com/swmansion/rnscreens/ScreenFragment.kt +64 -33
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStack.kt +9 -31
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragment.kt +0 -30
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfig.kt +12 -5
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigViewManager.kt +83 -18
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubviewManager.kt +17 -5
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackViewManager.kt +14 -1
- package/android/src/main/java/com/swmansion/rnscreens/ScreenViewManager.kt +41 -14
- package/android/src/main/java/com/swmansion/rnscreens/ScreenWindowTraits.kt +72 -11
- package/android/src/main/java/com/swmansion/rnscreens/SearchBarManager.kt +18 -1
- package/android/src/main/java/com/swmansion/rnscreens/SearchBarView.kt +7 -2
- package/android/src/main/java/com/swmansion/rnscreens/SearchViewFormatter.kt +29 -2
- package/android/src/main/jni/Android.mk +45 -0
- package/android/src/main/jni/OnLoad.cpp +9 -0
- package/android/src/main/jni/RNScreensComponentsRegistry.cpp +66 -0
- package/android/src/main/jni/RNScreensComponentsRegistry.h +34 -0
- package/android/src/main/res/anim/rns_default_enter_in.xml +18 -0
- package/android/src/main/res/anim/rns_default_enter_out.xml +19 -0
- package/android/src/main/res/anim/rns_default_exit_in.xml +17 -0
- package/android/src/main/res/anim/rns_default_exit_out.xml +18 -0
- package/android/src/main/res/anim/rns_fade_in.xml +7 -0
- package/android/src/main/res/anim/rns_fade_out.xml +7 -0
- package/android/src/main/res/anim/rns_no_animation_20.xml +6 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerDelegate.java +71 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerInterface.java +30 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderConfigManagerDelegate.java +104 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderConfigManagerInterface.java +41 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderSubviewManagerDelegate.java +31 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderSubviewManagerInterface.java +17 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackManagerDelegate.java +25 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackManagerInterface.java +16 -0
- package/android/src/paper/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt +16 -0
- package/common/cpp/Android.mk +38 -0
- package/common/cpp/rnscreens/RNSScreenComponentDescriptor.h +41 -0
- package/common/cpp/rnscreens/RNSScreenShadowNode.cpp +9 -0
- package/common/cpp/rnscreens/RNSScreenShadowNode.h +29 -0
- package/common/cpp/rnscreens/RNSScreenState.cpp +14 -0
- package/common/cpp/rnscreens/RNSScreenState.h +46 -0
- package/createNativeStackNavigator/README.md +12 -0
- package/ios/RNSScreen.h +10 -0
- package/ios/RNSScreen.m +34 -0
- package/ios/RNSScreenComponentView.h +23 -0
- package/ios/RNSScreenComponentView.mm +159 -0
- package/ios/RNSScreenContainer.m +5 -0
- package/ios/RNSScreenController.h +10 -0
- package/ios/RNSScreenController.mm +79 -0
- package/ios/RNSScreenStack.m +22 -7
- package/ios/RNSScreenStackAnimator.m +45 -14
- package/ios/RNSScreenStackComponentView.h +15 -0
- package/ios/RNSScreenStackComponentView.mm +295 -0
- package/ios/RNSScreenStackHeaderConfig.m +4 -1
- package/ios/RNSScreenStackHeaderConfigComponentView.h +42 -0
- package/ios/RNSScreenStackHeaderConfigComponentView.mm +662 -0
- package/ios/RNSScreenStackHeaderSubviewComponentView.h +14 -0
- package/ios/RNSScreenStackHeaderSubviewComponentView.mm +77 -0
- package/ios/RNSScreenWindowTraits.h +1 -0
- package/ios/RNSScreenWindowTraits.m +20 -0
- package/ios/UIViewController+RNScreens.m +10 -0
- package/ios/utils/RNSUIBarButtonItem.h +5 -0
- package/ios/utils/RNSUIBarButtonItem.mm +22 -0
- package/lib/commonjs/fabric/Screen.js +27 -0
- package/lib/commonjs/fabric/Screen.js.map +1 -0
- package/lib/commonjs/fabric/ScreenNativeComponent.js +23 -0
- package/lib/commonjs/fabric/ScreenNativeComponent.js.map +1 -0
- package/lib/commonjs/fabric/ScreenStack.js +27 -0
- package/lib/commonjs/fabric/ScreenStack.js.map +1 -0
- package/lib/commonjs/fabric/ScreenStackHeaderConfigNativeComponent.js +27 -0
- package/lib/commonjs/fabric/ScreenStackHeaderConfigNativeComponent.js.map +1 -0
- package/lib/commonjs/fabric/ScreenStackHeaderSubview.js +34 -0
- package/lib/commonjs/fabric/ScreenStackHeaderSubview.js.map +1 -0
- package/lib/commonjs/fabric/ScreenStackHeaderSubviewNativeComponent.js +27 -0
- package/lib/commonjs/fabric/ScreenStackHeaderSubviewNativeComponent.js.map +1 -0
- package/lib/commonjs/fabric/ScreenStackNativeComponent.js +21 -0
- package/lib/commonjs/fabric/ScreenStackNativeComponent.js.map +1 -0
- package/lib/commonjs/fabric/index.js +40 -0
- package/lib/commonjs/fabric/index.js.map +1 -0
- package/lib/commonjs/index.native.js +32 -15
- package/lib/commonjs/index.native.js.map +1 -1
- package/lib/commonjs/native-stack/views/NativeStackView.js +33 -4
- package/lib/commonjs/native-stack/views/NativeStackView.js.map +1 -1
- package/lib/module/fabric/Screen.js +11 -0
- package/lib/module/fabric/Screen.js.map +1 -0
- package/lib/module/fabric/ScreenNativeComponent.js +11 -0
- package/lib/module/fabric/ScreenNativeComponent.js.map +1 -0
- package/lib/module/fabric/ScreenStack.js +12 -0
- package/lib/module/fabric/ScreenStack.js.map +1 -0
- package/lib/module/fabric/ScreenStackHeaderConfigNativeComponent.js +10 -0
- package/lib/module/fabric/ScreenStackHeaderConfigNativeComponent.js.map +1 -0
- package/lib/module/fabric/ScreenStackHeaderSubview.js +21 -0
- package/lib/module/fabric/ScreenStackHeaderSubview.js.map +1 -0
- package/lib/module/fabric/ScreenStackHeaderSubviewNativeComponent.js +10 -0
- package/lib/module/fabric/ScreenStackHeaderSubviewNativeComponent.js.map +1 -0
- package/lib/module/fabric/ScreenStackNativeComponent.js +9 -0
- package/lib/module/fabric/ScreenStackNativeComponent.js.map +1 -0
- package/lib/module/fabric/index.js +6 -0
- package/lib/module/fabric/index.js.map +1 -0
- package/lib/module/index.native.js +32 -15
- package/lib/module/index.native.js.map +1 -1
- package/lib/module/native-stack/views/NativeStackView.js +33 -4
- package/lib/module/native-stack/views/NativeStackView.js.map +1 -1
- package/lib/typescript/native-stack/types.d.ts +34 -0
- package/lib/typescript/reanimated/ReanimatedNativeStackScreen.d.ts +1 -1
- package/lib/typescript/reanimated/ReanimatedScreen.d.ts +1 -1
- package/lib/typescript/types.d.ts +60 -5
- package/native-stack/README.md +39 -3
- package/package.json +17 -3
- package/reanimated/package.json +6 -0
- package/src/fabric/Screen.js +12 -0
- package/src/fabric/ScreenNativeComponent.js +64 -0
- package/src/fabric/ScreenStack.js +8 -0
- package/src/fabric/ScreenStackHeaderConfigNativeComponent.js +54 -0
- package/src/fabric/ScreenStackHeaderSubview.js +20 -0
- package/src/fabric/ScreenStackHeaderSubviewNativeComponent.js +31 -0
- package/src/fabric/ScreenStackNativeComponent.js +19 -0
- package/src/fabric/index.js +11 -0
- package/src/index.native.tsx +35 -14
- package/src/native-stack/types.tsx +34 -0
- package/src/native-stack/views/NativeStackView.tsx +33 -4
- 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
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
systemUiVisibilityFlags
|
|
86
|
-
|
|
87
|
-
|
|
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
|
-
|
|
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
|
|
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>(
|
|
15
|
+
get() = searchView.findViewById<View>(R.id.search_src_text) as? EditText
|
|
14
16
|
private val searchTextPlate
|
|
15
|
-
get() = searchView.findViewById<View>(
|
|
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,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,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
|
+
}
|