@amazon-devices/react-native-safe-area-context 2.0.1759135970 → 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.
Files changed (260) hide show
  1. package/README.md +6 -302
  2. package/SystemBundles/920f0b3a0c43cc93db1621b4c3a47e06a0d4ed32175c793e9934ad9c764fbc25.bundle +7374 -0
  3. package/SystemBundles/920f0b3a0c43cc93db1621b4c3a47e06a0d4ed32175c793e9934ad9c764fbc25.map +2780 -0
  4. package/SystemModules/amzn__react-native-safe-area-context-8.modules.txt +7 -0
  5. package/SystemModules/amzn__react-native-safe-area-context-8.private.modules.txt +61 -0
  6. package/SystemModules/keplerscript-system-bundle-config.json +3 -3
  7. package/android/build.gradle +103 -25
  8. package/android/gradle.properties +1 -0
  9. package/android/spotless.gradle +24 -0
  10. package/android/src/fabric/java/com/th3rdwave/safeareacontext/InsetsChangeEvent.kt +25 -0
  11. package/android/src/fabric/java/com/th3rdwave/safeareacontext/UIManagerHelperCompat.kt +14 -0
  12. package/android/src/main/AndroidManifest.xml +1 -2
  13. package/android/src/main/java/com/th3rdwave/safeareacontext/EdgeInsets.kt +3 -0
  14. package/android/src/main/java/com/th3rdwave/safeareacontext/Rect.kt +3 -0
  15. package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaContextModule.kt +32 -0
  16. package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaContextPackage.kt +41 -0
  17. package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaProvider.kt +47 -0
  18. package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaProviderManager.kt +41 -0
  19. package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaUtils.kt +102 -0
  20. package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaView.kt +155 -0
  21. package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaViewEdges.kt +16 -0
  22. package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaViewLocalData.kt +7 -0
  23. package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaViewManager.kt +73 -0
  24. package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaViewMode.kt +6 -0
  25. package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaViewShadowNode.kt +170 -0
  26. package/android/src/main/java/com/th3rdwave/safeareacontext/SerializationUtils.kt +39 -0
  27. package/android/src/main/jni/CMakeLists.txt +87 -0
  28. package/android/src/main/jni/safeareacontext.h +17 -0
  29. package/android/src/paper/java/com/facebook/react/viewmanagers/RNCSafeAreaProviderManagerDelegate.java +31 -0
  30. package/android/src/paper/java/com/facebook/react/viewmanagers/RNCSafeAreaProviderManagerInterface.java +16 -0
  31. package/android/src/paper/java/com/facebook/react/viewmanagers/RNCSafeAreaViewManagerDelegate.java +41 -0
  32. package/android/src/paper/java/com/facebook/react/viewmanagers/RNCSafeAreaViewManagerInterface.java +20 -0
  33. package/android/src/paper/java/com/th3rdwave/safeareacontext/InsetsChangeEvent.kt +29 -0
  34. package/android/src/paper/java/com/th3rdwave/safeareacontext/NativeSafeAreaContextSpec.java +56 -0
  35. package/android/src/paper/java/com/th3rdwave/safeareacontext/UIManagerHelperCompat.kt +20 -0
  36. package/common/cpp/react/renderer/components/safeareacontext/RNCSafeAreaViewComponentDescriptor.h +25 -0
  37. package/common/cpp/react/renderer/components/safeareacontext/RNCSafeAreaViewShadowNode.cpp +131 -0
  38. package/common/cpp/react/renderer/components/safeareacontext/RNCSafeAreaViewShadowNode.h +36 -0
  39. package/common/cpp/react/renderer/components/safeareacontext/RNCSafeAreaViewState.cpp +23 -0
  40. package/common/cpp/react/renderer/components/safeareacontext/RNCSafeAreaViewState.h +56 -0
  41. package/ios/Fabric/RNCSafeAreaProviderComponentView.h +13 -0
  42. package/ios/Fabric/RNCSafeAreaProviderComponentView.mm +129 -0
  43. package/ios/Fabric/RNCSafeAreaViewComponentView.h +11 -0
  44. package/ios/Fabric/RNCSafeAreaViewComponentView.mm +153 -0
  45. package/ios/RNCSafeAreaContext.h +9 -0
  46. package/ios/RNCSafeAreaContext.mm +85 -0
  47. package/ios/{SafeAreaView/RNCSafeAreaProvider.h → RNCSafeAreaProvider.h} +4 -0
  48. package/ios/RNCSafeAreaProvider.m +102 -0
  49. package/ios/RNCSafeAreaProviderManager.m +20 -0
  50. package/ios/{SafeAreaView/RNCSafeAreaShadowView.m → RNCSafeAreaShadowView.m} +50 -36
  51. package/ios/RNCSafeAreaUtils.h +22 -0
  52. package/ios/RNCSafeAreaUtils.m +41 -0
  53. package/ios/{SafeAreaView/RNCSafeAreaView.h → RNCSafeAreaView.h} +8 -4
  54. package/ios/RNCSafeAreaView.m +168 -0
  55. package/ios/RNCSafeAreaViewEdgeMode.h +12 -0
  56. package/ios/RNCSafeAreaViewEdgeMode.m +16 -0
  57. package/ios/RNCSafeAreaViewEdges.h +15 -0
  58. package/ios/RNCSafeAreaViewEdges.m +36 -0
  59. package/ios/{SafeAreaView/RNCSafeAreaViewLocalData.h → RNCSafeAreaViewLocalData.h} +12 -1
  60. package/ios/{SafeAreaView/RNCSafeAreaViewLocalData.m → RNCSafeAreaViewLocalData.m} +4 -0
  61. package/ios/{SafeAreaView/RNCSafeAreaViewManager.m → RNCSafeAreaViewManager.m} +5 -1
  62. package/ios/RNCSafeAreaViewMode.m +15 -0
  63. package/ios/{SafeAreaView.xcodeproj → RNSafeAreaContext.xcodeproj}/project.pbxproj +70 -56
  64. package/jest/mock.tsx +59 -0
  65. package/kepler-compatibility.json +2 -2
  66. package/lib/commonjs/CompatNativeSafeAreaProvider.js +7 -8
  67. package/lib/commonjs/CompatNativeSafeAreaProvider.js.map +1 -1
  68. package/lib/commonjs/InitialWindow.js.map +1 -1
  69. package/lib/commonjs/InitialWindow.kepler.js +1 -1
  70. package/lib/commonjs/InitialWindow.kepler.js.map +1 -1
  71. package/lib/commonjs/InitialWindow.native.js +4 -4
  72. package/lib/commonjs/InitialWindow.native.js.map +1 -1
  73. package/lib/commonjs/NativeSafeAreaProvider.js +7 -125
  74. package/lib/commonjs/NativeSafeAreaProvider.js.map +1 -1
  75. package/lib/commonjs/NativeSafeAreaProvider.kepler.js +6 -2
  76. package/lib/commonjs/NativeSafeAreaProvider.kepler.js.map +1 -1
  77. package/lib/commonjs/NativeSafeAreaProvider.web.js +135 -0
  78. package/lib/commonjs/NativeSafeAreaProvider.web.js.map +1 -0
  79. package/lib/commonjs/NativeSafeAreaProvider.windows.js +6 -2
  80. package/lib/commonjs/NativeSafeAreaProvider.windows.js.map +1 -1
  81. package/lib/commonjs/SafeArea.types.js.map +1 -1
  82. package/lib/commonjs/SafeAreaContext.js +56 -36
  83. package/lib/commonjs/SafeAreaContext.js.map +1 -1
  84. package/lib/commonjs/SafeAreaView.js +40 -73
  85. package/lib/commonjs/SafeAreaView.js.map +1 -1
  86. package/lib/commonjs/SafeAreaView.kepler.js.map +1 -1
  87. package/lib/commonjs/SafeAreaView.web.js +91 -0
  88. package/lib/commonjs/SafeAreaView.web.js.map +1 -0
  89. package/lib/commonjs/SafeAreaView.windows.js.map +1 -1
  90. package/lib/commonjs/index.js +1 -0
  91. package/lib/commonjs/index.js.map +1 -1
  92. package/lib/commonjs/package.json +1 -0
  93. package/lib/commonjs/specs/NativeSafeAreaContext.js +9 -0
  94. package/lib/commonjs/specs/NativeSafeAreaContext.js.map +1 -0
  95. package/lib/commonjs/specs/NativeSafeAreaProvider.js +10 -0
  96. package/lib/commonjs/specs/NativeSafeAreaProvider.js.map +1 -0
  97. package/lib/commonjs/specs/NativeSafeAreaView.js +12 -0
  98. package/lib/commonjs/specs/NativeSafeAreaView.js.map +1 -0
  99. package/lib/module/CompatNativeSafeAreaProvider.js +8 -5
  100. package/lib/module/CompatNativeSafeAreaProvider.js.map +1 -1
  101. package/lib/module/InitialWindow.js +2 -0
  102. package/lib/module/InitialWindow.js.map +1 -1
  103. package/lib/module/InitialWindow.kepler.js +3 -1
  104. package/lib/module/InitialWindow.kepler.js.map +1 -1
  105. package/lib/module/InitialWindow.native.js +5 -4
  106. package/lib/module/InitialWindow.native.js.map +1 -1
  107. package/lib/module/NativeSafeAreaProvider.js +3 -122
  108. package/lib/module/NativeSafeAreaProvider.js.map +1 -1
  109. package/lib/module/NativeSafeAreaProvider.kepler.js +3 -2
  110. package/lib/module/NativeSafeAreaProvider.kepler.js.map +1 -1
  111. package/lib/module/NativeSafeAreaProvider.web.js +130 -0
  112. package/lib/module/NativeSafeAreaProvider.web.js.map +1 -0
  113. package/lib/module/NativeSafeAreaProvider.windows.js +3 -2
  114. package/lib/module/NativeSafeAreaProvider.windows.js.map +1 -1
  115. package/lib/module/SafeArea.types.js +2 -0
  116. package/lib/module/SafeArea.types.js.map +1 -1
  117. package/lib/module/SafeAreaContext.js +57 -33
  118. package/lib/module/SafeAreaContext.js.map +1 -1
  119. package/lib/module/SafeAreaView.js +38 -69
  120. package/lib/module/SafeAreaView.js.map +1 -1
  121. package/lib/module/SafeAreaView.kepler.js +2 -0
  122. package/lib/module/SafeAreaView.kepler.js.map +1 -1
  123. package/lib/module/SafeAreaView.web.js +86 -0
  124. package/lib/module/SafeAreaView.web.js.map +1 -0
  125. package/lib/module/SafeAreaView.windows.js +2 -0
  126. package/lib/module/SafeAreaView.windows.js.map +1 -1
  127. package/lib/module/index.js +3 -0
  128. package/lib/module/index.js.map +1 -1
  129. package/lib/module/specs/NativeSafeAreaContext.js +5 -0
  130. package/lib/module/specs/NativeSafeAreaContext.js.map +1 -0
  131. package/lib/module/specs/NativeSafeAreaProvider.js +5 -0
  132. package/lib/module/specs/NativeSafeAreaProvider.js.map +1 -0
  133. package/lib/module/specs/NativeSafeAreaView.js +7 -0
  134. package/lib/module/specs/NativeSafeAreaView.js.map +1 -0
  135. package/lib/typescript/CompatNativeSafeAreaProvider.d.ts +4 -0
  136. package/lib/typescript/CompatNativeSafeAreaProvider.d.ts.map +1 -0
  137. package/lib/typescript/{src/InitialWindow.d.ts → InitialWindow.d.ts} +2 -1
  138. package/lib/typescript/InitialWindow.d.ts.map +1 -0
  139. package/lib/typescript/{src/InitialWindow.kepler.d.ts → InitialWindow.kepler.d.ts} +1 -0
  140. package/lib/typescript/InitialWindow.kepler.d.ts.map +1 -0
  141. package/lib/typescript/{src/InitialWindow.native.d.ts → InitialWindow.native.d.ts} +2 -1
  142. package/lib/typescript/InitialWindow.native.d.ts.map +1 -0
  143. package/lib/typescript/NativeSafeAreaProvider.d.ts +3 -0
  144. package/lib/typescript/NativeSafeAreaProvider.d.ts.map +1 -0
  145. package/lib/typescript/NativeSafeAreaProvider.kepler.d.ts +2 -0
  146. package/lib/typescript/NativeSafeAreaProvider.kepler.d.ts.map +1 -0
  147. package/lib/typescript/NativeSafeAreaProvider.web.d.ts +4 -0
  148. package/lib/typescript/NativeSafeAreaProvider.web.d.ts.map +1 -0
  149. package/lib/typescript/NativeSafeAreaProvider.windows.d.ts +2 -0
  150. package/lib/typescript/NativeSafeAreaProvider.windows.d.ts.map +1 -0
  151. package/lib/typescript/SafeArea.types.d.ts +36 -0
  152. package/lib/typescript/SafeArea.types.d.ts.map +1 -0
  153. package/lib/typescript/{src/SafeAreaContext.d.ts → SafeAreaContext.d.ts} +9 -6
  154. package/lib/typescript/SafeAreaContext.d.ts.map +1 -0
  155. package/lib/typescript/SafeAreaView.d.ts +5 -0
  156. package/lib/typescript/SafeAreaView.d.ts.map +1 -0
  157. package/lib/typescript/{src/SafeAreaView.kepler.d.ts → SafeAreaView.kepler.d.ts} +1 -0
  158. package/lib/typescript/SafeAreaView.kepler.d.ts.map +1 -0
  159. package/lib/typescript/SafeAreaView.web.d.ts +4 -0
  160. package/lib/typescript/SafeAreaView.web.d.ts.map +1 -0
  161. package/lib/typescript/SafeAreaView.windows.d.ts +3 -0
  162. package/lib/typescript/SafeAreaView.windows.d.ts.map +1 -0
  163. package/lib/typescript/{src/index.d.ts → index.d.ts} +1 -0
  164. package/lib/typescript/index.d.ts.map +1 -0
  165. package/lib/typescript/specs/NativeSafeAreaContext.d.ts +23 -0
  166. package/lib/typescript/specs/NativeSafeAreaContext.d.ts.map +1 -0
  167. package/lib/typescript/specs/NativeSafeAreaProvider.d.ts +22 -0
  168. package/lib/typescript/specs/NativeSafeAreaProvider.d.ts.map +1 -0
  169. package/lib/typescript/specs/NativeSafeAreaView.d.ts +14 -0
  170. package/lib/typescript/specs/NativeSafeAreaView.d.ts.map +1 -0
  171. package/oss-attribution/attribution.txt +0 -0
  172. package/oss-attribution/licenseInfos.json +1 -0
  173. package/package.json +137 -1
  174. package/react-native-safe-area-context.podspec +26 -4
  175. package/react-native.config.js +8 -0
  176. package/src/CompatNativeSafeAreaProvider.tsx +2 -3
  177. package/src/InitialWindow.kepler.ts +1 -1
  178. package/src/InitialWindow.native.ts +5 -11
  179. package/src/InitialWindow.ts +1 -1
  180. package/src/NativeSafeAreaProvider.kepler.tsx +1 -3
  181. package/src/NativeSafeAreaProvider.tsx +2 -128
  182. package/src/NativeSafeAreaProvider.web.tsx +127 -0
  183. package/src/NativeSafeAreaProvider.windows.tsx +1 -3
  184. package/src/SafeArea.types.ts +15 -11
  185. package/src/SafeAreaContext.tsx +66 -43
  186. package/src/SafeAreaView.tsx +47 -82
  187. package/src/SafeAreaView.web.tsx +123 -0
  188. package/src/SafeAreaView.windows.tsx +2 -1
  189. package/src/index.tsx +2 -0
  190. package/src/specs/NativeSafeAreaContext.ts +23 -0
  191. package/src/specs/NativeSafeAreaProvider.ts +29 -0
  192. package/src/specs/NativeSafeAreaView.ts +17 -0
  193. package/SystemBundles/e3c0cdeab56b8b622d4f0fd5a80812eafe199fa2287d0e3a09c5e573a1035350.bundle +0 -11031
  194. package/SystemBundles/e3c0cdeab56b8b622d4f0fd5a80812eafe199fa2287d0e3a09c5e573a1035350.map +0 -1
  195. package/SystemModules/amzn__react-native-safe-area-context-2.modules.txt +0 -55
  196. package/SystemModules/amzn__react-native-safe-area-context-2.private.modules.txt +0 -91
  197. package/THIRD_PARTY_NOTICES.txt +0 -24
  198. package/android/src/main/java/com/th3rdwave/safeareacontext/EdgeInsets.java +0 -22
  199. package/android/src/main/java/com/th3rdwave/safeareacontext/InsetsChangeEvent.java +0 -33
  200. package/android/src/main/java/com/th3rdwave/safeareacontext/Rect.java +0 -22
  201. package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaContextPackage.java +0 -31
  202. package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaProvider.java +0 -66
  203. package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaProviderManager.java +0 -94
  204. package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaUtils.java +0 -82
  205. package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaView.java +0 -159
  206. package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaViewEdges.java +0 -8
  207. package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaViewLocalData.java +0 -27
  208. package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaViewManager.java +0 -72
  209. package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaViewMode.java +0 -6
  210. package/android/src/main/java/com/th3rdwave/safeareacontext/SafeAreaViewShadowNode.java +0 -201
  211. package/android/src/main/java/com/th3rdwave/safeareacontext/SerializationUtils.java +0 -52
  212. package/ios/SafeAreaView/RCTView+SafeAreaCompat.h +0 -16
  213. package/ios/SafeAreaView/RCTView+SafeAreaCompat.m +0 -57
  214. package/ios/SafeAreaView/RNCSafeAreaProvider.m +0 -65
  215. package/ios/SafeAreaView/RNCSafeAreaProviderManager.m +0 -61
  216. package/ios/SafeAreaView/RNCSafeAreaView.m +0 -118
  217. package/ios/SafeAreaView/RNCSafeAreaViewEdges.h +0 -9
  218. package/ios/SafeAreaView/RNCSafeAreaViewEdges.m +0 -13
  219. package/ios/SafeAreaView/RNCSafeAreaViewMode.m +0 -11
  220. package/lib/commonjs/NativeSafeAreaProvider.macos.js +0 -9
  221. package/lib/commonjs/NativeSafeAreaProvider.macos.js.map +0 -1
  222. package/lib/commonjs/NativeSafeAreaProvider.native.js +0 -9
  223. package/lib/commonjs/NativeSafeAreaProvider.native.js.map +0 -1
  224. package/lib/commonjs/SafeAreaView.macos.js +0 -9
  225. package/lib/commonjs/SafeAreaView.macos.js.map +0 -1
  226. package/lib/commonjs/SafeAreaView.native.js +0 -9
  227. package/lib/commonjs/SafeAreaView.native.js.map +0 -1
  228. package/lib/commonjs/useWindowDimensions.js +0 -32
  229. package/lib/commonjs/useWindowDimensions.js.map +0 -1
  230. package/lib/module/NativeSafeAreaProvider.macos.js +0 -3
  231. package/lib/module/NativeSafeAreaProvider.macos.js.map +0 -1
  232. package/lib/module/NativeSafeAreaProvider.native.js +0 -3
  233. package/lib/module/NativeSafeAreaProvider.native.js.map +0 -1
  234. package/lib/module/SafeAreaView.macos.js +0 -3
  235. package/lib/module/SafeAreaView.macos.js.map +0 -1
  236. package/lib/module/SafeAreaView.native.js +0 -3
  237. package/lib/module/SafeAreaView.native.js.map +0 -1
  238. package/lib/module/useWindowDimensions.js +0 -26
  239. package/lib/module/useWindowDimensions.js.map +0 -1
  240. package/lib/typescript/src/CompatNativeSafeAreaProvider.d.ts +0 -2
  241. package/lib/typescript/src/NativeSafeAreaProvider.d.ts +0 -2
  242. package/lib/typescript/src/NativeSafeAreaProvider.kepler.d.ts +0 -2
  243. package/lib/typescript/src/NativeSafeAreaProvider.macos.d.ts +0 -2
  244. package/lib/typescript/src/NativeSafeAreaProvider.native.d.ts +0 -3
  245. package/lib/typescript/src/NativeSafeAreaProvider.windows.d.ts +0 -2
  246. package/lib/typescript/src/SafeArea.types.d.ts +0 -31
  247. package/lib/typescript/src/SafeAreaView.d.ts +0 -2
  248. package/lib/typescript/src/SafeAreaView.macos.d.ts +0 -2
  249. package/lib/typescript/src/SafeAreaView.native.d.ts +0 -2
  250. package/lib/typescript/src/SafeAreaView.windows.d.ts +0 -2
  251. package/lib/typescript/src/useWindowDimensions.d.ts +0 -8
  252. package/src/NativeSafeAreaProvider.macos.tsx +0 -3
  253. package/src/NativeSafeAreaProvider.native.tsx +0 -6
  254. package/src/SafeAreaView.macos.tsx +0 -3
  255. package/src/SafeAreaView.native.tsx +0 -6
  256. package/src/useWindowDimensions.tsx +0 -35
  257. /package/ios/{SafeAreaView/RNCSafeAreaProviderManager.h → RNCSafeAreaProviderManager.h} +0 -0
  258. /package/ios/{SafeAreaView/RNCSafeAreaShadowView.h → RNCSafeAreaShadowView.h} +0 -0
  259. /package/ios/{SafeAreaView/RNCSafeAreaViewManager.h → RNCSafeAreaViewManager.h} +0 -0
  260. /package/ios/{SafeAreaView/RNCSafeAreaViewMode.h → RNCSafeAreaViewMode.h} +0 -0
