@amazon-devices/react-native-safe-area-context 2.0.9000000000 → 8.0.9000000000-rn-83
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 +6 -302
- package/SystemBundles/{85c8d24b7f717b77a2deb00e32cc2aaa293a5a16c46eecebca21e95bda425730.bundle → 920f0b3a0c43cc93db1621b4c3a47e06a0d4ed32175c793e9934ad9c764fbc25.bundle} +6447 -9418
- package/SystemBundles/920f0b3a0c43cc93db1621b4c3a47e06a0d4ed32175c793e9934ad9c764fbc25.map +2780 -0
- package/SystemModules/amzn__react-native-safe-area-context-8.modules.txt +7 -0
- package/SystemModules/amzn__react-native-safe-area-context-8.private.modules.txt +61 -0
- package/SystemModules/keplerscript-system-bundle-config.json +3 -3
- package/android/build.gradle +103 -25
- package/android/gradle.properties +1 -0
- package/android/spotless.gradle +24 -0
- package/android/src/fabric/java/com/th3rdwave/safeareacontext/InsetsChangeEvent.kt +25 -0
- package/android/src/fabric/java/com/th3rdwave/safeareacontext/UIManagerHelperCompat.kt +14 -0
- package/android/src/main/AndroidManifest.xml +1 -2
- package/android/src/main/java/com/th3rdwave/safeareacontext/EdgeInsets.kt +3 -0
- package/android/src/main/java/com/th3rdwave/safeareacontext/Rect.kt +3 -0
- package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaContextModule.kt +32 -0
- package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaContextPackage.kt +41 -0
- package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaProvider.kt +47 -0
- package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaProviderManager.kt +41 -0
- package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaUtils.kt +102 -0
- package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaView.kt +155 -0
- package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaViewEdges.kt +16 -0
- package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaViewLocalData.kt +7 -0
- package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaViewManager.kt +73 -0
- package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaViewMode.kt +6 -0
- package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaViewShadowNode.kt +170 -0
- package/android/src/main/java/com/th3rdwave/safeareacontext/SerializationUtils.kt +39 -0
- package/android/src/main/jni/CMakeLists.txt +87 -0
- package/android/src/main/jni/safeareacontext.h +17 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNCSafeAreaProviderManagerDelegate.java +31 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNCSafeAreaProviderManagerInterface.java +16 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNCSafeAreaViewManagerDelegate.java +41 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/RNCSafeAreaViewManagerInterface.java +20 -0
- package/android/src/paper/java/com/th3rdwave/safeareacontext/InsetsChangeEvent.kt +29 -0
- package/android/src/paper/java/com/th3rdwave/safeareacontext/NativeSafeAreaContextSpec.java +56 -0
- package/android/src/paper/java/com/th3rdwave/safeareacontext/UIManagerHelperCompat.kt +20 -0
- package/common/cpp/react/renderer/components/safeareacontext/RNCSafeAreaViewComponentDescriptor.h +25 -0
- package/common/cpp/react/renderer/components/safeareacontext/RNCSafeAreaViewShadowNode.cpp +131 -0
- package/common/cpp/react/renderer/components/safeareacontext/RNCSafeAreaViewShadowNode.h +36 -0
- package/common/cpp/react/renderer/components/safeareacontext/RNCSafeAreaViewState.cpp +23 -0
- package/common/cpp/react/renderer/components/safeareacontext/RNCSafeAreaViewState.h +56 -0
- package/ios/Fabric/RNCSafeAreaProviderComponentView.h +13 -0
- package/ios/Fabric/RNCSafeAreaProviderComponentView.mm +129 -0
- package/ios/Fabric/RNCSafeAreaViewComponentView.h +11 -0
- package/ios/Fabric/RNCSafeAreaViewComponentView.mm +153 -0
- package/ios/RNCSafeAreaContext.h +9 -0
- package/ios/RNCSafeAreaContext.mm +85 -0
- package/ios/{SafeAreaView/RNCSafeAreaProvider.h → RNCSafeAreaProvider.h} +4 -0
- package/ios/RNCSafeAreaProvider.m +102 -0
- package/ios/RNCSafeAreaProviderManager.m +20 -0
- package/ios/{SafeAreaView/RNCSafeAreaShadowView.m → RNCSafeAreaShadowView.m} +50 -36
- package/ios/RNCSafeAreaUtils.h +22 -0
- package/ios/RNCSafeAreaUtils.m +41 -0
- package/ios/{SafeAreaView/RNCSafeAreaView.h → RNCSafeAreaView.h} +8 -4
- package/ios/RNCSafeAreaView.m +168 -0
- package/ios/RNCSafeAreaViewEdgeMode.h +12 -0
- package/ios/RNCSafeAreaViewEdgeMode.m +16 -0
- package/ios/RNCSafeAreaViewEdges.h +15 -0
- package/ios/RNCSafeAreaViewEdges.m +36 -0
- package/ios/{SafeAreaView/RNCSafeAreaViewLocalData.h → RNCSafeAreaViewLocalData.h} +12 -1
- package/ios/{SafeAreaView/RNCSafeAreaViewLocalData.m → RNCSafeAreaViewLocalData.m} +4 -0
- package/ios/{SafeAreaView/RNCSafeAreaViewManager.m → RNCSafeAreaViewManager.m} +5 -1
- package/ios/RNCSafeAreaViewMode.m +15 -0
- package/ios/{SafeAreaView.xcodeproj → RNSafeAreaContext.xcodeproj}/project.pbxproj +70 -56
- package/jest/mock.tsx +59 -0
- package/kepler-compatibility.json +2 -2
- package/lib/commonjs/CompatNativeSafeAreaProvider.js +6 -6
- package/lib/commonjs/CompatNativeSafeAreaProvider.js.map +1 -1
- package/lib/commonjs/InitialWindow.js.map +1 -1
- package/lib/commonjs/InitialWindow.kepler.js +1 -1
- package/lib/commonjs/InitialWindow.kepler.js.map +1 -1
- package/lib/commonjs/InitialWindow.native.js +4 -4
- package/lib/commonjs/InitialWindow.native.js.map +1 -1
- package/lib/commonjs/NativeSafeAreaProvider.js +7 -124
- package/lib/commonjs/NativeSafeAreaProvider.js.map +1 -1
- package/lib/commonjs/NativeSafeAreaProvider.kepler.js +6 -2
- package/lib/commonjs/NativeSafeAreaProvider.kepler.js.map +1 -1
- package/lib/commonjs/NativeSafeAreaProvider.web.js +135 -0
- package/lib/commonjs/NativeSafeAreaProvider.web.js.map +1 -0
- package/lib/commonjs/NativeSafeAreaProvider.windows.js +6 -2
- package/lib/commonjs/NativeSafeAreaProvider.windows.js.map +1 -1
- package/lib/commonjs/SafeArea.types.js.map +1 -1
- package/lib/commonjs/SafeAreaContext.js +55 -34
- package/lib/commonjs/SafeAreaContext.js.map +1 -1
- package/lib/commonjs/SafeAreaView.js +39 -71
- package/lib/commonjs/SafeAreaView.js.map +1 -1
- package/lib/commonjs/SafeAreaView.kepler.js.map +1 -1
- package/lib/commonjs/SafeAreaView.web.js +91 -0
- package/lib/commonjs/SafeAreaView.web.js.map +1 -0
- package/lib/commonjs/SafeAreaView.windows.js.map +1 -1
- package/lib/commonjs/index.js +1 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/package.json +1 -0
- package/lib/commonjs/specs/NativeSafeAreaContext.js +9 -0
- package/lib/commonjs/specs/NativeSafeAreaContext.js.map +1 -0
- package/lib/commonjs/specs/NativeSafeAreaProvider.js +10 -0
- package/lib/commonjs/specs/NativeSafeAreaProvider.js.map +1 -0
- package/lib/commonjs/specs/NativeSafeAreaView.js +12 -0
- package/lib/commonjs/specs/NativeSafeAreaView.js.map +1 -0
- package/lib/module/CompatNativeSafeAreaProvider.js +8 -5
- package/lib/module/CompatNativeSafeAreaProvider.js.map +1 -1
- package/lib/module/InitialWindow.js +2 -0
- package/lib/module/InitialWindow.js.map +1 -1
- package/lib/module/InitialWindow.kepler.js +3 -1
- package/lib/module/InitialWindow.kepler.js.map +1 -1
- package/lib/module/InitialWindow.native.js +5 -4
- package/lib/module/InitialWindow.native.js.map +1 -1
- package/lib/module/NativeSafeAreaProvider.js +3 -122
- package/lib/module/NativeSafeAreaProvider.js.map +1 -1
- package/lib/module/NativeSafeAreaProvider.kepler.js +3 -2
- package/lib/module/NativeSafeAreaProvider.kepler.js.map +1 -1
- package/lib/module/NativeSafeAreaProvider.web.js +130 -0
- package/lib/module/NativeSafeAreaProvider.web.js.map +1 -0
- package/lib/module/NativeSafeAreaProvider.windows.js +3 -2
- package/lib/module/NativeSafeAreaProvider.windows.js.map +1 -1
- package/lib/module/SafeArea.types.js +2 -0
- package/lib/module/SafeArea.types.js.map +1 -1
- package/lib/module/SafeAreaContext.js +57 -33
- package/lib/module/SafeAreaContext.js.map +1 -1
- package/lib/module/SafeAreaView.js +38 -69
- package/lib/module/SafeAreaView.js.map +1 -1
- package/lib/module/SafeAreaView.kepler.js +2 -0
- package/lib/module/SafeAreaView.kepler.js.map +1 -1
- package/lib/module/SafeAreaView.web.js +86 -0
- package/lib/module/SafeAreaView.web.js.map +1 -0
- package/lib/module/SafeAreaView.windows.js +2 -0
- package/lib/module/SafeAreaView.windows.js.map +1 -1
- package/lib/module/index.js +3 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/specs/NativeSafeAreaContext.js +5 -0
- package/lib/module/specs/NativeSafeAreaContext.js.map +1 -0
- package/lib/module/specs/NativeSafeAreaProvider.js +5 -0
- package/lib/module/specs/NativeSafeAreaProvider.js.map +1 -0
- package/lib/module/specs/NativeSafeAreaView.js +7 -0
- package/lib/module/specs/NativeSafeAreaView.js.map +1 -0
- package/lib/typescript/CompatNativeSafeAreaProvider.d.ts +4 -0
- package/lib/typescript/CompatNativeSafeAreaProvider.d.ts.map +1 -0
- package/lib/typescript/{src/InitialWindow.d.ts → InitialWindow.d.ts} +2 -1
- package/lib/typescript/InitialWindow.d.ts.map +1 -0
- package/lib/typescript/{src/InitialWindow.kepler.d.ts → InitialWindow.kepler.d.ts} +1 -0
- package/lib/typescript/InitialWindow.kepler.d.ts.map +1 -0
- package/lib/typescript/{src/InitialWindow.native.d.ts → InitialWindow.native.d.ts} +2 -1
- package/lib/typescript/InitialWindow.native.d.ts.map +1 -0
- package/lib/typescript/NativeSafeAreaProvider.d.ts +3 -0
- package/lib/typescript/NativeSafeAreaProvider.d.ts.map +1 -0
- package/lib/typescript/NativeSafeAreaProvider.kepler.d.ts +2 -0
- package/lib/typescript/NativeSafeAreaProvider.kepler.d.ts.map +1 -0
- package/lib/typescript/NativeSafeAreaProvider.web.d.ts +4 -0
- package/lib/typescript/NativeSafeAreaProvider.web.d.ts.map +1 -0
- package/lib/typescript/NativeSafeAreaProvider.windows.d.ts +2 -0
- package/lib/typescript/NativeSafeAreaProvider.windows.d.ts.map +1 -0
- package/lib/typescript/SafeArea.types.d.ts +36 -0
- package/lib/typescript/SafeArea.types.d.ts.map +1 -0
- package/lib/typescript/{src/SafeAreaContext.d.ts → SafeAreaContext.d.ts} +9 -6
- package/lib/typescript/SafeAreaContext.d.ts.map +1 -0
- package/lib/typescript/SafeAreaView.d.ts +5 -0
- package/lib/typescript/SafeAreaView.d.ts.map +1 -0
- package/lib/typescript/{src/SafeAreaView.kepler.d.ts → SafeAreaView.kepler.d.ts} +1 -0
- package/lib/typescript/SafeAreaView.kepler.d.ts.map +1 -0
- package/lib/typescript/SafeAreaView.web.d.ts +4 -0
- package/lib/typescript/SafeAreaView.web.d.ts.map +1 -0
- package/lib/typescript/SafeAreaView.windows.d.ts +3 -0
- package/lib/typescript/SafeAreaView.windows.d.ts.map +1 -0
- package/lib/typescript/{src/index.d.ts → index.d.ts} +1 -0
- package/lib/typescript/index.d.ts.map +1 -0
- package/lib/typescript/specs/NativeSafeAreaContext.d.ts +23 -0
- package/lib/typescript/specs/NativeSafeAreaContext.d.ts.map +1 -0
- package/lib/typescript/specs/NativeSafeAreaProvider.d.ts +22 -0
- package/lib/typescript/specs/NativeSafeAreaProvider.d.ts.map +1 -0
- package/lib/typescript/specs/NativeSafeAreaView.d.ts +14 -0
- package/lib/typescript/specs/NativeSafeAreaView.d.ts.map +1 -0
- package/oss-attribution/attribution.txt +0 -0
- package/oss-attribution/licenseInfos.json +1 -0
- package/package.json +137 -1
- package/react-native-safe-area-context.podspec +26 -4
- package/react-native.config.js +8 -0
- package/src/CompatNativeSafeAreaProvider.tsx +2 -3
- package/src/InitialWindow.kepler.ts +1 -1
- package/src/InitialWindow.native.ts +5 -11
- package/src/InitialWindow.ts +1 -1
- package/src/NativeSafeAreaProvider.kepler.tsx +1 -3
- package/src/NativeSafeAreaProvider.tsx +2 -128
- package/src/NativeSafeAreaProvider.web.tsx +127 -0
- package/src/NativeSafeAreaProvider.windows.tsx +1 -3
- package/src/SafeArea.types.ts +15 -11
- package/src/SafeAreaContext.tsx +66 -43
- package/src/SafeAreaView.tsx +47 -82
- package/src/SafeAreaView.web.tsx +123 -0
- package/src/SafeAreaView.windows.tsx +2 -1
- package/src/index.tsx +2 -0
- package/src/specs/NativeSafeAreaContext.ts +23 -0
- package/src/specs/NativeSafeAreaProvider.ts +29 -0
- package/src/specs/NativeSafeAreaView.ts +17 -0
- package/SystemBundles/85c8d24b7f717b77a2deb00e32cc2aaa293a5a16c46eecebca21e95bda425730.map +0 -4335
- package/SystemModules/amzn__react-native-safe-area-context-2.modules.txt +0 -55
- package/SystemModules/amzn__react-native-safe-area-context-2.private.modules.txt +0 -90
- package/THIRD_PARTY_NOTICES.txt +0 -24
- package/android/src/main/java/com/th3rdwave/safeareacontext/EdgeInsets.java +0 -22
- package/android/src/main/java/com/th3rdwave/safeareacontext/InsetsChangeEvent.java +0 -33
- package/android/src/main/java/com/th3rdwave/safeareacontext/Rect.java +0 -22
- package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaContextPackage.java +0 -31
- package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaProvider.java +0 -66
- package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaProviderManager.java +0 -94
- package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaUtils.java +0 -82
- package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaView.java +0 -159
- package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaViewEdges.java +0 -8
- package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaViewLocalData.java +0 -27
- package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaViewManager.java +0 -72
- package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaViewMode.java +0 -6
- package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaViewShadowNode.java +0 -201
- package/android/src/main/java/com/th3rdwave/safeareacontext/SerializationUtils.java +0 -52
- package/ios/SafeAreaView/RCTView+SafeAreaCompat.h +0 -16
- package/ios/SafeAreaView/RCTView+SafeAreaCompat.m +0 -57
- package/ios/SafeAreaView/RNCSafeAreaProvider.m +0 -65
- package/ios/SafeAreaView/RNCSafeAreaProviderManager.m +0 -61
- package/ios/SafeAreaView/RNCSafeAreaView.m +0 -118
- package/ios/SafeAreaView/RNCSafeAreaViewEdges.h +0 -9
- package/ios/SafeAreaView/RNCSafeAreaViewEdges.m +0 -13
- package/ios/SafeAreaView/RNCSafeAreaViewMode.m +0 -11
- package/lib/commonjs/NativeSafeAreaProvider.macos.js +0 -9
- package/lib/commonjs/NativeSafeAreaProvider.macos.js.map +0 -1
- package/lib/commonjs/NativeSafeAreaProvider.native.js +0 -9
- package/lib/commonjs/NativeSafeAreaProvider.native.js.map +0 -1
- package/lib/commonjs/SafeAreaView.macos.js +0 -9
- package/lib/commonjs/SafeAreaView.macos.js.map +0 -1
- package/lib/commonjs/SafeAreaView.native.js +0 -9
- package/lib/commonjs/SafeAreaView.native.js.map +0 -1
- package/lib/commonjs/useWindowDimensions.js +0 -32
- package/lib/commonjs/useWindowDimensions.js.map +0 -1
- package/lib/module/NativeSafeAreaProvider.macos.js +0 -3
- package/lib/module/NativeSafeAreaProvider.macos.js.map +0 -1
- package/lib/module/NativeSafeAreaProvider.native.js +0 -3
- package/lib/module/NativeSafeAreaProvider.native.js.map +0 -1
- package/lib/module/SafeAreaView.macos.js +0 -3
- package/lib/module/SafeAreaView.macos.js.map +0 -1
- package/lib/module/SafeAreaView.native.js +0 -3
- package/lib/module/SafeAreaView.native.js.map +0 -1
- package/lib/module/useWindowDimensions.js +0 -26
- package/lib/module/useWindowDimensions.js.map +0 -1
- package/lib/typescript/src/CompatNativeSafeAreaProvider.d.ts +0 -2
- package/lib/typescript/src/NativeSafeAreaProvider.d.ts +0 -2
- package/lib/typescript/src/NativeSafeAreaProvider.kepler.d.ts +0 -2
- package/lib/typescript/src/NativeSafeAreaProvider.macos.d.ts +0 -2
- package/lib/typescript/src/NativeSafeAreaProvider.native.d.ts +0 -3
- package/lib/typescript/src/NativeSafeAreaProvider.windows.d.ts +0 -2
- package/lib/typescript/src/SafeArea.types.d.ts +0 -31
- package/lib/typescript/src/SafeAreaView.d.ts +0 -2
- package/lib/typescript/src/SafeAreaView.macos.d.ts +0 -2
- package/lib/typescript/src/SafeAreaView.native.d.ts +0 -2
- package/lib/typescript/src/SafeAreaView.windows.d.ts +0 -2
- package/lib/typescript/src/useWindowDimensions.d.ts +0 -8
- package/src/NativeSafeAreaProvider.macos.tsx +0 -3
- package/src/NativeSafeAreaProvider.native.tsx +0 -6
- package/src/SafeAreaView.macos.tsx +0 -3
- package/src/SafeAreaView.native.tsx +0 -6
- package/src/useWindowDimensions.tsx +0 -35
- /package/ios/{SafeAreaView/RNCSafeAreaProviderManager.h → RNCSafeAreaProviderManager.h} +0 -0
- /package/ios/{SafeAreaView/RNCSafeAreaShadowView.h → RNCSafeAreaShadowView.h} +0 -0
- /package/ios/{SafeAreaView/RNCSafeAreaViewManager.h → RNCSafeAreaViewManager.h} +0 -0
- /package/ios/{SafeAreaView/RNCSafeAreaViewMode.h → RNCSafeAreaViewMode.h} +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
node_modules/@amzn/react-native-safe-area-context_8/src/index.tsx:c25a27cb01192a3d04d2
|
|
2
|
+
node_modules/@amzn/react-native-safe-area-context_8/src/SafeAreaContext.tsx:bcc69f32eace8df4d1e5
|
|
3
|
+
node_modules/@amzn/react-native-safe-area-context_8/src/NativeSafeAreaProvider.kepler.tsx:df333727bf7ff8d266ce
|
|
4
|
+
node_modules/@amzn/react-native-safe-area-context_8/src/CompatNativeSafeAreaProvider.tsx:52180f6235afa9c87b22
|
|
5
|
+
node_modules/@amzn/react-native-safe-area-context_8/src/SafeAreaView.kepler.tsx:222e31d785e6b1e5f59d
|
|
6
|
+
node_modules/@amzn/react-native-safe-area-context_8/src/InitialWindow.kepler.ts:429ddd8db312982259d0
|
|
7
|
+
node_modules/@amzn/react-native-safe-area-context_8/src/SafeArea.types.ts:0ebabeac96a28372b0cb
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
node_modules/@babel/runtime_7.29.2/helpers/interopRequireDefault.js:d3b57c8ff490ba8c7c47
|
|
2
|
+
node_modules/@babel/runtime_7.29.2/helpers/slicedToArray.js:8972a767e9133b0e3a28
|
|
3
|
+
node_modules/@babel/runtime_7.29.2/helpers/arrayWithHoles.js:ee99881fa9643e7bd96f
|
|
4
|
+
node_modules/@babel/runtime_7.29.2/helpers/iterableToArrayLimit.js:1847ec9d510321afd855
|
|
5
|
+
node_modules/@babel/runtime_7.29.2/helpers/unsupportedIterableToArray.js:0c30490eff100ca51d7c
|
|
6
|
+
node_modules/@babel/runtime_7.29.2/helpers/arrayLikeToArray.js:93f664c5afc3b3c0ffb9
|
|
7
|
+
node_modules/@babel/runtime_7.29.2/helpers/nonIterableRest.js:9ef80b625777ecb8d705
|
|
8
|
+
node_modules/@babel/runtime_7.29.2/helpers/classCallCheck.js:2bfb5e99807ec81b822f
|
|
9
|
+
node_modules/@babel/runtime_7.29.2/helpers/createClass.js:cc42269051bc9ff17a63
|
|
10
|
+
node_modules/@babel/runtime_7.29.2/helpers/toPropertyKey.js:7519d1b9ea0de500d604
|
|
11
|
+
node_modules/@babel/runtime_7.29.2/helpers/toPrimitive.js:6c47e04d255cdfb1533c
|
|
12
|
+
node_modules/@babel/runtime_7.29.2/helpers/typeof.js:7b6247ce00695d888c36
|
|
13
|
+
node_modules/@babel/runtime_7.29.2/helpers/possibleConstructorReturn.js:80a4a0ee188e065108c9
|
|
14
|
+
node_modules/@babel/runtime_7.29.2/helpers/assertThisInitialized.js:7a9699b26019ae7270f5
|
|
15
|
+
node_modules/@babel/runtime_7.29.2/helpers/getPrototypeOf.js:9c829ff5032996ffdc8e
|
|
16
|
+
node_modules/@babel/runtime_7.29.2/helpers/get.js:659b028086c2c6f074a3
|
|
17
|
+
node_modules/@babel/runtime_7.29.2/helpers/superPropBase.js:263943b885b53437e9e0
|
|
18
|
+
node_modules/@babel/runtime_7.29.2/helpers/inherits.js:3ebfecb28bc5857801a2
|
|
19
|
+
node_modules/@babel/runtime_7.29.2/helpers/setPrototypeOf.js:ea37d1dec222e5845b2b
|
|
20
|
+
node_modules/@babel/runtime_7.29.2/helpers/classPrivateFieldLooseBase.js:8e4a72d63eec1bceb909
|
|
21
|
+
node_modules/@babel/runtime_7.29.2/helpers/classPrivateFieldLooseKey.js:3998b40f87a7681fa397
|
|
22
|
+
node_modules/invariant_2.2.4/browser.js:fd099686726b2dfb6f66
|
|
23
|
+
node_modules/@react-native/normalize-colors_0.83.0/index.js:e8e087936fed8afe0814
|
|
24
|
+
node_modules/@babel/runtime_7.29.2/helpers/objectWithoutProperties.js:54be67f13f7547a51521
|
|
25
|
+
node_modules/@babel/runtime_7.29.2/helpers/objectWithoutPropertiesLoose.js:ae112a2672a8a53f82e5
|
|
26
|
+
node_modules/nullthrows_1.1.1/nullthrows.js:afd4874b36ccd4e13961
|
|
27
|
+
node_modules/@react-native/assets-registry_0.83.0/registry.js:5ff9e23a9ba5a1a1e0ac
|
|
28
|
+
node_modules/@react-native/assets-registry_0.83.0/path-support.js:fb4eb45d6b2fc494317c
|
|
29
|
+
node_modules/@babel/runtime_7.29.2/helpers/wrapNativeSuper.js:b510ad86a9e18c7a79b6
|
|
30
|
+
node_modules/@babel/runtime_7.29.2/helpers/isNativeFunction.js:74c2adc9de6e582a35f1
|
|
31
|
+
node_modules/@babel/runtime_7.29.2/helpers/construct.js:d66ad0c399283f558869
|
|
32
|
+
node_modules/@babel/runtime_7.29.2/helpers/isNativeReflectConstruct.js:22840e4117f5dbcb3b06
|
|
33
|
+
node_modules/promise_8.3.0/setimmediate/es6-extensions.js:a7846fdeffeb1ebf6241
|
|
34
|
+
node_modules/promise_8.3.0/setimmediate/core.js:890f60fa94d3f6854a19
|
|
35
|
+
node_modules/promise_8.3.0/setimmediate/finally.js:15bc4ccb25fc2d0c4428
|
|
36
|
+
node_modules/stacktrace-parser_0.1.11/dist/stack-trace-parser.cjs.js:aa725aa4c0b37e1add33
|
|
37
|
+
node_modules/regenerator-runtime_0.13.11/runtime.js:af823d9710c534173a4d
|
|
38
|
+
node_modules/base64-js_1.5.1/index.js:71af70f51435e3e1b37b
|
|
39
|
+
node_modules/whatwg-fetch_3.6.20/dist/fetch.umd.js:ca4b0363146267ef3e77
|
|
40
|
+
node_modules/abort-controller_3.0.0/dist/abort-controller.js:ea8fcbd647aab1cfcdaa
|
|
41
|
+
node_modules/event-target-shim_5.0.1/dist/event-target-shim.js:2bd3f165b1ed6b916de7
|
|
42
|
+
node_modules/scheduler_0.27.0/index.native.js:ec9ec59f48073ee6e9f5
|
|
43
|
+
node_modules/scheduler_0.27.0/cjs/scheduler.native.production.js:d8f1930d0c79328207a3
|
|
44
|
+
node_modules/@babel/runtime_7.29.2/helpers/readOnlyError.js:b769be1a7481ccdab905
|
|
45
|
+
node_modules/@react-native/virtualized-lists_0.83.0/index.js:a7726730afdc356adbe4
|
|
46
|
+
node_modules/@react-native/virtualized-lists_0.83.0/Lists/VirtualizeUtils.js:d0ff6d3d1f2c9580ab13
|
|
47
|
+
node_modules/@react-native/virtualized-lists_0.83.0/Lists/VirtualizedList.js:8d139349672eea405ffb
|
|
48
|
+
node_modules/@react-native/virtualized-lists_0.83.0/Utilities/clamp.js:a78a6606e498a2fdbf2d
|
|
49
|
+
node_modules/@react-native/virtualized-lists_0.83.0/Utilities/infoLog.js:017b2813127d2e7f4d70
|
|
50
|
+
node_modules/@react-native/virtualized-lists_0.83.0/Lists/ChildListCollection.js:9c3630060e6e634bfb8b
|
|
51
|
+
node_modules/@react-native/virtualized-lists_0.83.0/Lists/FillRateHelper.js:c1e83141f045b25e26fc
|
|
52
|
+
node_modules/@react-native/virtualized-lists_0.83.0/Lists/ListMetricsAggregator.js:480fcd792bed2eb457f3
|
|
53
|
+
node_modules/@react-native/virtualized-lists_0.83.0/Lists/StateSafePureComponent.js:fd4823cbe6aa108a7d62
|
|
54
|
+
node_modules/@react-native/virtualized-lists_0.83.0/Lists/ViewabilityHelper.js:a44a41089be71f9f7b1e
|
|
55
|
+
node_modules/@react-native/virtualized-lists_0.83.0/Lists/VirtualizedListCellRenderer.js:8aa7cf31c704a4a85db2
|
|
56
|
+
node_modules/@react-native/virtualized-lists_0.83.0/Lists/VirtualizedListContext.js:4b89f56515b0628d3446
|
|
57
|
+
node_modules/@react-native/virtualized-lists_0.83.0/Lists/VirtualizedListProps.js:516cf3cf4ecb4e256407
|
|
58
|
+
node_modules/@react-native/virtualized-lists_0.83.0/Lists/CellRenderMask.js:95aa36c0870d6d5cfdb1
|
|
59
|
+
node_modules/@react-native/virtualized-lists_0.83.0/Lists/VirtualizedSectionList.js:cb8631f113fda0d4a92c
|
|
60
|
+
node_modules/memoize-one_5.2.1/dist/memoize-one.cjs.js:d381691ed29bec5a2050
|
|
61
|
+
node_modules/@babel/runtime_7.29.2/helpers/asyncToGenerator.js:37d2d0df8e62891cc30d
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"@amzn/react-native-safe-area-context": {
|
|
3
|
-
"nameOnDevice": "index.amzn__react-native-safe-area-context-
|
|
4
|
-
"modulesPath": "amzn__react-native-safe-area-context-
|
|
5
|
-
"privateModulesPath": "amzn__react-native-safe-area-context-
|
|
3
|
+
"nameOnDevice": "index.amzn__react-native-safe-area-context-8.hermes.bundle",
|
|
4
|
+
"modulesPath": "amzn__react-native-safe-area-context-8.modules.txt",
|
|
5
|
+
"privateModulesPath": "amzn__react-native-safe-area-context-8.private.modules.txt"
|
|
6
6
|
}
|
|
7
7
|
}
|
package/android/build.gradle
CHANGED
|
@@ -1,34 +1,110 @@
|
|
|
1
|
+
buildscript {
|
|
2
|
+
def kotlin_version = rootProject.ext.has('kotlinVersion') ? rootProject.ext.get('kotlinVersion') : project.properties['RNSAC_kotlinVersion']
|
|
3
|
+
|
|
4
|
+
repositories {
|
|
5
|
+
mavenCentral()
|
|
6
|
+
google()
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
dependencies {
|
|
10
|
+
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version")
|
|
11
|
+
classpath("com.android.tools.build:gradle:7.3.1")
|
|
12
|
+
classpath("com.diffplug.spotless:spotless-plugin-gradle:6.11.0")
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
if (project == rootProject) {
|
|
17
|
+
apply from: "spotless.gradle"
|
|
18
|
+
return
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
|
|
1
22
|
def getExtOrDefault(name, defaultValue) {
|
|
2
|
-
|
|
23
|
+
return rootProject.ext.has(name) ? rootProject.ext.get(name) : defaultValue
|
|
3
24
|
}
|
|
4
25
|
|
|
5
|
-
|
|
6
|
-
//
|
|
7
|
-
//
|
|
8
|
-
//
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
google()
|
|
12
|
-
jcenter()
|
|
13
|
-
}
|
|
14
|
-
dependencies {
|
|
15
|
-
classpath 'com.android.tools.build:gradle:4.1.2'
|
|
16
|
-
}
|
|
17
|
-
}
|
|
26
|
+
def isNewArchitectureEnabled() {
|
|
27
|
+
// To opt-in for the New Architecture, you can either:
|
|
28
|
+
// - Set `newArchEnabled` to true inside the `gradle.properties` file
|
|
29
|
+
// - Invoke gradle with `-newArchEnabled=true`
|
|
30
|
+
// - Set an environment variable `ORG_GRADLE_PROJECT_newArchEnabled=true`
|
|
31
|
+
return project.hasProperty("newArchEnabled") && project.newArchEnabled == "true"
|
|
18
32
|
}
|
|
19
33
|
|
|
20
34
|
apply plugin: 'com.android.library'
|
|
35
|
+
apply plugin: 'kotlin-android'
|
|
36
|
+
|
|
37
|
+
if (isNewArchitectureEnabled()) {
|
|
38
|
+
apply plugin: "com.facebook.react"
|
|
39
|
+
}
|
|
21
40
|
|
|
22
41
|
android {
|
|
23
|
-
|
|
42
|
+
def agpVersion = com.android.Version.ANDROID_GRADLE_PLUGIN_VERSION
|
|
43
|
+
if (agpVersion.tokenize('.')[0].toInteger() >= 7) {
|
|
44
|
+
namespace "com.th3rdwave.safeareacontext"
|
|
45
|
+
buildFeatures {
|
|
46
|
+
buildConfig true
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
compileSdkVersion getExtOrDefault('compileSdkVersion', 30)
|
|
51
|
+
|
|
52
|
+
// Used to override the NDK path/version on internal CI or by allowing
|
|
53
|
+
// users to customize the NDK path/version from their root project (e.g. for M1 support)
|
|
54
|
+
if (rootProject.hasProperty("ndkPath")) {
|
|
55
|
+
ndkPath rootProject.ext.ndkPath
|
|
56
|
+
}
|
|
57
|
+
if (rootProject.hasProperty("ndkVersion")) {
|
|
58
|
+
ndkVersion rootProject.ext.ndkVersion
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
defaultConfig {
|
|
62
|
+
minSdkVersion getExtOrDefault('minSdkVersion', 16)
|
|
63
|
+
targetSdkVersion getExtOrDefault('targetSdkVersion', 28)
|
|
64
|
+
versionCode 1
|
|
65
|
+
versionName "1.0"
|
|
66
|
+
buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString()
|
|
67
|
+
|
|
68
|
+
ndk {
|
|
69
|
+
abiFilters (*reactNativeArchitectures())
|
|
70
|
+
}
|
|
71
|
+
}
|
|
24
72
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
73
|
+
lintOptions{
|
|
74
|
+
abortOnError false
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
packagingOptions {
|
|
78
|
+
// For some reason gradle only complains about the duplicated version of libreact_render libraries
|
|
79
|
+
// while there are more libraries copied in intermediates folder of the lib build directory, we exclude
|
|
80
|
+
// only the ones that make the build fail (ideally we should only include libsafeareacontext_modules but we
|
|
81
|
+
// are only allowed to specify exclude patterns)
|
|
82
|
+
exclude "**/libreact_render*.so"
|
|
83
|
+
}
|
|
84
|
+
sourceSets.main {
|
|
85
|
+
java {
|
|
86
|
+
if (isNewArchitectureEnabled()) {
|
|
87
|
+
srcDirs += [
|
|
88
|
+
"src/fabric/java",
|
|
89
|
+
"${project.buildDir}/generated/source/codegen/java"
|
|
90
|
+
]
|
|
91
|
+
} else {
|
|
92
|
+
srcDirs += [
|
|
93
|
+
"src/paper/java"
|
|
94
|
+
]
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
def reactNativeArchitectures() {
|
|
101
|
+
def value = project.getProperties().get("reactNativeArchitectures")
|
|
102
|
+
return value ? value.split(",") : [
|
|
103
|
+
"armeabi-v7a",
|
|
104
|
+
"x86",
|
|
105
|
+
"x86_64",
|
|
106
|
+
"arm64-v8a"
|
|
107
|
+
]
|
|
32
108
|
}
|
|
33
109
|
|
|
34
110
|
repositories {
|
|
@@ -37,10 +113,12 @@ repositories {
|
|
|
37
113
|
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
|
|
38
114
|
url "$rootDir/../node_modules/react-native/android"
|
|
39
115
|
}
|
|
40
|
-
|
|
116
|
+
mavenCentral()
|
|
41
117
|
}
|
|
42
118
|
|
|
119
|
+
def kotlin_version = getExtOrDefault('kotlinVersion', project.properties['RNSAC_kotlinVersion'])
|
|
120
|
+
|
|
43
121
|
dependencies {
|
|
44
|
-
|
|
45
|
-
|
|
122
|
+
implementation 'com.facebook.react:react-native:+'
|
|
123
|
+
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
|
46
124
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
RNSAC_kotlinVersion=1.6.20
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
apply plugin: 'com.diffplug.spotless'
|
|
2
|
+
|
|
3
|
+
allprojects {
|
|
4
|
+
repositories {
|
|
5
|
+
google()
|
|
6
|
+
mavenCentral()
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
spotless {
|
|
11
|
+
java {
|
|
12
|
+
target 'src/**/*.java'
|
|
13
|
+
googleJavaFormat()
|
|
14
|
+
}
|
|
15
|
+
kotlin {
|
|
16
|
+
target 'src/**/*.kt'
|
|
17
|
+
ktfmt()
|
|
18
|
+
}
|
|
19
|
+
groovyGradle {
|
|
20
|
+
target '*.gradle'
|
|
21
|
+
greclipse()
|
|
22
|
+
indentWithSpaces(4)
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
package com.th3rdwave.safeareacontext
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.bridge.Arguments
|
|
4
|
+
import com.facebook.react.bridge.WritableMap
|
|
5
|
+
import com.facebook.react.uimanager.events.Event
|
|
6
|
+
|
|
7
|
+
internal class InsetsChangeEvent(
|
|
8
|
+
surfaceId: Int,
|
|
9
|
+
viewTag: Int,
|
|
10
|
+
private val mInsets: EdgeInsets,
|
|
11
|
+
private val mFrame: Rect
|
|
12
|
+
) : Event<InsetsChangeEvent>(surfaceId, viewTag) {
|
|
13
|
+
override fun getEventName() = EVENT_NAME
|
|
14
|
+
|
|
15
|
+
override fun getEventData(): WritableMap? {
|
|
16
|
+
val event = Arguments.createMap()
|
|
17
|
+
event.putMap("insets", edgeInsetsToJsMap(mInsets))
|
|
18
|
+
event.putMap("frame", rectToJsMap(mFrame))
|
|
19
|
+
return event
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
companion object {
|
|
23
|
+
const val EVENT_NAME = "topInsetsChange"
|
|
24
|
+
}
|
|
25
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
package com.th3rdwave.safeareacontext
|
|
2
|
+
|
|
3
|
+
import android.content.Context
|
|
4
|
+
import android.view.View
|
|
5
|
+
import com.facebook.react.bridge.ReactContext
|
|
6
|
+
import com.facebook.react.uimanager.UIManagerHelper
|
|
7
|
+
|
|
8
|
+
fun getReactContext(view: View): ReactContext {
|
|
9
|
+
return UIManagerHelper.getReactContext(view)
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
fun getSurfaceId(context: Context): Int {
|
|
13
|
+
return UIManagerHelper.getSurfaceId(context)
|
|
14
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
package com.th3rdwave.safeareacontext
|
|
2
|
+
|
|
3
|
+
import android.view.View
|
|
4
|
+
import android.view.ViewGroup
|
|
5
|
+
import com.facebook.react.bridge.ReactApplicationContext
|
|
6
|
+
import com.facebook.react.module.annotations.ReactModule
|
|
7
|
+
|
|
8
|
+
@ReactModule(name = SafeAreaContextModule.NAME)
|
|
9
|
+
class SafeAreaContextModule(reactContext: ReactApplicationContext?) :
|
|
10
|
+
NativeSafeAreaContextSpec(reactContext) {
|
|
11
|
+
override fun getName(): String {
|
|
12
|
+
return NAME
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
public override fun getTypedExportedConstants(): Map<String, Any?> {
|
|
16
|
+
return mapOf("initialWindowMetrics" to getInitialWindowMetrics())
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
private fun getInitialWindowMetrics(): Map<String, Any>? {
|
|
20
|
+
val decorView = reactApplicationContext.currentActivity?.window?.decorView as ViewGroup?
|
|
21
|
+
val contentView = decorView?.findViewById<View>(android.R.id.content) ?: return null
|
|
22
|
+
val insets = getSafeAreaInsets(decorView)
|
|
23
|
+
val frame = getFrame(decorView, contentView)
|
|
24
|
+
return if (insets == null || frame == null) {
|
|
25
|
+
null
|
|
26
|
+
} else mapOf("insets" to edgeInsetsToJavaMap(insets), "frame" to rectToJavaMap(frame))
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
companion object {
|
|
30
|
+
const val NAME = "RNCSafeAreaContext"
|
|
31
|
+
}
|
|
32
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
package com.th3rdwave.safeareacontext
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.BaseReactPackage
|
|
4
|
+
import com.facebook.react.bridge.NativeModule
|
|
5
|
+
import com.facebook.react.bridge.ReactApplicationContext
|
|
6
|
+
import com.facebook.react.module.annotations.ReactModule
|
|
7
|
+
import com.facebook.react.module.model.ReactModuleInfo
|
|
8
|
+
import com.facebook.react.module.model.ReactModuleInfoProvider
|
|
9
|
+
import com.facebook.react.uimanager.ViewManager
|
|
10
|
+
|
|
11
|
+
// Fool autolinking for older versions that do not support BaseReactPackage.
|
|
12
|
+
// public class SafeAreaContextPackage implements ReactPackage {
|
|
13
|
+
class SafeAreaContextPackage : BaseReactPackage() {
|
|
14
|
+
override fun getModule(name: String, reactContext: ReactApplicationContext): NativeModule? {
|
|
15
|
+
return when (name) {
|
|
16
|
+
SafeAreaContextModule.NAME -> SafeAreaContextModule(reactContext)
|
|
17
|
+
else -> null
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
override fun getReactModuleInfoProvider(): ReactModuleInfoProvider {
|
|
22
|
+
val moduleList: Array<Class<out NativeModule?>> = arrayOf(SafeAreaContextModule::class.java)
|
|
23
|
+
val reactModuleInfoMap: MutableMap<String, ReactModuleInfo> = HashMap()
|
|
24
|
+
for (moduleClass in moduleList) {
|
|
25
|
+
val reactModule = moduleClass.getAnnotation(ReactModule::class.java) ?: continue
|
|
26
|
+
reactModuleInfoMap[reactModule.name] =
|
|
27
|
+
ReactModuleInfo(
|
|
28
|
+
reactModule.name,
|
|
29
|
+
moduleClass.name,
|
|
30
|
+
true,
|
|
31
|
+
reactModule.needsEagerInit,
|
|
32
|
+
reactModule.isCxxModule,
|
|
33
|
+
BuildConfig.IS_NEW_ARCHITECTURE_ENABLED)
|
|
34
|
+
}
|
|
35
|
+
return ReactModuleInfoProvider { reactModuleInfoMap }
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
override fun createViewManagers(reactContext: ReactApplicationContext): List<ViewManager<*, *>> {
|
|
39
|
+
return listOf<ViewManager<*, *>>(SafeAreaProviderManager(), SafeAreaViewManager())
|
|
40
|
+
}
|
|
41
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
package com.th3rdwave.safeareacontext
|
|
2
|
+
|
|
3
|
+
import android.content.Context
|
|
4
|
+
import android.view.ViewGroup
|
|
5
|
+
import android.view.ViewTreeObserver
|
|
6
|
+
import com.facebook.react.views.view.ReactViewGroup
|
|
7
|
+
|
|
8
|
+
typealias OnInsetsChangeHandler = (view: SafeAreaProvider, insets: EdgeInsets, frame: Rect) -> Unit
|
|
9
|
+
|
|
10
|
+
class SafeAreaProvider(context: Context?) :
|
|
11
|
+
ReactViewGroup(context), ViewTreeObserver.OnPreDrawListener {
|
|
12
|
+
private var mInsetsChangeHandler: OnInsetsChangeHandler? = null
|
|
13
|
+
private var mLastInsets: EdgeInsets? = null
|
|
14
|
+
private var mLastFrame: Rect? = null
|
|
15
|
+
|
|
16
|
+
private fun maybeUpdateInsets() {
|
|
17
|
+
val insetsChangeHandler = mInsetsChangeHandler ?: return
|
|
18
|
+
val edgeInsets = getSafeAreaInsets(this) ?: return
|
|
19
|
+
val frame = getFrame(rootView as ViewGroup, this) ?: return
|
|
20
|
+
if (mLastInsets != edgeInsets || mLastFrame != frame) {
|
|
21
|
+
insetsChangeHandler(this, edgeInsets, frame)
|
|
22
|
+
mLastInsets = edgeInsets
|
|
23
|
+
mLastFrame = frame
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
override fun onAttachedToWindow() {
|
|
28
|
+
super.onAttachedToWindow()
|
|
29
|
+
viewTreeObserver.addOnPreDrawListener(this)
|
|
30
|
+
maybeUpdateInsets()
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
override fun onDetachedFromWindow() {
|
|
34
|
+
super.onDetachedFromWindow()
|
|
35
|
+
viewTreeObserver.removeOnPreDrawListener(this)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
override fun onPreDraw(): Boolean {
|
|
39
|
+
maybeUpdateInsets()
|
|
40
|
+
return true
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
fun setOnInsetsChangeHandler(handler: OnInsetsChangeHandler?) {
|
|
44
|
+
mInsetsChangeHandler = handler
|
|
45
|
+
maybeUpdateInsets()
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
package com.th3rdwave.safeareacontext
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.bridge.ReactContext
|
|
4
|
+
import com.facebook.react.module.annotations.ReactModule
|
|
5
|
+
import com.facebook.react.uimanager.ThemedReactContext
|
|
6
|
+
import com.facebook.react.uimanager.UIManagerHelper
|
|
7
|
+
import com.facebook.react.uimanager.ViewGroupManager
|
|
8
|
+
import com.facebook.react.viewmanagers.RNCSafeAreaProviderManagerDelegate
|
|
9
|
+
import com.facebook.react.viewmanagers.RNCSafeAreaProviderManagerInterface
|
|
10
|
+
|
|
11
|
+
@ReactModule(name = SafeAreaProviderManager.REACT_CLASS)
|
|
12
|
+
class SafeAreaProviderManager :
|
|
13
|
+
ViewGroupManager<SafeAreaProvider>(), RNCSafeAreaProviderManagerInterface<SafeAreaProvider> {
|
|
14
|
+
private val mDelegate = RNCSafeAreaProviderManagerDelegate(this)
|
|
15
|
+
|
|
16
|
+
override fun getDelegate() = mDelegate
|
|
17
|
+
|
|
18
|
+
override fun getName() = REACT_CLASS
|
|
19
|
+
|
|
20
|
+
public override fun createViewInstance(context: ThemedReactContext) = SafeAreaProvider(context)
|
|
21
|
+
|
|
22
|
+
override fun getExportedCustomDirectEventTypeConstants() =
|
|
23
|
+
mutableMapOf(
|
|
24
|
+
InsetsChangeEvent.EVENT_NAME to mutableMapOf("registrationName" to "onInsetsChange"))
|
|
25
|
+
|
|
26
|
+
override fun addEventEmitters(reactContext: ThemedReactContext, view: SafeAreaProvider) {
|
|
27
|
+
super.addEventEmitters(reactContext, view)
|
|
28
|
+
view.setOnInsetsChangeHandler(::handleOnInsetsChange)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
companion object {
|
|
32
|
+
const val REACT_CLASS = "RNCSafeAreaProvider"
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
private fun handleOnInsetsChange(view: SafeAreaProvider, insets: EdgeInsets, frame: Rect) {
|
|
37
|
+
val reactContext = view.context as ReactContext
|
|
38
|
+
val reactTag = view.id
|
|
39
|
+
UIManagerHelper.getEventDispatcherForReactTag(reactContext, reactTag)
|
|
40
|
+
?.dispatchEvent(InsetsChangeEvent(getSurfaceId(reactContext), reactTag, insets, frame))
|
|
41
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
package com.th3rdwave.safeareacontext
|
|
2
|
+
|
|
3
|
+
import android.os.Build
|
|
4
|
+
import android.view.View
|
|
5
|
+
import android.view.ViewGroup
|
|
6
|
+
import android.view.WindowInsets
|
|
7
|
+
import androidx.annotation.RequiresApi
|
|
8
|
+
import java.lang.IllegalArgumentException
|
|
9
|
+
import kotlin.math.max
|
|
10
|
+
import kotlin.math.min
|
|
11
|
+
|
|
12
|
+
@RequiresApi(Build.VERSION_CODES.R)
|
|
13
|
+
private fun getRootWindowInsetsCompatR(rootView: View): EdgeInsets? {
|
|
14
|
+
val insets =
|
|
15
|
+
rootView.rootWindowInsets?.getInsets(
|
|
16
|
+
WindowInsets.Type.statusBars() or
|
|
17
|
+
WindowInsets.Type.displayCutout() or
|
|
18
|
+
WindowInsets.Type.navigationBars() or
|
|
19
|
+
WindowInsets.Type.captionBar())
|
|
20
|
+
?: return null
|
|
21
|
+
return EdgeInsets(
|
|
22
|
+
top = insets.top.toFloat(),
|
|
23
|
+
right = insets.right.toFloat(),
|
|
24
|
+
bottom = insets.bottom.toFloat(),
|
|
25
|
+
left = insets.left.toFloat())
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
@RequiresApi(Build.VERSION_CODES.M)
|
|
29
|
+
@Suppress("DEPRECATION")
|
|
30
|
+
private fun getRootWindowInsetsCompatM(rootView: View): EdgeInsets? {
|
|
31
|
+
val insets = rootView.rootWindowInsets ?: return null
|
|
32
|
+
return EdgeInsets(
|
|
33
|
+
top = insets.systemWindowInsetTop.toFloat(),
|
|
34
|
+
right = insets.systemWindowInsetRight.toFloat(),
|
|
35
|
+
// System insets are more reliable to account for notches but the
|
|
36
|
+
// system inset for bottom includes the soft keyboard which we don't
|
|
37
|
+
// want to be consistent with iOS. Using the min value makes sure we
|
|
38
|
+
// never get the keyboard offset while still working with devices that
|
|
39
|
+
// hide the navigation bar.
|
|
40
|
+
bottom = min(insets.systemWindowInsetBottom, insets.stableInsetBottom).toFloat(),
|
|
41
|
+
left = insets.systemWindowInsetLeft.toFloat())
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
private fun getRootWindowInsetsCompatBase(rootView: View): EdgeInsets? {
|
|
45
|
+
val visibleRect = android.graphics.Rect()
|
|
46
|
+
rootView.getWindowVisibleDisplayFrame(visibleRect)
|
|
47
|
+
return EdgeInsets(
|
|
48
|
+
top = visibleRect.top.toFloat(),
|
|
49
|
+
right = (rootView.width - visibleRect.right).toFloat(),
|
|
50
|
+
bottom = (rootView.height - visibleRect.bottom).toFloat(),
|
|
51
|
+
left = visibleRect.left.toFloat())
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
private fun getRootWindowInsetsCompat(rootView: View): EdgeInsets? {
|
|
55
|
+
return when {
|
|
56
|
+
Build.VERSION.SDK_INT >= Build.VERSION_CODES.R -> getRootWindowInsetsCompatR(rootView)
|
|
57
|
+
Build.VERSION.SDK_INT >= Build.VERSION_CODES.M -> getRootWindowInsetsCompatM(rootView)
|
|
58
|
+
else -> getRootWindowInsetsCompatBase(rootView)
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
fun getSafeAreaInsets(view: View): EdgeInsets? {
|
|
63
|
+
// The view has not been layout yet.
|
|
64
|
+
if (view.height == 0) {
|
|
65
|
+
return null
|
|
66
|
+
}
|
|
67
|
+
val rootView = view.rootView
|
|
68
|
+
val windowInsets = getRootWindowInsetsCompat(rootView) ?: return null
|
|
69
|
+
|
|
70
|
+
// Calculate the part of the view that overlaps with window insets.
|
|
71
|
+
val windowWidth = rootView.width.toFloat()
|
|
72
|
+
val windowHeight = rootView.height.toFloat()
|
|
73
|
+
val visibleRect = android.graphics.Rect()
|
|
74
|
+
view.getGlobalVisibleRect(visibleRect)
|
|
75
|
+
return EdgeInsets(
|
|
76
|
+
top = max(windowInsets.top - visibleRect.top, 0f),
|
|
77
|
+
right = max(min(visibleRect.left + view.width - windowWidth, 0f) + windowInsets.right, 0f),
|
|
78
|
+
bottom = max(min(visibleRect.top + view.height - windowHeight, 0f) + windowInsets.bottom, 0f),
|
|
79
|
+
left = max(windowInsets.left - visibleRect.left, 0f))
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
fun getFrame(rootView: ViewGroup, view: View): Rect? {
|
|
83
|
+
// This can happen while the view gets unmounted.
|
|
84
|
+
if (view.parent == null) {
|
|
85
|
+
return null
|
|
86
|
+
}
|
|
87
|
+
val offset = android.graphics.Rect()
|
|
88
|
+
view.getDrawingRect(offset)
|
|
89
|
+
try {
|
|
90
|
+
rootView.offsetDescendantRectToMyCoords(view, offset)
|
|
91
|
+
} catch (ex: IllegalArgumentException) {
|
|
92
|
+
// This can throw if the view is not a descendant of rootView. This should not
|
|
93
|
+
// happen but avoid potential crashes.
|
|
94
|
+
ex.printStackTrace()
|
|
95
|
+
return null
|
|
96
|
+
}
|
|
97
|
+
return Rect(
|
|
98
|
+
x = offset.left.toFloat(),
|
|
99
|
+
y = offset.top.toFloat(),
|
|
100
|
+
width = view.width.toFloat(),
|
|
101
|
+
height = view.height.toFloat())
|
|
102
|
+
}
|