react-native-screens 3.31.1 → 3.33.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/README.md +21 -11
- package/RNScreens.podspec +11 -52
- package/android/CMakeLists.txt +48 -4
- package/android/build.gradle +16 -9
- package/android/src/fabric/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt +25 -16
- package/android/src/fabric/java/com/swmansion/rnscreens/NativeProxy.kt +53 -0
- package/android/src/main/cpp/NativeProxy.cpp +51 -0
- package/android/src/main/cpp/NativeProxy.h +35 -0
- package/android/src/main/cpp/OnLoad.cpp +8 -0
- package/android/src/main/cpp/jni-adapter.cpp +86 -93
- package/android/src/main/java/com/swmansion/rnscreens/CustomSearchView.kt +7 -2
- package/android/src/main/java/com/swmansion/rnscreens/CustomToolbar.kt +6 -1
- package/android/src/main/java/com/swmansion/rnscreens/FragmentBackPressOverrider.kt +2 -2
- package/android/src/main/java/com/swmansion/rnscreens/RNScreensPackage.kt +36 -17
- package/android/src/main/java/com/swmansion/rnscreens/Screen.kt +150 -40
- package/android/src/main/java/com/swmansion/rnscreens/ScreenContainer.kt +52 -30
- package/android/src/main/java/com/swmansion/rnscreens/ScreenContainerViewManager.kt +27 -4
- package/android/src/main/java/com/swmansion/rnscreens/ScreenEventDispatcher.kt +10 -2
- package/android/src/main/java/com/swmansion/rnscreens/ScreenFragment.kt +56 -27
- package/android/src/main/java/com/swmansion/rnscreens/ScreenFragmentWrapper.kt +8 -1
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStack.kt +50 -19
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragment.kt +63 -39
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackFragmentWrapper.kt +4 -0
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfig.kt +88 -57
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderConfigViewManager.kt +131 -36
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubview.kt +19 -4
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackHeaderSubviewManager.kt +16 -10
- package/android/src/main/java/com/swmansion/rnscreens/ScreenStackViewManager.kt +28 -25
- package/android/src/main/java/com/swmansion/rnscreens/ScreenViewManager.kt +177 -77
- package/android/src/main/java/com/swmansion/rnscreens/ScreenWindowTraits.kt +77 -25
- package/android/src/main/java/com/swmansion/rnscreens/ScreensModule.kt +31 -9
- package/android/src/main/java/com/swmansion/rnscreens/ScreensShadowNode.kt +3 -1
- package/android/src/main/java/com/swmansion/rnscreens/SearchBarManager.kt +160 -54
- package/android/src/main/java/com/swmansion/rnscreens/SearchBarView.kt +29 -22
- package/android/src/main/java/com/swmansion/rnscreens/SearchViewFormatter.kt +7 -2
- package/android/src/main/java/com/swmansion/rnscreens/events/HeaderAttachedEvent.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/events/HeaderBackButtonClickedEvent.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/events/HeaderDetachedEvent.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/events/HeaderHeightChangeEvent.kt +5 -6
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenAppearEvent.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenDisappearEvent.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenDismissedEvent.kt +8 -4
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenTransitionProgressEvent.kt +7 -6
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenWillAppearEvent.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/events/ScreenWillDisappearEvent.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarBlurEvent.kt +5 -2
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarChangeTextEvent.kt +4 -3
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarCloseEvent.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarFocusEvent.kt +5 -2
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarOpenEvent.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/events/SearchBarSearchButtonPressEvent.kt +9 -4
- package/android/src/main/java/com/swmansion/rnscreens/events/StackFinishTransitioningEvent.kt +4 -1
- package/android/src/main/java/com/swmansion/rnscreens/utils/DeviceUtils.kt +1 -5
- package/android/src/main/java/com/swmansion/rnscreens/utils/ScreenDummyLayoutHelper.kt +214 -0
- package/android/src/main/jni/CMakeLists.txt +5 -4
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenContainerManagerDelegate.java +25 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenContainerManagerInterface.java +16 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerDelegate.java +6 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenManagerInterface.java +2 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderConfigManagerDelegate.java +3 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSScreenStackHeaderConfigManagerInterface.java +1 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSSearchBarManagerDelegate.java +99 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNSSearchBarManagerInterface.java +37 -0
- package/android/src/paper/java/com/swmansion/rnscreens/FabricEnabledViewGroup.kt +10 -5
- package/android/src/paper/java/com/swmansion/rnscreens/NativeProxy.kt +19 -0
- package/android/src/paper/java/com/swmansion/rnscreens/NativeScreensModuleSpec.java +4 -0
- package/common/cpp/react/renderer/components/rnscreens/FrameCorrectionModes.h +51 -0
- package/common/cpp/react/renderer/components/rnscreens/RNSModalScreenComponentDescriptor.h +8 -9
- package/common/cpp/react/renderer/components/rnscreens/RNSModalScreenShadowNode.cpp +2 -1
- package/common/cpp/react/renderer/components/rnscreens/RNSModalScreenShadowNode.h +9 -8
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenComponentDescriptor.h +147 -10
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.cpp +51 -1
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenShadowNode.h +29 -7
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenState.cpp +22 -1
- package/common/cpp/react/renderer/components/rnscreens/RNSScreenState.h +30 -10
- package/common/cpp/react/renderer/components/rnscreens/utils/RectUtil.h +36 -0
- package/cpp/RNSScreenRemovalListener.cpp +25 -0
- package/cpp/RNSScreenRemovalListener.h +20 -0
- package/cpp/RNScreensTurboModule.cpp +31 -23
- package/cpp/RNScreensTurboModule.h +17 -20
- package/ios/RNSConvert.h +7 -0
- package/ios/RNSConvert.mm +24 -0
- package/ios/RNSModalScreen.mm +22 -0
- package/ios/RNSModule.mm +2 -3
- package/ios/RNSScreen.h +2 -1
- package/ios/RNSScreen.mm +35 -19
- package/ios/RNSScreenContainer.mm +1 -1
- package/ios/RNSScreenStack.mm +59 -54
- package/ios/RNSScreenStackAnimator.mm +43 -6
- package/ios/RNSScreenStackHeaderConfig.h +2 -0
- package/ios/RNSScreenStackHeaderConfig.mm +93 -28
- package/ios/RNSScreenStackHeaderSubview.mm +8 -0
- package/ios/RNSSearchBar.h +5 -5
- package/ios/RNSSearchBar.mm +11 -11
- package/ios/utils/RCTSurfaceTouchHandler+RNSUtility.h +15 -0
- package/ios/utils/RCTSurfaceTouchHandler+RNSUtility.mm +14 -0
- package/ios/utils/RCTTouchHandler+RNSUtility.h +15 -0
- package/ios/utils/RCTTouchHandler+RNSUtility.mm +15 -0
- package/ios/utils/UIView+RNSUtility.h +23 -0
- package/ios/utils/UIView+RNSUtility.mm +55 -0
- package/lib/commonjs/components/Screen.js +119 -127
- package/lib/commonjs/components/Screen.js.map +1 -1
- package/lib/commonjs/components/ScreenStack.js +8 -1
- package/lib/commonjs/components/ScreenStack.js.map +1 -1
- package/lib/commonjs/components/SearchBar.js +39 -36
- package/lib/commonjs/components/SearchBar.js.map +1 -1
- package/lib/commonjs/fabric/ModalScreenNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/ScreenNativeComponent.js.map +1 -1
- package/lib/commonjs/fabric/ScreenStackHeaderConfigNativeComponent.js.map +1 -1
- package/lib/commonjs/native-stack/views/HeaderConfig.js +2 -0
- package/lib/commonjs/native-stack/views/HeaderConfig.js.map +1 -1
- package/lib/commonjs/native-stack/views/NativeStackView.js +4 -0
- package/lib/commonjs/native-stack/views/NativeStackView.js.map +1 -1
- package/lib/module/components/Screen.js +118 -126
- package/lib/module/components/Screen.js.map +1 -1
- package/lib/module/components/ScreenStack.js +8 -1
- package/lib/module/components/ScreenStack.js.map +1 -1
- package/lib/module/components/SearchBar.js +39 -36
- package/lib/module/components/SearchBar.js.map +1 -1
- package/lib/module/fabric/ModalScreenNativeComponent.js.map +1 -1
- package/lib/module/fabric/ScreenNativeComponent.js.map +1 -1
- package/lib/module/fabric/ScreenStackHeaderConfigNativeComponent.js.map +1 -1
- package/lib/module/native-stack/views/HeaderConfig.js +2 -0
- package/lib/module/native-stack/views/HeaderConfig.js.map +1 -1
- package/lib/module/native-stack/views/NativeStackView.js +4 -0
- package/lib/module/native-stack/views/NativeStackView.js.map +1 -1
- package/lib/typescript/TransitionProgressContext.d.ts +1 -1
- package/lib/typescript/TransitionProgressContext.d.ts.map +1 -1
- package/lib/typescript/components/Screen.d.ts +3 -14
- package/lib/typescript/components/Screen.d.ts.map +1 -1
- package/lib/typescript/components/ScreenStack.d.ts.map +1 -1
- package/lib/typescript/components/SearchBar.d.ts +14 -21
- package/lib/typescript/components/SearchBar.d.ts.map +1 -1
- package/lib/typescript/fabric/ModalScreenNativeComponent.d.ts +12 -10
- package/lib/typescript/fabric/ModalScreenNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/ScreenNativeComponent.d.ts +12 -10
- package/lib/typescript/fabric/ScreenNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/ScreenStackHeaderConfigNativeComponent.d.ts +5 -3
- package/lib/typescript/fabric/ScreenStackHeaderConfigNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/ScreenStackHeaderSubviewNativeComponent.d.ts +1 -1
- package/lib/typescript/fabric/ScreenStackHeaderSubviewNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/ScreenStackNativeComponent.d.ts +1 -1
- package/lib/typescript/fabric/ScreenStackNativeComponent.d.ts.map +1 -1
- package/lib/typescript/fabric/SearchBarNativeComponent.d.ts +9 -9
- package/lib/typescript/fabric/SearchBarNativeComponent.d.ts.map +1 -1
- package/lib/typescript/gesture-handler/RNScreensTurboModule.d.ts +1 -1
- package/lib/typescript/gesture-handler/RNScreensTurboModule.d.ts.map +1 -1
- package/lib/typescript/native-stack/types.d.ts +39 -14
- package/lib/typescript/native-stack/types.d.ts.map +1 -1
- package/lib/typescript/native-stack/utils/SafeAreaProviderCompat.d.ts +1 -1
- package/lib/typescript/native-stack/utils/SafeAreaProviderCompat.d.ts.map +1 -1
- package/lib/typescript/native-stack/utils/getDefaultHeaderHeight.d.ts +1 -1
- package/lib/typescript/native-stack/utils/getDefaultHeaderHeight.d.ts.map +1 -1
- package/lib/typescript/native-stack/utils/useAnimatedHeaderHeight.d.ts +1 -1
- package/lib/typescript/native-stack/utils/useAnimatedHeaderHeight.d.ts.map +1 -1
- package/lib/typescript/native-stack/views/HeaderConfig.d.ts +2 -2
- package/lib/typescript/native-stack/views/HeaderConfig.d.ts.map +1 -1
- package/lib/typescript/native-stack/views/NativeStackView.d.ts +1 -1
- package/lib/typescript/native-stack/views/NativeStackView.d.ts.map +1 -1
- package/lib/typescript/reanimated/ReanimatedTransitionProgressContext.d.ts +1 -1
- package/lib/typescript/reanimated/ReanimatedTransitionProgressContext.d.ts.map +1 -1
- package/lib/typescript/types.d.ts +39 -13
- package/lib/typescript/types.d.ts.map +1 -1
- package/lib/typescript/useTransitionProgress.d.ts +3 -3
- package/native-stack/README.md +116 -98
- package/package.json +16 -7
- package/react-native.config.js +17 -15
- package/src/TransitionProgressContext.tsx +1 -1
- package/src/components/Screen.tsx +31 -37
- package/src/components/ScreenStack.tsx +11 -1
- package/src/components/ScreenStackHeaderConfig.tsx +5 -5
- package/src/components/ScreenStackHeaderConfig.web.tsx +6 -6
- package/src/components/SearchBar.tsx +77 -65
- package/src/core.ts +1 -1
- package/src/fabric/ModalScreenNativeComponent.ts +2 -0
- package/src/fabric/ScreenNativeComponent.ts +2 -0
- package/src/fabric/ScreenNavigationContainerNativeComponent.ts +1 -1
- package/src/fabric/ScreenStackHeaderConfigNativeComponent.ts +4 -1
- package/src/fabric/ScreenStackHeaderSubviewNativeComponent.ts +1 -1
- package/src/fabric/SearchBarNativeComponent.ts +7 -7
- package/src/gesture-handler/ScreenGestureDetector.tsx +5 -5
- package/src/gesture-handler/constraints.ts +5 -5
- package/src/gesture-handler/fabricUtils.ts +1 -1
- package/src/native-stack/contexts/GHContext.tsx +1 -1
- package/src/native-stack/navigators/createNativeStackNavigator.tsx +3 -3
- package/src/native-stack/types.tsx +29 -4
- package/src/native-stack/utils/getDefaultHeaderHeight.tsx +1 -1
- package/src/native-stack/utils/getStatusBarHeight.tsx +1 -1
- package/src/native-stack/utils/useAnimatedHeaderHeight.tsx +1 -1
- package/src/native-stack/utils/useBackPressSubscription.tsx +1 -1
- package/src/native-stack/utils/useHeaderHeight.tsx +1 -1
- package/src/native-stack/views/FontProcessor.tsx +1 -1
- package/src/native-stack/views/HeaderConfig.tsx +3 -1
- package/src/native-stack/views/NativeStackView.tsx +13 -9
- package/src/reanimated/ReanimatedHeaderHeightContext.tsx +1 -1
- package/src/reanimated/ReanimatedNativeStackScreen.tsx +5 -5
- package/src/reanimated/ReanimatedScreen.tsx +2 -2
- package/src/reanimated/ReanimatedScreenProvider.tsx +1 -1
- package/src/reanimated/useReanimatedHeaderHeight.tsx +1 -1
- package/src/reanimated/useReanimatedTransitionProgress.tsx +1 -1
- package/src/types.tsx +31 -5
- package/src/useTransitionProgress.tsx +1 -1
- package/windows/README.md +4 -1
package/README.md
CHANGED
|
@@ -51,6 +51,7 @@ public class MainActivity extends ReactActivity {
|
|
|
51
51
|
}
|
|
52
52
|
}
|
|
53
53
|
```
|
|
54
|
+
|
|
54
55
|
</details>
|
|
55
56
|
|
|
56
57
|
<details>
|
|
@@ -69,6 +70,7 @@ class MainActivity: ReactActivity() {
|
|
|
69
70
|
}
|
|
70
71
|
}
|
|
71
72
|
```
|
|
73
|
+
|
|
72
74
|
</details>
|
|
73
75
|
|
|
74
76
|
For people that must handle cases like this, there is [a more detailed discussion of the difficulties in a series of related comments](https://github.com/software-mansion/react-native-screens/issues/17#issuecomment-424704633).
|
|
@@ -105,11 +107,13 @@ Screens are already integrated with the React Native's most popular navigation l
|
|
|
105
107
|
## Supported react-native version
|
|
106
108
|
|
|
107
109
|
| library version | react-native version |
|
|
108
|
-
|
|
|
109
|
-
| 3.
|
|
110
|
-
| 3.
|
|
111
|
-
| 3.
|
|
112
|
-
|
|
|
110
|
+
| --------------- | -------------------- |
|
|
111
|
+
| 3.33.0+ | 0.72.0+
|
|
112
|
+
| 3.32.0+ | 0.71.0+ |
|
|
113
|
+
| 3.30.0+ | 0.68.0+ |
|
|
114
|
+
| 3.14.0+ | 0.64.0+ |
|
|
115
|
+
| 3.0.0+ | 0.62.0+ |
|
|
116
|
+
| 2.0.0+ | 0.60.0+ |
|
|
113
117
|
|
|
114
118
|
### Support for Fabric
|
|
115
119
|
|
|
@@ -118,12 +122,14 @@ Screens are already integrated with the React Native's most popular navigation l
|
|
|
118
122
|
Here's a table with summary of supported `react-native` versions when Fabric is turned on.
|
|
119
123
|
|
|
120
124
|
| library version | react-native version |
|
|
121
|
-
|
|
|
122
|
-
| 3.
|
|
123
|
-
| 3.
|
|
124
|
-
| 3.
|
|
125
|
-
| 3.
|
|
126
|
-
| 3.
|
|
125
|
+
| --------------- | -------------------- |
|
|
126
|
+
| 3.33.0+ | 0.75.0+ |
|
|
127
|
+
| 3.32.0+ | 0.74.0+ |
|
|
128
|
+
| 3.28.0+ | 0.73.0+ |
|
|
129
|
+
| 3.21.0+ | 0.72.0+ |
|
|
130
|
+
| 3.19.0+ | 0.71.0+ |
|
|
131
|
+
| 3.18.0+ | 0.70.0+ |
|
|
132
|
+
| 3.14.0+ | 0.69.0+ |
|
|
127
133
|
|
|
128
134
|
## Usage with [react-navigation](https://github.com/react-navigation/react-navigation)
|
|
129
135
|
|
|
@@ -233,3 +239,7 @@ This project has been build and is maintained thanks to the support from [Shopif
|
|
|
233
239
|
[](https://shopify.com)
|
|
234
240
|
[](https://expo.io)
|
|
235
241
|
[](https://swmansion.com)
|
|
242
|
+
|
|
243
|
+
## React Native Screens is created by Software Mansion
|
|
244
|
+
|
|
245
|
+
Since 2012 [Software Mansion](https://swmansion.com) is a software agency with experience in building web and mobile apps. We are Core React Native Contributors and experts in dealing with all kinds of React Native issues. We can help you build your next dream product – [Hire us](https://swmansion.com/contact/projects?utm_source=screens&utm_medium=readme).
|
package/RNScreens.podspec
CHANGED
|
@@ -4,51 +4,7 @@ package = JSON.parse(File.read(File.join(__dir__, "package.json")))
|
|
|
4
4
|
|
|
5
5
|
new_arch_enabled = ENV['RCT_NEW_ARCH_ENABLED'] == '1'
|
|
6
6
|
platform = new_arch_enabled ? "11.0" : "9.0"
|
|
7
|
-
source_files = new_arch_enabled ? 'ios/**/*.{h,m,mm,cpp}' : ["ios/**/*.{h,m,mm}", "cpp
|
|
8
|
-
|
|
9
|
-
folly_compiler_flags = '-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32'
|
|
10
|
-
|
|
11
|
-
# Helper class to avoid clashing with Cocoapods install_dependencies function
|
|
12
|
-
class RNScreensDependencyHelper
|
|
13
|
-
# Helper class to add the Common subspec
|
|
14
|
-
def self.add_common_subspec(s, new_arch_enabled)
|
|
15
|
-
unless new_arch_enabled
|
|
16
|
-
return
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
s.subspec "common" do |ss|
|
|
20
|
-
ss.source_files = ["common/cpp/**/*.{cpp,h}", "cpp/**/*.{cpp,h}"]
|
|
21
|
-
ss.header_dir = "rnscreens"
|
|
22
|
-
ss.pod_target_xcconfig = { "HEADER_SEARCH_PATHS" => "\"$(PODS_TARGET_SRCROOT)/common/cpp\"" }
|
|
23
|
-
end
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
# Function to support older versions of React Native which do not provide the
|
|
27
|
-
# install_modules_dependencies function
|
|
28
|
-
def self.install_dependencies(s, new_arch_enabled)
|
|
29
|
-
if new_arch_enabled
|
|
30
|
-
s.pod_target_xcconfig = {
|
|
31
|
-
'HEADER_SEARCH_PATHS' => '"$(PODS_ROOT)/boost" "$(PODS_ROOT)/boost-for-react-native" "$(PODS_ROOT)/RCT-Folly"',
|
|
32
|
-
"CLANG_CXX_LANGUAGE_STANDARD" => "c++17",
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
s.compiler_flags = folly_compiler_flags + ' ' + '-DRCT_NEW_ARCH_ENABLED'
|
|
36
|
-
|
|
37
|
-
s.dependency "React"
|
|
38
|
-
s.dependency "React-RCTFabric"
|
|
39
|
-
s.dependency "React-Codegen"
|
|
40
|
-
s.dependency "RCT-Folly"
|
|
41
|
-
s.dependency "RCTRequired"
|
|
42
|
-
s.dependency "RCTTypeSafety"
|
|
43
|
-
s.dependency "ReactCommon/turbomodule/core"
|
|
44
|
-
|
|
45
|
-
self.add_common_subspec(s, new_arch_enabled)
|
|
46
|
-
else
|
|
47
|
-
s.dependency "React-Core"
|
|
48
|
-
s.dependency "React-RCTImage"
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
end
|
|
7
|
+
source_files = new_arch_enabled ? 'ios/**/*.{h,m,mm,cpp}' : ["ios/**/*.{h,m,mm}", "cpp/RNScreensTurboModule.cpp", "cpp/RNScreensTurboModule.h"]
|
|
52
8
|
|
|
53
9
|
Pod::Spec.new do |s|
|
|
54
10
|
s.name = "RNScreens"
|
|
@@ -63,14 +19,17 @@ Pod::Spec.new do |s|
|
|
|
63
19
|
s.platforms = { :ios => platform, :tvos => "11.0", :visionos => "1.0" }
|
|
64
20
|
s.source = { :git => "https://github.com/software-mansion/react-native-screens.git", :tag => "#{s.version}" }
|
|
65
21
|
s.source_files = source_files
|
|
22
|
+
s.project_header_files = "cpp/**/*.h" # Don't expose C++ headers publicly to allow importing framework into Swift files
|
|
66
23
|
s.requires_arc = true
|
|
67
24
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
25
|
+
install_modules_dependencies(s)
|
|
26
|
+
if new_arch_enabled
|
|
27
|
+
s.subspec "common" do |ss|
|
|
28
|
+
ss.source_files = ["common/cpp/**/*.{cpp,h}", "cpp/**/*.{cpp,h}"]
|
|
29
|
+
ss.header_dir = "rnscreens"
|
|
30
|
+
ss.pod_target_xcconfig = { "HEADER_SEARCH_PATHS" => "\"$(PODS_TARGET_SRCROOT)/common/cpp\"" }
|
|
31
|
+
end
|
|
75
32
|
end
|
|
33
|
+
|
|
34
|
+
s.dependency "React-RCTImage"
|
|
76
35
|
end
|
package/android/CMakeLists.txt
CHANGED
|
@@ -2,11 +2,22 @@ cmake_minimum_required(VERSION 3.9.0)
|
|
|
2
2
|
|
|
3
3
|
project(rnscreens)
|
|
4
4
|
|
|
5
|
+
if(${RNS_NEW_ARCH_ENABLED})
|
|
5
6
|
add_library(rnscreens
|
|
6
7
|
SHARED
|
|
7
8
|
../cpp/RNScreensTurboModule.cpp
|
|
9
|
+
../cpp/RNSScreenRemovalListener.cpp
|
|
8
10
|
./src/main/cpp/jni-adapter.cpp
|
|
11
|
+
./src/main/cpp/NativeProxy.cpp
|
|
12
|
+
./src/main/cpp/OnLoad.cpp
|
|
9
13
|
)
|
|
14
|
+
else()
|
|
15
|
+
add_library(rnscreens
|
|
16
|
+
SHARED
|
|
17
|
+
../cpp/RNScreensTurboModule.cpp
|
|
18
|
+
./src/main/cpp/jni-adapter.cpp
|
|
19
|
+
)
|
|
20
|
+
endif()
|
|
10
21
|
|
|
11
22
|
include_directories(
|
|
12
23
|
../cpp
|
|
@@ -19,9 +30,42 @@ set_target_properties(rnscreens PROPERTIES
|
|
|
19
30
|
POSITION_INDEPENDENT_CODE ON
|
|
20
31
|
)
|
|
21
32
|
|
|
33
|
+
target_compile_definitions(
|
|
34
|
+
rnscreens
|
|
35
|
+
PRIVATE
|
|
36
|
+
-DFOLLY_NO_CONFIG=1
|
|
37
|
+
)
|
|
38
|
+
|
|
22
39
|
find_package(ReactAndroid REQUIRED CONFIG)
|
|
23
40
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
41
|
+
if(${RNS_NEW_ARCH_ENABLED})
|
|
42
|
+
find_package(fbjni REQUIRED CONFIG)
|
|
43
|
+
|
|
44
|
+
target_link_libraries(
|
|
45
|
+
rnscreens
|
|
46
|
+
ReactAndroid::jsi
|
|
47
|
+
ReactAndroid::react_nativemodule_core
|
|
48
|
+
ReactAndroid::react_utils
|
|
49
|
+
ReactAndroid::reactnativejni
|
|
50
|
+
ReactAndroid::fabricjni
|
|
51
|
+
ReactAndroid::react_debug
|
|
52
|
+
ReactAndroid::react_render_core
|
|
53
|
+
ReactAndroid::runtimeexecutor
|
|
54
|
+
ReactAndroid::react_render_graphics
|
|
55
|
+
ReactAndroid::rrc_view
|
|
56
|
+
ReactAndroid::yoga
|
|
57
|
+
ReactAndroid::rrc_text
|
|
58
|
+
ReactAndroid::glog
|
|
59
|
+
ReactAndroid::react_render_componentregistry
|
|
60
|
+
ReactAndroid::react_render_consistency
|
|
61
|
+
ReactAndroid::react_performance_timeline
|
|
62
|
+
ReactAndroid::react_render_observers_events
|
|
63
|
+
fbjni::fbjni
|
|
64
|
+
android
|
|
65
|
+
)
|
|
66
|
+
else()
|
|
67
|
+
target_link_libraries(rnscreens
|
|
68
|
+
ReactAndroid::jsi
|
|
69
|
+
android
|
|
70
|
+
)
|
|
71
|
+
endif()
|
package/android/build.gradle
CHANGED
|
@@ -18,10 +18,14 @@ buildscript {
|
|
|
18
18
|
dependencies {
|
|
19
19
|
classpath('com.android.tools.build:gradle:4.2.2')
|
|
20
20
|
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:${safeExtGet('kotlinVersion', rnsDefaultKotlinVersion)}"
|
|
21
|
-
classpath "com.diffplug.spotless:spotless-plugin-gradle:6.
|
|
21
|
+
classpath "com.diffplug.spotless:spotless-plugin-gradle:6.25.0"
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
+
def isRunningInContextOfScreensRepo() {
|
|
26
|
+
return project == rootProject
|
|
27
|
+
}
|
|
28
|
+
|
|
25
29
|
def isNewArchitectureEnabled() {
|
|
26
30
|
// To opt-in for the New Architecture, you can either:
|
|
27
31
|
// - Set `newArchEnabled` to true inside the `gradle.properties` file
|
|
@@ -31,7 +35,7 @@ def isNewArchitectureEnabled() {
|
|
|
31
35
|
}
|
|
32
36
|
|
|
33
37
|
// spotless is only accessible within react-native-screens repo
|
|
34
|
-
if (
|
|
38
|
+
if (isRunningInContextOfScreensRepo()) {
|
|
35
39
|
apply from: 'spotless.gradle'
|
|
36
40
|
}
|
|
37
41
|
|
|
@@ -58,7 +62,7 @@ def resolveReactNativeDirectory() {
|
|
|
58
62
|
}
|
|
59
63
|
|
|
60
64
|
def reactNativeFromAppNodeModules = file("${projectDir}/../../react-native")
|
|
61
|
-
if (reactNativeFromAppNodeModules.exists()) {
|
|
65
|
+
if (!isRunningInContextOfScreensRepo() && reactNativeFromAppNodeModules.exists()) {
|
|
62
66
|
return reactNativeFromAppNodeModules
|
|
63
67
|
}
|
|
64
68
|
|
|
@@ -68,7 +72,7 @@ def resolveReactNativeDirectory() {
|
|
|
68
72
|
}
|
|
69
73
|
|
|
70
74
|
throw new GradleException(
|
|
71
|
-
"[RNScreens] Unable to resolve react-native location in node_modules. You should project extension property (in `app/build.gradle`) `REACT_NATIVE_NODE_MODULES_DIR` with path to react-native."
|
|
75
|
+
"[RNScreens] Unable to resolve react-native location in node_modules. You should add project extension property (in `app/build.gradle`) `REACT_NATIVE_NODE_MODULES_DIR` with path to react-native."
|
|
72
76
|
)
|
|
73
77
|
}
|
|
74
78
|
|
|
@@ -77,6 +81,7 @@ def reactProperties = new Properties()
|
|
|
77
81
|
file("$reactNativeRootDir/ReactAndroid/gradle.properties").withInputStream { reactProperties.load(it) }
|
|
78
82
|
def REACT_NATIVE_VERSION = reactProperties.getProperty("VERSION_NAME")
|
|
79
83
|
def REACT_NATIVE_MINOR_VERSION = REACT_NATIVE_VERSION.startsWith("0.0.0-") ? 1000 : REACT_NATIVE_VERSION.split("\\.")[1].toInteger()
|
|
84
|
+
def IS_NEW_ARCHITECTURE_ENABLED = isNewArchitectureEnabled()
|
|
80
85
|
|
|
81
86
|
android {
|
|
82
87
|
compileSdkVersion safeExtGet('compileSdkVersion', rnsDefaultCompileSdkVersion)
|
|
@@ -102,13 +107,14 @@ android {
|
|
|
102
107
|
targetSdkVersion safeExtGet('targetSdkVersion', rnsDefaultTargetSdkVersion)
|
|
103
108
|
versionCode 1
|
|
104
109
|
versionName "1.0"
|
|
105
|
-
buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED",
|
|
110
|
+
buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", IS_NEW_ARCHITECTURE_ENABLED.toString()
|
|
106
111
|
ndk {
|
|
107
112
|
abiFilters (*reactNativeArchitectures())
|
|
108
113
|
}
|
|
109
114
|
externalNativeBuild {
|
|
110
115
|
cmake {
|
|
111
|
-
arguments "-DANDROID_STL=c++_shared"
|
|
116
|
+
arguments "-DANDROID_STL=c++_shared",
|
|
117
|
+
"-DRNS_NEW_ARCH_ENABLED=${IS_NEW_ARCHITECTURE_ENABLED}"
|
|
112
118
|
}
|
|
113
119
|
}
|
|
114
120
|
}
|
|
@@ -139,20 +145,21 @@ android {
|
|
|
139
145
|
"META-INF/**",
|
|
140
146
|
"**/libjsi.so",
|
|
141
147
|
"**/libc++_shared.so",
|
|
142
|
-
"**/libreact_render*.so"
|
|
148
|
+
"**/libreact_render*.so",
|
|
149
|
+
"**/libreactnativejni.so",
|
|
150
|
+
"**/libreact_performance_timeline.so"
|
|
143
151
|
]
|
|
144
152
|
}
|
|
145
153
|
sourceSets.main {
|
|
146
154
|
ext.androidResDir = "src/main/res"
|
|
147
155
|
java {
|
|
148
|
-
if (
|
|
156
|
+
if (IS_NEW_ARCHITECTURE_ENABLED) {
|
|
149
157
|
srcDirs += [
|
|
150
158
|
"src/fabric/java",
|
|
151
159
|
]
|
|
152
160
|
} else {
|
|
153
161
|
srcDirs += [
|
|
154
162
|
"src/paper/java",
|
|
155
|
-
"build/generated/source/codegen/java"
|
|
156
163
|
]
|
|
157
164
|
}
|
|
158
165
|
}
|
|
@@ -5,26 +5,36 @@ import androidx.annotation.UiThread
|
|
|
5
5
|
import com.facebook.react.bridge.ReactContext
|
|
6
6
|
import com.facebook.react.bridge.WritableMap
|
|
7
7
|
import com.facebook.react.bridge.WritableNativeMap
|
|
8
|
-
import com.facebook.react.uimanager.FabricViewStateManager
|
|
9
8
|
import com.facebook.react.uimanager.PixelUtil
|
|
9
|
+
import com.facebook.react.uimanager.StateWrapper
|
|
10
10
|
import kotlin.math.abs
|
|
11
11
|
|
|
12
|
-
abstract class FabricEnabledViewGroup
|
|
13
|
-
|
|
12
|
+
abstract class FabricEnabledViewGroup(
|
|
13
|
+
context: ReactContext?,
|
|
14
|
+
) : ViewGroup(context) {
|
|
15
|
+
private var mStateWrapper: StateWrapper? = null
|
|
14
16
|
|
|
15
17
|
private var lastSetWidth = 0f
|
|
16
18
|
private var lastSetHeight = 0f
|
|
17
19
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
+
fun setStateWrapper(wrapper: StateWrapper?) {
|
|
21
|
+
mStateWrapper = wrapper
|
|
20
22
|
}
|
|
21
23
|
|
|
22
|
-
protected fun updateScreenSizeFabric(
|
|
24
|
+
protected fun updateScreenSizeFabric(
|
|
25
|
+
width: Int,
|
|
26
|
+
height: Int,
|
|
27
|
+
headerHeight: Double,
|
|
28
|
+
) {
|
|
23
29
|
updateState(width, height, headerHeight)
|
|
24
30
|
}
|
|
25
31
|
|
|
26
32
|
@UiThread
|
|
27
|
-
fun updateState(
|
|
33
|
+
fun updateState(
|
|
34
|
+
width: Int,
|
|
35
|
+
height: Int,
|
|
36
|
+
headerHeight: Double,
|
|
37
|
+
) {
|
|
28
38
|
val realWidth: Float = PixelUtil.toDIPFromPixel(width.toFloat())
|
|
29
39
|
val realHeight: Float = PixelUtil.toDIPFromPixel(height.toFloat())
|
|
30
40
|
|
|
@@ -39,14 +49,13 @@ abstract class FabricEnabledViewGroup constructor(context: ReactContext?) : View
|
|
|
39
49
|
|
|
40
50
|
lastSetWidth = realWidth
|
|
41
51
|
lastSetHeight = realHeight
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
}
|
|
52
|
+
val map: WritableMap =
|
|
53
|
+
WritableNativeMap().apply {
|
|
54
|
+
putDouble("frameWidth", realWidth.toDouble())
|
|
55
|
+
putDouble("frameHeight", realHeight.toDouble())
|
|
56
|
+
putDouble("contentOffsetX", 0.0)
|
|
57
|
+
putDouble("contentOffsetY", headerHeight)
|
|
58
|
+
}
|
|
59
|
+
mStateWrapper?.updateState(map)
|
|
51
60
|
}
|
|
52
61
|
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
package com.swmansion.rnscreens
|
|
2
|
+
|
|
3
|
+
import android.util.Log
|
|
4
|
+
import com.facebook.jni.HybridData
|
|
5
|
+
import com.facebook.proguard.annotations.DoNotStrip
|
|
6
|
+
import com.facebook.react.fabric.FabricUIManager
|
|
7
|
+
import java.lang.ref.WeakReference
|
|
8
|
+
import java.util.concurrent.ConcurrentHashMap
|
|
9
|
+
|
|
10
|
+
class NativeProxy {
|
|
11
|
+
@DoNotStrip
|
|
12
|
+
@Suppress("unused")
|
|
13
|
+
private val mHybridData: HybridData
|
|
14
|
+
|
|
15
|
+
init {
|
|
16
|
+
mHybridData = initHybrid()
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
private external fun initHybrid(): HybridData
|
|
20
|
+
|
|
21
|
+
external fun nativeAddMutationsListener(fabricUIManager: FabricUIManager)
|
|
22
|
+
|
|
23
|
+
companion object {
|
|
24
|
+
// we use ConcurrentHashMap here since it will be read on the JS thread,
|
|
25
|
+
// and written to on the UI thread.
|
|
26
|
+
private val viewsMap = ConcurrentHashMap<Int, WeakReference<Screen>>()
|
|
27
|
+
|
|
28
|
+
fun addScreenToMap(
|
|
29
|
+
tag: Int,
|
|
30
|
+
view: Screen,
|
|
31
|
+
) {
|
|
32
|
+
viewsMap[tag] = WeakReference(view)
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
fun removeScreenFromMap(tag: Int) {
|
|
36
|
+
viewsMap.remove(tag)
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
fun clearMapOnInvalidate() {
|
|
40
|
+
viewsMap.clear()
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
@DoNotStrip
|
|
45
|
+
public fun notifyScreenRemoved(screenTag: Int) {
|
|
46
|
+
val screen = viewsMap[screenTag]?.get()
|
|
47
|
+
if (screen is Screen) {
|
|
48
|
+
screen.startRemovalTransition()
|
|
49
|
+
} else {
|
|
50
|
+
Log.w("[RNScreens]", "Did not find view with tag $screenTag.")
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
#include <fbjni/fbjni.h>
|
|
2
|
+
#include <react/fabric/Binding.h>
|
|
3
|
+
#include <react/renderer/scheduler/Scheduler.h>
|
|
4
|
+
|
|
5
|
+
#include <string>
|
|
6
|
+
|
|
7
|
+
#include "NativeProxy.h"
|
|
8
|
+
|
|
9
|
+
using namespace facebook;
|
|
10
|
+
using namespace react;
|
|
11
|
+
|
|
12
|
+
namespace rnscreens {
|
|
13
|
+
|
|
14
|
+
NativeProxy::NativeProxy(jni::alias_ref<NativeProxy::javaobject> jThis)
|
|
15
|
+
: javaPart_(jni::make_global(jThis)) {}
|
|
16
|
+
|
|
17
|
+
NativeProxy::~NativeProxy() {}
|
|
18
|
+
|
|
19
|
+
void NativeProxy::registerNatives() {
|
|
20
|
+
registerHybrid(
|
|
21
|
+
{makeNativeMethod("initHybrid", NativeProxy::initHybrid),
|
|
22
|
+
makeNativeMethod(
|
|
23
|
+
"nativeAddMutationsListener",
|
|
24
|
+
NativeProxy::nativeAddMutationsListener)});
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
void NativeProxy::nativeAddMutationsListener(
|
|
28
|
+
jni::alias_ref<facebook::react::JFabricUIManager::javaobject>
|
|
29
|
+
fabricUIManager) {
|
|
30
|
+
auto uiManager =
|
|
31
|
+
fabricUIManager->getBinding()->getScheduler()->getUIManager();
|
|
32
|
+
screenRemovalListener_ =
|
|
33
|
+
std::make_shared<RNSScreenRemovalListener>([this](int tag) {
|
|
34
|
+
static const auto method =
|
|
35
|
+
javaPart_->getClass()->getMethod<void(jint)>("notifyScreenRemoved");
|
|
36
|
+
method(javaPart_, tag);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
uiManager->getShadowTreeRegistry().enumerate(
|
|
40
|
+
[this](const facebook::react::ShadowTree &shadowTree, bool &stop) {
|
|
41
|
+
shadowTree.getMountingCoordinator()->setMountingOverrideDelegate(
|
|
42
|
+
screenRemovalListener_);
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
jni::local_ref<NativeProxy::jhybriddata> NativeProxy::initHybrid(
|
|
47
|
+
jni::alias_ref<jhybridobject> jThis) {
|
|
48
|
+
return makeCxxInstance(jThis);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
} // namespace rnscreens
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
|
|
3
|
+
#include <fbjni/fbjni.h>
|
|
4
|
+
#include <react/fabric/JFabricUIManager.h>
|
|
5
|
+
#include "RNSScreenRemovalListener.h"
|
|
6
|
+
|
|
7
|
+
#include <string>
|
|
8
|
+
|
|
9
|
+
namespace rnscreens {
|
|
10
|
+
using namespace facebook;
|
|
11
|
+
using namespace facebook::jni;
|
|
12
|
+
|
|
13
|
+
class NativeProxy : public jni::HybridClass<NativeProxy> {
|
|
14
|
+
public:
|
|
15
|
+
std::shared_ptr<RNSScreenRemovalListener> screenRemovalListener_;
|
|
16
|
+
static auto constexpr kJavaDescriptor =
|
|
17
|
+
"Lcom/swmansion/rnscreens/NativeProxy;";
|
|
18
|
+
static jni::local_ref<jhybriddata> initHybrid(
|
|
19
|
+
jni::alias_ref<jhybridobject> jThis);
|
|
20
|
+
static void registerNatives();
|
|
21
|
+
|
|
22
|
+
~NativeProxy();
|
|
23
|
+
|
|
24
|
+
private:
|
|
25
|
+
friend HybridBase;
|
|
26
|
+
jni::global_ref<NativeProxy::javaobject> javaPart_;
|
|
27
|
+
|
|
28
|
+
explicit NativeProxy(jni::alias_ref<NativeProxy::javaobject> jThis);
|
|
29
|
+
|
|
30
|
+
void nativeAddMutationsListener(
|
|
31
|
+
jni::alias_ref<facebook::react::JFabricUIManager::javaobject>
|
|
32
|
+
fabricUIManager);
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
} // namespace rnscreens
|