@@ -0,0 +1,155 @@
1
+ package com.th3rdwave.safeareacontext
2
+
3
+ import android.content.Context
4
+ import android.util.Log
5
+ import android.view.View
6
+ import android.view.ViewTreeObserver
7
+ import com.facebook.react.bridge.Arguments
8
+ import com.facebook.react.uimanager.StateWrapper
9
+ import com.facebook.react.uimanager.UIManagerModule
10
+ import com.facebook.react.views.view.ReactViewGroup
11
+ import java.util.concurrent.locks.ReentrantLock
12
+ import kotlin.concurrent.withLock
13
+
14
+ private const val MAX_WAIT_TIME_NANO = 500000000L // 500ms
15
+
16
+ class SafeAreaView(context: Context?) :
17
+ ReactViewGroup(context), ViewTreeObserver.OnPreDrawListener {
18
+ private var mMode = SafeAreaViewMode.PADDING
19
+ private var mInsets: EdgeInsets? = null
20
+ private var mEdges: SafeAreaViewEdges? = null
21
+ private var mProviderView: View? = null
22
+ private var mStateWrapper: StateWrapper? = null
23
+
24
+ fun getStateWrapper(): StateWrapper? {
25
+ return mStateWrapper
26
+ }
27
+
28
+ fun setStateWrapper(stateWrapper: StateWrapper?) {
29
+ mStateWrapper = stateWrapper
30
+ }
31
+
32
+ private fun updateInsets() {
33
+ val insets = mInsets
34
+ if (insets != null) {
35
+ val edges =
36
+ mEdges
37
+ ?: SafeAreaViewEdges(
38
+ SafeAreaViewEdgeModes.ADDITIVE,
39
+ SafeAreaViewEdgeModes.ADDITIVE,
40
+ SafeAreaViewEdgeModes.ADDITIVE,
41
+ SafeAreaViewEdgeModes.ADDITIVE)
42
+ val stateWrapper = getStateWrapper()
43
+ if (stateWrapper != null) {
44
+ val map = Arguments.createMap()
45
+ map.putMap("insets", edgeInsetsToJsMap(insets))
46
+ stateWrapper.updateState(map)
47
+ } else {
48
+ val localData = SafeAreaViewLocalData(insets = insets, mode = mMode, edges = edges)
49
+ val reactContext = getReactContext(this)
50
+ val uiManager = reactContext.getNativeModule(UIManagerModule::class.java)
51
+ if (uiManager != null) {
52
+ uiManager.setViewLocalData(id, localData)
53
+ // Sadly there doesn't seem to be a way to properly dirty a yoga node from java, so if we
54
+ // are in
55
+ // the middle of a layout, we need to recompute it. There is also no way to know whether
56
+ // we
57
+ // are in the middle of a layout so always do it.
58
+ reactContext.runOnNativeModulesQueueThread {
59
+ uiManager.uiImplementation.dispatchViewUpdates(-1)
60
+ }
61
+ waitForReactLayout()
62
+ }
63
+ }
64
+ }
65
+ }
66
+
67
+ private fun waitForReactLayout() {
68
+ // Block the main thread until the native module thread is finished with
69
+ // its current tasks. To do this we use the done boolean as a lock and enqueue
70
+ // a task on the native modules thread. When the task runs we can unblock the
71
+ // main thread. This should be safe as long as the native modules thread
72
+ // does not block waiting on the main thread.
73
+ var done = false
74
+ val lock = ReentrantLock()
75
+ val condition = lock.newCondition()
76
+ val startTime = System.nanoTime()
77
+ var waitTime = 0L
78
+ getReactContext(this).runOnNativeModulesQueueThread {
79
+ lock.withLock {
80
+ if (!done) {
81
+ done = true
82
+ condition.signal()
83
+ }
84
+ }
85
+ }
86
+ lock.withLock {
87
+ while (!done && waitTime < MAX_WAIT_TIME_NANO) {
88
+ try {
89
+ condition.awaitNanos(MAX_WAIT_TIME_NANO)
90
+ } catch (ex: InterruptedException) {
91
+ // In case of an interrupt just give up waiting.
92
+ done = true
93
+ }
94
+ waitTime += System.nanoTime() - startTime
95
+ }
96
+ }
97
+ // Timed out waiting.
98
+ if (waitTime >= MAX_WAIT_TIME_NANO) {
99
+ Log.w("SafeAreaView", "Timed out waiting for layout.")
100
+ }
101
+ }
102
+
103
+ fun setMode(mode: SafeAreaViewMode) {
104
+ mMode = mode
105
+ updateInsets()
106
+ }
107
+
108
+ fun setEdges(edges: SafeAreaViewEdges) {
109
+ mEdges = edges
110
+ updateInsets()
111
+ }
112
+
113
+ private fun maybeUpdateInsets(): Boolean {
114
+ val providerView = mProviderView ?: return false
115
+ val edgeInsets = getSafeAreaInsets(providerView) ?: return false
116
+ if (mInsets != edgeInsets) {
117
+ mInsets = edgeInsets
118
+ updateInsets()
119
+ return true
120
+ }
121
+ return false
122
+ }
123
+
124
+ private fun findProvider(): View {
125
+ var current = parent
126
+ while (current != null) {
127
+ if (current is SafeAreaProvider) {
128
+ return current
129
+ }
130
+ current = current.parent
131
+ }
132
+ return this
133
+ }
134
+
135
+ override fun onAttachedToWindow() {
136
+ super.onAttachedToWindow()
137
+ mProviderView = findProvider()
138
+ mProviderView?.viewTreeObserver?.addOnPreDrawListener(this)
139
+ maybeUpdateInsets()
140
+ }
141
+
142
+ override fun onDetachedFromWindow() {
143
+ super.onDetachedFromWindow()
144
+ mProviderView?.viewTreeObserver?.removeOnPreDrawListener(this)
145
+ mProviderView = null
146
+ }
147
+
148
+ override fun onPreDraw(): Boolean {
149
+ val didUpdate = maybeUpdateInsets()
150
+ if (didUpdate) {
151
+ requestLayout()
152
+ }
153
+ return !didUpdate
154
+ }
155
+ }
@@ -0,0 +1,16 @@
1
+ package com.th3rdwave.safeareacontext
2
+
3
+ enum class SafeAreaViewEdgeModes {
4
+ OFF,
5
+ ADDITIVE,
6
+ MAXIMUM
7
+ }
8
+
9
+ data class SafeAreaViewEdges(
10
+ val top: SafeAreaViewEdgeModes,
11
+ val right: SafeAreaViewEdgeModes,
12
+ val bottom: SafeAreaViewEdgeModes,
13
+ val left: SafeAreaViewEdgeModes
14
+ )
15
+
16
+ class Safe
@@ -0,0 +1,7 @@
1
+ package com.th3rdwave.safeareacontext
2
+
3
+ data class SafeAreaViewLocalData(
4
+ val insets: EdgeInsets,
5
+ val mode: SafeAreaViewMode,
6
+ val edges: SafeAreaViewEdges,
7
+ )
@@ -0,0 +1,73 @@
1
+ package com.th3rdwave.safeareacontext
2
+
3
+ import com.facebook.react.bridge.ReadableMap
4
+ import com.facebook.react.module.annotations.ReactModule
5
+ import com.facebook.react.uimanager.ReactStylesDiffMap
6
+ import com.facebook.react.uimanager.StateWrapper
7
+ import com.facebook.react.uimanager.ThemedReactContext
8
+ import com.facebook.react.uimanager.ViewManagerDelegate
9
+ import com.facebook.react.uimanager.annotations.ReactProp
10
+ import com.facebook.react.viewmanagers.RNCSafeAreaViewManagerInterface
11
+ import com.facebook.react.views.view.ReactViewGroup
12
+ import com.facebook.react.views.view.ReactViewManager
13
+
14
+ @ReactModule(name = SafeAreaViewManager.REACT_CLASS)
15
+ class SafeAreaViewManager : ReactViewManager(), RNCSafeAreaViewManagerInterface<SafeAreaView> {
16
+ override fun getName() = REACT_CLASS
17
+
18
+ // Make sure we're not using delegates for now since ReactViewGroupManager doesn't use one. If it
19
+ // does in the future we will need a way to compose delegates together.
20
+ override fun getDelegate(): ViewManagerDelegate<ReactViewGroup>? = null
21
+
22
+ override fun createViewInstance(context: ThemedReactContext) = SafeAreaView(context)
23
+
24
+ override fun createShadowNodeInstance() = SafeAreaViewShadowNode()
25
+
26
+ override fun getShadowNodeClass() = SafeAreaViewShadowNode::class.java
27
+
28
+ @ReactProp(name = "mode")
29
+ override fun setMode(view: SafeAreaView, mode: String?) {
30
+ when (mode) {
31
+ "padding" -> {
32
+ view.setMode(SafeAreaViewMode.PADDING)
33
+ }
34
+ "margin" -> {
35
+ view.setMode(SafeAreaViewMode.MARGIN)
36
+ }
37
+ }
38
+ }
39
+
40
+ @ReactProp(name = "edges")
41
+ override fun setEdges(view: SafeAreaView, propList: ReadableMap?) {
42
+ if (propList != null) {
43
+ view.setEdges(
44
+ SafeAreaViewEdges(
45
+ top = propList.getString("top")?.let { SafeAreaViewEdgeModes.valueOf(it.uppercase()) }
46
+ ?: SafeAreaViewEdgeModes.OFF,
47
+ right =
48
+ propList.getString("right")?.let { SafeAreaViewEdgeModes.valueOf(it.uppercase()) }
49
+ ?: SafeAreaViewEdgeModes.OFF,
50
+ bottom =
51
+ propList.getString("bottom")?.let {
52
+ SafeAreaViewEdgeModes.valueOf(it.uppercase())
53
+ }
54
+ ?: SafeAreaViewEdgeModes.OFF,
55
+ left =
56
+ propList.getString("left")?.let { SafeAreaViewEdgeModes.valueOf(it.uppercase()) }
57
+ ?: SafeAreaViewEdgeModes.OFF))
58
+ }
59
+ }
60
+
61
+ override fun updateState(
62
+ view: ReactViewGroup,
63
+ props: ReactStylesDiffMap?,
64
+ stateWrapper: StateWrapper?
65
+ ): Any? {
66
+ (view as SafeAreaView).setStateWrapper(stateWrapper)
67
+ return null
68
+ }
69
+
70
+ companion object {
71
+ const val REACT_CLASS = "RNCSafeAreaView"
72
+ }
73
+ }
@@ -0,0 +1,6 @@
1
+ package com.th3rdwave.safeareacontext
2
+
3
+ enum class SafeAreaViewMode {
4
+ PADDING,
5
+ MARGIN
6
+ }
@@ -0,0 +1,170 @@
1
+ package com.th3rdwave.safeareacontext
2
+
3
+ import com.facebook.react.bridge.Dynamic
4
+ import com.facebook.react.bridge.ReadableType
5
+ import com.facebook.react.uimanager.*
6
+ import com.facebook.react.uimanager.annotations.ReactPropGroup
7
+ import kotlin.math.max
8
+
9
+ class SafeAreaViewShadowNode : LayoutShadowNode() {
10
+ private var mLocalData: SafeAreaViewLocalData? = null
11
+ private val mPaddings: FloatArray = FloatArray(ViewProps.PADDING_MARGIN_SPACING_TYPES.size)
12
+ private val mMargins: FloatArray = FloatArray(ViewProps.PADDING_MARGIN_SPACING_TYPES.size)
13
+ private var mNeedsUpdate = false
14
+
15
+ init {
16
+ for (i in ViewProps.PADDING_MARGIN_SPACING_TYPES.indices) {
17
+ mPaddings[i] = Float.NaN
18
+ mMargins[i] = Float.NaN
19
+ }
20
+ }
21
+
22
+ private fun updateInsets() {
23
+ val localData = mLocalData ?: return
24
+ var top = 0f
25
+ var right = 0f
26
+ var bottom = 0f
27
+ var left = 0f
28
+ val meta = if (localData.mode == SafeAreaViewMode.PADDING) mPaddings else mMargins
29
+ val allEdges = meta[Spacing.ALL]
30
+ if (!java.lang.Float.isNaN(allEdges)) {
31
+ top = allEdges
32
+ right = allEdges
33
+ bottom = allEdges
34
+ left = allEdges
35
+ }
36
+ val verticalEdges = meta[Spacing.VERTICAL]
37
+ if (!java.lang.Float.isNaN(verticalEdges)) {
38
+ top = verticalEdges
39
+ bottom = verticalEdges
40
+ }
41
+ val horizontalEdges = meta[Spacing.HORIZONTAL]
42
+ if (!java.lang.Float.isNaN(horizontalEdges)) {
43
+ right = horizontalEdges
44
+ left = horizontalEdges
45
+ }
46
+ val topEdge = meta[Spacing.TOP]
47
+ if (!java.lang.Float.isNaN(topEdge)) {
48
+ top = topEdge
49
+ }
50
+ val rightEdge = meta[Spacing.RIGHT]
51
+ if (!java.lang.Float.isNaN(rightEdge)) {
52
+ right = rightEdge
53
+ }
54
+ val bottomEdge = meta[Spacing.BOTTOM]
55
+ if (!java.lang.Float.isNaN(bottomEdge)) {
56
+ bottom = bottomEdge
57
+ }
58
+ val leftEdge = meta[Spacing.LEFT]
59
+ if (!java.lang.Float.isNaN(leftEdge)) {
60
+ left = leftEdge
61
+ }
62
+ top = PixelUtil.toPixelFromDIP(top)
63
+ right = PixelUtil.toPixelFromDIP(right)
64
+ bottom = PixelUtil.toPixelFromDIP(bottom)
65
+ left = PixelUtil.toPixelFromDIP(left)
66
+ val edges = localData.edges
67
+ val insets = localData.insets
68
+ if (localData.mode == SafeAreaViewMode.PADDING) {
69
+ super.setPadding(Spacing.TOP, getEdgeValue(edges.top, insets.top, top))
70
+ super.setPadding(Spacing.RIGHT, getEdgeValue(edges.right, insets.right, right))
71
+ super.setPadding(Spacing.BOTTOM, getEdgeValue(edges.bottom, insets.bottom, bottom))
72
+ super.setPadding(Spacing.LEFT, getEdgeValue(edges.left, insets.left, left))
73
+ } else {
74
+ super.setMargin(Spacing.TOP, getEdgeValue(edges.top, insets.top, top))
75
+ super.setMargin(Spacing.RIGHT, getEdgeValue(edges.right, insets.right, right))
76
+ super.setMargin(Spacing.BOTTOM, getEdgeValue(edges.bottom, insets.bottom, bottom))
77
+ super.setMargin(Spacing.LEFT, getEdgeValue(edges.left, insets.left, left))
78
+ }
79
+ }
80
+
81
+ private fun getEdgeValue(
82
+ edgeMode: SafeAreaViewEdgeModes,
83
+ insetValue: Float,
84
+ edgeValue: Float
85
+ ): Float {
86
+ if (edgeMode == SafeAreaViewEdgeModes.OFF) {
87
+ return edgeValue
88
+ } else if (edgeMode == SafeAreaViewEdgeModes.MAXIMUM) {
89
+ return max(insetValue, edgeValue)
90
+ } else {
91
+ return insetValue + edgeValue
92
+ }
93
+ }
94
+
95
+ private fun resetInsets(mode: SafeAreaViewMode) {
96
+ if (mode == SafeAreaViewMode.PADDING) {
97
+ super.setPadding(Spacing.TOP, mPaddings[Spacing.TOP])
98
+ super.setPadding(Spacing.RIGHT, mPaddings[Spacing.TOP])
99
+ super.setPadding(Spacing.BOTTOM, mPaddings[Spacing.BOTTOM])
100
+ super.setPadding(Spacing.LEFT, mPaddings[Spacing.LEFT])
101
+ } else {
102
+ super.setMargin(Spacing.TOP, mMargins[Spacing.TOP])
103
+ super.setMargin(Spacing.RIGHT, mMargins[Spacing.TOP])
104
+ super.setMargin(Spacing.BOTTOM, mMargins[Spacing.BOTTOM])
105
+ super.setMargin(Spacing.LEFT, mMargins[Spacing.LEFT])
106
+ }
107
+ markUpdated()
108
+ }
109
+
110
+ override fun onBeforeLayout(nativeViewHierarchyOptimizer: NativeViewHierarchyOptimizer) {
111
+ if (mNeedsUpdate) {
112
+ mNeedsUpdate = false
113
+ updateInsets()
114
+ }
115
+ }
116
+
117
+ override fun setLocalData(data: Any) {
118
+ if (data !is SafeAreaViewLocalData) {
119
+ return
120
+ }
121
+ val localData = mLocalData
122
+ if (localData != null && localData.mode != data.mode) {
123
+ resetInsets(localData.mode)
124
+ }
125
+ mLocalData = data
126
+ mNeedsUpdate = false
127
+ updateInsets()
128
+ }
129
+
130
+ // Names needs to reflect exact order in LayoutShadowNode.java
131
+ @ReactPropGroup(
132
+ names =
133
+ [
134
+ ViewProps.PADDING,
135
+ ViewProps.PADDING_VERTICAL,
136
+ ViewProps.PADDING_HORIZONTAL,
137
+ ViewProps.PADDING_START,
138
+ ViewProps.PADDING_END,
139
+ ViewProps.PADDING_TOP,
140
+ ViewProps.PADDING_BOTTOM,
141
+ ViewProps.PADDING_LEFT,
142
+ ViewProps.PADDING_RIGHT])
143
+ override fun setPaddings(index: Int, padding: Dynamic) {
144
+ val spacingType = ViewProps.PADDING_MARGIN_SPACING_TYPES[index]
145
+ mPaddings[spacingType] =
146
+ if (padding.type == ReadableType.Number) padding.asDouble().toFloat() else Float.NaN
147
+ super.setPaddings(index, padding)
148
+ mNeedsUpdate = true
149
+ }
150
+
151
+ @ReactPropGroup(
152
+ names =
153
+ [
154
+ ViewProps.MARGIN,
155
+ ViewProps.MARGIN_VERTICAL,
156
+ ViewProps.MARGIN_HORIZONTAL,
157
+ ViewProps.MARGIN_START,
158
+ ViewProps.MARGIN_END,
159
+ ViewProps.MARGIN_TOP,
160
+ ViewProps.MARGIN_BOTTOM,
161
+ ViewProps.MARGIN_LEFT,
162
+ ViewProps.MARGIN_RIGHT])
163
+ override fun setMargins(index: Int, margin: Dynamic) {
164
+ val spacingType = ViewProps.PADDING_MARGIN_SPACING_TYPES[index]
165
+ mMargins[spacingType] =
166
+ if (margin.type == ReadableType.Number) margin.asDouble().toFloat() else Float.NaN
167
+ super.setMargins(index, margin)
168
+ mNeedsUpdate = true
169
+ }
170
+ }
@@ -0,0 +1,39 @@
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.PixelUtil
6
+
7
+ fun edgeInsetsToJsMap(insets: EdgeInsets): WritableMap {
8
+ val insetsMap = Arguments.createMap()
9
+ insetsMap.putDouble("top", PixelUtil.toDIPFromPixel(insets.top).toDouble())
10
+ insetsMap.putDouble("right", PixelUtil.toDIPFromPixel(insets.right).toDouble())
11
+ insetsMap.putDouble("bottom", PixelUtil.toDIPFromPixel(insets.bottom).toDouble())
12
+ insetsMap.putDouble("left", PixelUtil.toDIPFromPixel(insets.left).toDouble())
13
+ return insetsMap
14
+ }
15
+
16
+ fun edgeInsetsToJavaMap(insets: EdgeInsets): Map<String, Float> {
17
+ return mapOf(
18
+ "top" to PixelUtil.toDIPFromPixel(insets.top),
19
+ "right" to PixelUtil.toDIPFromPixel(insets.right),
20
+ "bottom" to PixelUtil.toDIPFromPixel(insets.bottom),
21
+ "left" to PixelUtil.toDIPFromPixel(insets.left))
22
+ }
23
+
24
+ fun rectToJsMap(rect: Rect): WritableMap {
25
+ val rectMap = Arguments.createMap()
26
+ rectMap.putDouble("x", PixelUtil.toDIPFromPixel(rect.x).toDouble())
27
+ rectMap.putDouble("y", PixelUtil.toDIPFromPixel(rect.y).toDouble())
28
+ rectMap.putDouble("width", PixelUtil.toDIPFromPixel(rect.width).toDouble())
29
+ rectMap.putDouble("height", PixelUtil.toDIPFromPixel(rect.height).toDouble())
30
+ return rectMap
31
+ }
32
+
33
+ fun rectToJavaMap(rect: Rect): Map<String, Float> {
34
+ return mapOf(
35
+ "x" to PixelUtil.toDIPFromPixel(rect.x),
36
+ "y" to PixelUtil.toDIPFromPixel(rect.y),
37
+ "width" to PixelUtil.toDIPFromPixel(rect.width),
38
+ "height" to PixelUtil.toDIPFromPixel(rect.height))
39
+ }
@@ -0,0 +1,87 @@
1
+ cmake_minimum_required(VERSION 3.13)
2
+ set(CMAKE_VERBOSE_MAKEFILE ON)
3
+
4
+ set(LIB_LITERAL safeareacontext)
5
+ set(LIB_TARGET_NAME react_codegen_${LIB_LITERAL})
6
+
7
+ set(LIB_ANDROID_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../..)
8
+ set(LIB_COMMON_DIR ${LIB_ANDROID_DIR}/../common/cpp)
9
+ set(LIB_ANDROID_GENERATED_JNI_DIR ${LIB_ANDROID_DIR}/build/generated/source/codegen/jni)
10
+ set(LIB_ANDROID_GENERATED_COMPONENTS_DIR ${LIB_ANDROID_GENERATED_JNI_DIR}/react/renderer/components/${LIB_LITERAL})
11
+
12
+ add_compile_options(
13
+ -fexceptions
14
+ -frtti
15
+ -std=c++20
16
+ -Wall
17
+ -Wpedantic
18
+ -Wno-gnu-zero-variadic-macro-arguments
19
+ -Wno-dollar-in-identifier-extension
20
+ )
21
+
22
+ file(GLOB LIB_CUSTOM_SRCS CONFIGURE_DEPENDS *.cpp ${LIB_COMMON_DIR}/react/renderer/components/${LIB_LITERAL}/*.cpp)
23
+ file(GLOB LIB_CODEGEN_SRCS CONFIGURE_DEPENDS ${LIB_ANDROID_GENERATED_JNI_DIR}/*.cpp ${LIB_ANDROID_GENERATED_COMPONENTS_DIR}/*.cpp)
24
+
25
+ add_library(
26
+ ${LIB_TARGET_NAME}
27
+ SHARED
28
+ ${LIB_CUSTOM_SRCS}
29
+ ${LIB_CODEGEN_SRCS}
30
+ )
31
+
32
+ target_include_directories(
33
+ ${LIB_TARGET_NAME}
34
+ PUBLIC
35
+ .
36
+ ${LIB_COMMON_DIR}
37
+ ${LIB_ANDROID_GENERATED_JNI_DIR}
38
+ ${LIB_ANDROID_GENERATED_COMPONENTS_DIR}
39
+ )
40
+
41
+ # https://github.com/react-native-community/discussions-and-proposals/discussions/816
42
+ # This if-then-else can be removed once this library does not support version below 0.76
43
+ if (REACTNATIVE_MERGED_SO)
44
+ target_link_libraries(
45
+ ${LIB_TARGET_NAME}
46
+ fbjni
47
+ jsi
48
+ reactnative
49
+ )
50
+ else()
51
+ target_link_libraries(
52
+ ${LIB_TARGET_NAME}
53
+ fbjni
54
+ folly_runtime
55
+ glog
56
+ jsi
57
+ react_codegen_rncore
58
+ react_debug
59
+ react_nativemodule_core
60
+ react_render_core
61
+ react_render_debug
62
+ react_render_graphics
63
+ react_render_mapbuffer
64
+ react_render_componentregistry
65
+ react_utils
66
+ rrc_view
67
+ turbomodulejsijni
68
+ yoga
69
+ )
70
+ endif()
71
+
72
+
73
+ target_compile_options(
74
+ ${LIB_TARGET_NAME}
75
+ PRIVATE
76
+ -DLOG_TAG=\"ReactNative\"
77
+ -fexceptions
78
+ -frtti
79
+ -std=c++20
80
+ -Wall
81
+ )
82
+
83
+ target_include_directories(
84
+ ${CMAKE_PROJECT_NAME}
85
+ PUBLIC
86
+ ${CMAKE_CURRENT_SOURCE_DIR}
87
+ )
@@ -0,0 +1,17 @@
1
+ #pragma once
2
+
3
+ #include <ReactCommon/JavaTurboModule.h>
4
+ #include <ReactCommon/TurboModule.h>
5
+ #include <jsi/jsi.h>
6
+ #include <react/renderer/components/safeareacontext/RNCSafeAreaViewComponentDescriptor.h>
7
+
8
+ namespace facebook {
9
+ namespace react {
10
+
11
+ JSI_EXPORT
12
+ std::shared_ptr<TurboModule> safeareacontext_ModuleProvider(
13
+ const std::string &moduleName,
14
+ const JavaTurboModule::InitParams &params);
15
+
16
+ } // namespace react
17
+ } // namespace facebook
@@ -0,0 +1,31 @@
1
+ /**
2
+ * This code was generated by
3
+ * [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
4
+ *
5
+ * <p>Do not edit this file as changes may cause incorrect behavior and will be lost once the code
6
+ * is regenerated.
7
+ *
8
+ * @generated by codegen project: GeneratePropsJavaDelegate.js
9
+ */
10
+ package com.facebook.react.viewmanagers;
11
+
12
+ import android.view.View;
13
+ import androidx.annotation.Nullable;
14
+ import com.facebook.react.uimanager.BaseViewManager;
15
+ import com.facebook.react.uimanager.BaseViewManagerDelegate;
16
+ import com.facebook.react.uimanager.LayoutShadowNode;
17
+
18
+ public class RNCSafeAreaProviderManagerDelegate<
19
+ T extends View,
20
+ U extends
21
+ BaseViewManager<T, ? extends LayoutShadowNode> & RNCSafeAreaProviderManagerInterface<T>>
22
+ extends BaseViewManagerDelegate<T, U> {
23
+ public RNCSafeAreaProviderManagerDelegate(U viewManager) {
24
+ super(viewManager);
25
+ }
26
+
27
+ @Override
28
+ public void setProperty(T view, String propName, @Nullable Object value) {
29
+ super.setProperty(view, propName, value);
30
+ }
31
+ }
@@ -0,0 +1,16 @@
1
+ /**
2
+ * This code was generated by
3
+ * [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
4
+ *
5
+ * <p>Do not edit this file as changes may cause incorrect behavior and will be lost once the code
6
+ * is regenerated.
7
+ *
8
+ * @generated by codegen project: GeneratePropsJavaInterface.js
9
+ */
10
+ package com.facebook.react.viewmanagers;
11
+
12
+ import android.view.View;
13
+
14
+ public interface RNCSafeAreaProviderManagerInterface<T extends View> {
15
+ // No props
16
+ }
@@ -0,0 +1,41 @@
1
+ /**
2
+ * This code was generated by
3
+ * [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
4
+ *
5
+ * <p>Do not edit this file as changes may cause incorrect behavior and will be lost once the code
6
+ * is regenerated.
7
+ *
8
+ * @generated by codegen project: GeneratePropsJavaDelegate.js
9
+ */
10
+ package com.facebook.react.viewmanagers;
11
+
12
+ import android.view.View;
13
+ import androidx.annotation.Nullable;
14
+ import com.facebook.react.bridge.ReadableMap;
15
+ import com.facebook.react.uimanager.BaseViewManager;
16
+ import com.facebook.react.uimanager.BaseViewManagerDelegate;
17
+ import com.facebook.react.uimanager.LayoutShadowNode;
18
+
19
+ public class RNCSafeAreaViewManagerDelegate<
20
+ T extends View,
21
+ U extends
22
+ BaseViewManager<T, ? extends LayoutShadowNode> & RNCSafeAreaViewManagerInterface<T>>
23
+ extends BaseViewManagerDelegate<T, U> {
24
+ public RNCSafeAreaViewManagerDelegate(U viewManager) {
25
+ super(viewManager);
26
+ }
27
+
28
+ @Override
29
+ public void setProperty(T view, String propName, @Nullable Object value) {
30
+ switch (propName) {
31
+ case "mode":
32
+ mViewManager.setMode(view, (String) value);
33
+ break;
34
+ case "edges":
35
+ mViewManager.setEdges(view, (ReadableMap) value);
36
+ break;
37
+ default:
38
+ super.setProperty(view, propName, value);
39
+ }
40
+ }
41
+ }
@@ -0,0 +1,20 @@
1
+ /**
2
+ * This code was generated by
3
+ * [react-native-codegen](https://www.npmjs.com/package/react-native-codegen).
4
+ *
5
+ * <p>Do not edit this file as changes may cause incorrect behavior and will be lost once the code
6
+ * is regenerated.
7
+ *
8
+ * @generated by codegen project: GeneratePropsJavaInterface.js
9
+ */
10
+ package com.facebook.react.viewmanagers;
11
+
12
+ import android.view.View;
13
+ import androidx.annotation.Nullable;
14
+ import com.facebook.react.bridge.ReadableMap;
15
+
16
+ public interface RNCSafeAreaViewManagerInterface<T extends View> {
17
+ void setMode(T view, @Nullable String value);
18
+
19
+ void setEdges(T view, @Nullable ReadableMap value);
20
+ }