@javascriptcommon/react-native-webview 13.12.16

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 (120) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +82 -0
  3. package/android/build.gradle +110 -0
  4. package/android/gradle.properties +5 -0
  5. package/android/src/main/AndroidManifest.xml +15 -0
  6. package/android/src/main/AndroidManifestNew.xml +13 -0
  7. package/android/src/main/java/com/reactnativecommunity/webview/RNCBasicAuthCredential.java +11 -0
  8. package/android/src/main/java/com/reactnativecommunity/webview/RNCWebChromeClient.java +372 -0
  9. package/android/src/main/java/com/reactnativecommunity/webview/RNCWebView.java +450 -0
  10. package/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewClient.java +328 -0
  11. package/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewConfig.java +11 -0
  12. package/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewFileProvider.java +14 -0
  13. package/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManagerImpl.kt +720 -0
  14. package/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewMessagingModule.kt +19 -0
  15. package/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewModuleImpl.java +554 -0
  16. package/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewPackage.java +56 -0
  17. package/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewWrapper.kt +39 -0
  18. package/android/src/main/java/com/reactnativecommunity/webview/URLUtil.java +179 -0
  19. package/android/src/main/java/com/reactnativecommunity/webview/events/TopCustomMenuSelectionEvent.kt +24 -0
  20. package/android/src/main/java/com/reactnativecommunity/webview/events/TopHttpErrorEvent.kt +25 -0
  21. package/android/src/main/java/com/reactnativecommunity/webview/events/TopLoadingErrorEvent.kt +25 -0
  22. package/android/src/main/java/com/reactnativecommunity/webview/events/TopLoadingFinishEvent.kt +24 -0
  23. package/android/src/main/java/com/reactnativecommunity/webview/events/TopLoadingProgressEvent.kt +24 -0
  24. package/android/src/main/java/com/reactnativecommunity/webview/events/TopLoadingStartEvent.kt +25 -0
  25. package/android/src/main/java/com/reactnativecommunity/webview/events/TopMessageEvent.kt +24 -0
  26. package/android/src/main/java/com/reactnativecommunity/webview/events/TopNewWindowEvent.kt +25 -0
  27. package/android/src/main/java/com/reactnativecommunity/webview/events/TopRenderProcessGoneEvent.kt +26 -0
  28. package/android/src/main/java/com/reactnativecommunity/webview/events/TopShouldStartLoadWithRequestEvent.kt +29 -0
  29. package/android/src/main/res/xml/file_provider_paths.xml +6 -0
  30. package/android/src/newarch/com/reactnativecommunity/webview/RNCWebViewManager.java +553 -0
  31. package/android/src/newarch/com/reactnativecommunity/webview/RNCWebViewModule.java +63 -0
  32. package/android/src/oldarch/com/reactnativecommunity/webview/RNCWebViewManager.java +328 -0
  33. package/android/src/oldarch/com/reactnativecommunity/webview/RNCWebViewModule.java +59 -0
  34. package/apple/RCTConvert+WKDataDetectorTypes.h +11 -0
  35. package/apple/RCTConvert+WKDataDetectorTypes.m +27 -0
  36. package/apple/RNCWKProcessPoolManager.h +15 -0
  37. package/apple/RNCWKProcessPoolManager.m +36 -0
  38. package/apple/RNCWebView.h +35 -0
  39. package/apple/RNCWebView.mm +546 -0
  40. package/apple/RNCWebViewDecisionManager.h +20 -0
  41. package/apple/RNCWebViewDecisionManager.m +47 -0
  42. package/apple/RNCWebViewImpl.h +161 -0
  43. package/apple/RNCWebViewImpl.m +1979 -0
  44. package/apple/RNCWebViewManager.h +9 -0
  45. package/apple/RNCWebViewManager.mm +215 -0
  46. package/apple/RNCWebViewModule.h +23 -0
  47. package/apple/RNCWebViewModule.mm +34 -0
  48. package/index.d.ts +65 -0
  49. package/index.js +4 -0
  50. package/ios/RNCWebView.xcodeproj/project.pbxproj +273 -0
  51. package/lib/NativeRNCWebViewModule.d.ts +10 -0
  52. package/lib/NativeRNCWebViewModule.js +1 -0
  53. package/lib/RNCWebViewNativeComponent.d.ts +242 -0
  54. package/lib/RNCWebViewNativeComponent.js +1 -0
  55. package/lib/WebView.android.d.ts +6 -0
  56. package/lib/WebView.android.js +1 -0
  57. package/lib/WebView.d.ts +6 -0
  58. package/lib/WebView.ios.d.ts +6 -0
  59. package/lib/WebView.ios.js +1 -0
  60. package/lib/WebView.js +1 -0
  61. package/lib/WebView.macos.d.ts +6 -0
  62. package/lib/WebView.macos.js +1 -0
  63. package/lib/WebView.styles.d.ts +38 -0
  64. package/lib/WebView.styles.js +1 -0
  65. package/lib/WebView.windows.d.ts +17 -0
  66. package/lib/WebView.windows.js +1 -0
  67. package/lib/WebViewNativeComponent.macos.d.ts +3 -0
  68. package/lib/WebViewNativeComponent.macos.js +1 -0
  69. package/lib/WebViewNativeComponent.windows.d.ts +3 -0
  70. package/lib/WebViewNativeComponent.windows.js +1 -0
  71. package/lib/WebViewShared.d.ts +38 -0
  72. package/lib/WebViewShared.js +1 -0
  73. package/lib/WebViewTypes.d.ts +1093 -0
  74. package/lib/WebViewTypes.js +1 -0
  75. package/lib/index.d.ts +3 -0
  76. package/lib/index.js +1 -0
  77. package/macos/RNCWebView.xcodeproj/project.pbxproj +363 -0
  78. package/package.json +101 -0
  79. package/react-native-webview.podspec +46 -0
  80. package/react-native.config.js +44 -0
  81. package/src/NativeRNCWebViewModule.ts +15 -0
  82. package/src/RNCWebViewNativeComponent.ts +342 -0
  83. package/src/WebView.android.tsx +317 -0
  84. package/src/WebView.ios.tsx +299 -0
  85. package/src/WebView.macos.tsx +245 -0
  86. package/src/WebView.styles.ts +41 -0
  87. package/src/WebView.tsx +25 -0
  88. package/src/WebView.windows.tsx +210 -0
  89. package/src/WebViewNativeComponent.macos.ts +7 -0
  90. package/src/WebViewNativeComponent.windows.ts +8 -0
  91. package/src/WebViewShared.tsx +283 -0
  92. package/src/WebViewTypes.ts +1332 -0
  93. package/src/__tests__/WebViewShared-test.js +323 -0
  94. package/src/__tests__/__snapshots__/WebViewShared-test.js.snap +8 -0
  95. package/src/index.ts +4 -0
  96. package/windows/ExperimentalFeatures.props +11 -0
  97. package/windows/ReactNativeWebView/PropertySheet.props +16 -0
  98. package/windows/ReactNativeWebView/ReactNativeWebView.def +3 -0
  99. package/windows/ReactNativeWebView/ReactNativeWebView.filters +33 -0
  100. package/windows/ReactNativeWebView/ReactNativeWebView.vcxproj +189 -0
  101. package/windows/ReactNativeWebView/ReactPackageProvider.cpp +26 -0
  102. package/windows/ReactNativeWebView/ReactPackageProvider.h +20 -0
  103. package/windows/ReactNativeWebView/ReactPackageProvider.idl +7 -0
  104. package/windows/ReactNativeWebView/ReactWebView.cpp +242 -0
  105. package/windows/ReactNativeWebView/ReactWebView.h +56 -0
  106. package/windows/ReactNativeWebView/ReactWebView.idl +31 -0
  107. package/windows/ReactNativeWebView/ReactWebView2.cpp +473 -0
  108. package/windows/ReactNativeWebView/ReactWebView2.h +91 -0
  109. package/windows/ReactNativeWebView/ReactWebView2Manager.cpp +205 -0
  110. package/windows/ReactNativeWebView/ReactWebView2Manager.h +57 -0
  111. package/windows/ReactNativeWebView/ReactWebViewHelpers.cpp +70 -0
  112. package/windows/ReactNativeWebView/ReactWebViewHelpers.h +16 -0
  113. package/windows/ReactNativeWebView/ReactWebViewManager.cpp +224 -0
  114. package/windows/ReactNativeWebView/ReactWebViewManager.h +58 -0
  115. package/windows/ReactNativeWebView/WebBridge.cpp +19 -0
  116. package/windows/ReactNativeWebView/WebBridge.h +24 -0
  117. package/windows/ReactNativeWebView/WebBridge.idl +11 -0
  118. package/windows/ReactNativeWebView/pch.cpp +1 -0
  119. package/windows/ReactNativeWebView/pch.h +37 -0
  120. package/windows/ReactNativeWebView.sln +185 -0
@@ -0,0 +1,553 @@
1
+ package com.reactnativecommunity.webview;
2
+
3
+ import androidx.annotation.NonNull;
4
+ import androidx.annotation.Nullable;
5
+
6
+ import com.facebook.react.bridge.ReadableArray;
7
+ import com.facebook.react.bridge.ReadableMap;
8
+ import com.facebook.react.common.MapBuilder;
9
+ import com.facebook.react.module.annotations.ReactModule;
10
+ import com.facebook.react.uimanager.ThemedReactContext;
11
+ import com.facebook.react.uimanager.ViewGroupManager;
12
+ import com.facebook.react.uimanager.ViewManagerDelegate;
13
+ import com.facebook.react.uimanager.annotations.ReactProp;
14
+ import com.facebook.react.viewmanagers.RNCWebViewManagerDelegate;
15
+ import com.facebook.react.viewmanagers.RNCWebViewManagerInterface;
16
+ import com.facebook.react.views.scroll.ScrollEventType;
17
+ import com.reactnativecommunity.webview.events.TopCustomMenuSelectionEvent;
18
+ import com.reactnativecommunity.webview.events.TopHttpErrorEvent;
19
+ import com.reactnativecommunity.webview.events.TopLoadingErrorEvent;
20
+ import com.reactnativecommunity.webview.events.TopLoadingFinishEvent;
21
+ import com.reactnativecommunity.webview.events.TopLoadingProgressEvent;
22
+ import com.reactnativecommunity.webview.events.TopLoadingStartEvent;
23
+ import com.reactnativecommunity.webview.events.TopMessageEvent;
24
+ import com.reactnativecommunity.webview.events.TopOpenWindowEvent;
25
+ import com.reactnativecommunity.webview.events.TopRenderProcessGoneEvent;
26
+ import com.reactnativecommunity.webview.events.TopShouldStartLoadWithRequestEvent;
27
+
28
+ import android.webkit.WebChromeClient;
29
+
30
+ import org.json.JSONException;
31
+ import org.json.JSONObject;
32
+
33
+ import java.util.Map;
34
+
35
+ @ReactModule(name = RNCWebViewManagerImpl.NAME)
36
+ public class RNCWebViewManager extends ViewGroupManager<RNCWebViewWrapper>
37
+ implements RNCWebViewManagerInterface<RNCWebViewWrapper> {
38
+
39
+ private final ViewManagerDelegate<RNCWebViewWrapper> mDelegate;
40
+ private final RNCWebViewManagerImpl mRNCWebViewManagerImpl;
41
+
42
+ public RNCWebViewManager() {
43
+ mDelegate = new RNCWebViewManagerDelegate<>(this);
44
+ mRNCWebViewManagerImpl = new RNCWebViewManagerImpl(true);
45
+ }
46
+
47
+ @Nullable
48
+ @Override
49
+ protected ViewManagerDelegate<RNCWebViewWrapper> getDelegate() {
50
+ return mDelegate;
51
+ }
52
+
53
+ @NonNull
54
+ @Override
55
+ public String getName() {
56
+ return RNCWebViewManagerImpl.NAME;
57
+ }
58
+
59
+ @NonNull
60
+ @Override
61
+ protected RNCWebViewWrapper createViewInstance(@NonNull ThemedReactContext context) {
62
+ return mRNCWebViewManagerImpl.createViewInstance(context);
63
+ }
64
+
65
+ @Override
66
+ @ReactProp(name = "allowFileAccess")
67
+ public void setAllowFileAccess(RNCWebViewWrapper view, boolean value) {
68
+ mRNCWebViewManagerImpl.setAllowFileAccess(view, value);
69
+ }
70
+
71
+ @Override
72
+ @ReactProp(name = "allowFileAccessFromFileURLs")
73
+ public void setAllowFileAccessFromFileURLs(RNCWebViewWrapper view, boolean value) {
74
+ mRNCWebViewManagerImpl.setAllowFileAccessFromFileURLs(view, value);
75
+
76
+ }
77
+
78
+ @Override
79
+ @ReactProp(name = "allowUniversalAccessFromFileURLs")
80
+ public void setAllowUniversalAccessFromFileURLs(RNCWebViewWrapper view, boolean value) {
81
+ mRNCWebViewManagerImpl.setAllowUniversalAccessFromFileURLs(view, value);
82
+ }
83
+
84
+ @Override
85
+ @ReactProp(name = "allowsFullscreenVideo")
86
+ public void setAllowsFullscreenVideo(RNCWebViewWrapper view, boolean value) {
87
+ mRNCWebViewManagerImpl.setAllowsFullscreenVideo(view, value);
88
+ }
89
+
90
+ @Override
91
+ @ReactProp(name = "allowsProtectedMedia")
92
+ public void setAllowsProtectedMedia(RNCWebViewWrapper view, boolean value) {
93
+ mRNCWebViewManagerImpl.setAllowsProtectedMedia(view, value);
94
+ }
95
+
96
+ @Override
97
+ @ReactProp(name = "androidLayerType")
98
+ public void setAndroidLayerType(RNCWebViewWrapper view, @Nullable String value) {
99
+ mRNCWebViewManagerImpl.setAndroidLayerType(view, value);
100
+ }
101
+
102
+ @Override
103
+ @ReactProp(name = "applicationNameForUserAgent")
104
+ public void setApplicationNameForUserAgent(RNCWebViewWrapper view, @Nullable String value) {
105
+ mRNCWebViewManagerImpl.setApplicationNameForUserAgent(view, value);
106
+ }
107
+
108
+ @Override
109
+ @ReactProp(name = "basicAuthCredential")
110
+ public void setBasicAuthCredential(RNCWebViewWrapper view, @Nullable ReadableMap value) {
111
+ mRNCWebViewManagerImpl.setBasicAuthCredential(view, value);
112
+ }
113
+
114
+ @Override
115
+ @ReactProp(name = "cacheEnabled")
116
+ public void setCacheEnabled(RNCWebViewWrapper view, boolean value) {
117
+ mRNCWebViewManagerImpl.setCacheEnabled(view, value);
118
+ }
119
+
120
+ @Override
121
+ @ReactProp(name = "cacheMode")
122
+ public void setCacheMode(RNCWebViewWrapper view, @Nullable String value) {
123
+ mRNCWebViewManagerImpl.setCacheMode(view, value);
124
+ }
125
+
126
+ @Override
127
+ @ReactProp(name = "domStorageEnabled")
128
+ public void setDomStorageEnabled(RNCWebViewWrapper view, boolean value) {
129
+ mRNCWebViewManagerImpl.setDomStorageEnabled(view, value);
130
+ }
131
+
132
+ @Override
133
+ @ReactProp(name = "downloadingMessage")
134
+ public void setDownloadingMessage(RNCWebViewWrapper view, @Nullable String value) {
135
+ mRNCWebViewManagerImpl.setDownloadingMessage(value);
136
+ }
137
+
138
+ @Override
139
+ @ReactProp(name = "forceDarkOn")
140
+ public void setForceDarkOn(RNCWebViewWrapper view, boolean value) {
141
+ mRNCWebViewManagerImpl.setForceDarkOn(view, value);
142
+ }
143
+
144
+ @Override
145
+ @ReactProp(name = "geolocationEnabled")
146
+ public void setGeolocationEnabled(RNCWebViewWrapper view, boolean value) {
147
+ mRNCWebViewManagerImpl.setGeolocationEnabled(view, value);
148
+ }
149
+
150
+ @Override
151
+ @ReactProp(name = "hasOnScroll")
152
+ public void setHasOnScroll(RNCWebViewWrapper view, boolean hasScrollEvent) {
153
+ mRNCWebViewManagerImpl.setHasOnScroll(view, hasScrollEvent);
154
+ }
155
+
156
+ @Override
157
+ @ReactProp(name = "incognito")
158
+ public void setIncognito(RNCWebViewWrapper view, boolean value) {
159
+ mRNCWebViewManagerImpl.setIncognito(view, value);
160
+ }
161
+
162
+ @Override
163
+ @ReactProp(name = "injectedJavaScript")
164
+ public void setInjectedJavaScript(RNCWebViewWrapper view, @Nullable String value) {
165
+ mRNCWebViewManagerImpl.setInjectedJavaScript(view, value);
166
+ }
167
+
168
+ @Override
169
+ @ReactProp(name = "injectedJavaScriptBeforeContentLoaded")
170
+ public void setInjectedJavaScriptBeforeContentLoaded(RNCWebViewWrapper view, @Nullable String value) {
171
+ mRNCWebViewManagerImpl.setInjectedJavaScriptBeforeContentLoaded(view, value);
172
+ }
173
+
174
+ @Override
175
+ @ReactProp(name = "injectedJavaScriptForMainFrameOnly")
176
+ public void setInjectedJavaScriptForMainFrameOnly(RNCWebViewWrapper view, boolean value) {
177
+ mRNCWebViewManagerImpl.setInjectedJavaScriptForMainFrameOnly(view, value);
178
+
179
+ }
180
+
181
+ @Override
182
+ @ReactProp(name = "injectedJavaScriptBeforeContentLoadedForMainFrameOnly")
183
+ public void setInjectedJavaScriptBeforeContentLoadedForMainFrameOnly(RNCWebViewWrapper view, boolean value) {
184
+ mRNCWebViewManagerImpl.setInjectedJavaScriptBeforeContentLoadedForMainFrameOnly(view, value);
185
+
186
+ }
187
+
188
+ @ReactProp(name = "injectedJavaScriptObject")
189
+ public void setInjectedJavaScriptObject(RNCWebViewWrapper view, @Nullable String value) {
190
+ mRNCWebViewManagerImpl.setInjectedJavaScriptObject(view, value);
191
+ }
192
+
193
+ @Override
194
+ @ReactProp(name = "javaScriptCanOpenWindowsAutomatically")
195
+ public void setJavaScriptCanOpenWindowsAutomatically(RNCWebViewWrapper view, boolean value) {
196
+ mRNCWebViewManagerImpl.setJavaScriptCanOpenWindowsAutomatically(view, value);
197
+ }
198
+
199
+ @ReactProp(name = "javaScriptEnabled")
200
+ public void setJavaScriptEnabled(RNCWebViewWrapper view, boolean enabled) {
201
+ mRNCWebViewManagerImpl.setJavaScriptEnabled(view, enabled);
202
+ }
203
+
204
+ @Override
205
+ @ReactProp(name = "lackPermissionToDownloadMessage")
206
+ public void setLackPermissionToDownloadMessage(RNCWebViewWrapper view, @Nullable String value) {
207
+ mRNCWebViewManagerImpl.setLackPermissionToDownloadMessage(value);
208
+ }
209
+
210
+ @Override
211
+ @ReactProp(name = "hasOnOpenWindowEvent")
212
+ public void setHasOnOpenWindowEvent(RNCWebViewWrapper view, boolean hasEvent) {
213
+ mRNCWebViewManagerImpl.setHasOnOpenWindowEvent(view, hasEvent);
214
+ }
215
+
216
+ @Override
217
+ @ReactProp(name = "mediaPlaybackRequiresUserAction")
218
+ public void setMediaPlaybackRequiresUserAction(RNCWebViewWrapper view, boolean value) {
219
+ mRNCWebViewManagerImpl.setMediaPlaybackRequiresUserAction(view, value);
220
+ }
221
+
222
+ @Override
223
+ @ReactProp(name = "menuItems")
224
+ public void setMenuItems(RNCWebViewWrapper view, @Nullable ReadableArray items) {
225
+ mRNCWebViewManagerImpl.setMenuCustomItems(view, items);
226
+ }
227
+
228
+ @Override
229
+ @ReactProp(name = "suppressMenuItems ")
230
+ public void setSuppressMenuItems(RNCWebViewWrapper view, @Nullable ReadableArray items) {}
231
+
232
+ @Override
233
+ @ReactProp(name = "messagingEnabled")
234
+ public void setMessagingEnabled(RNCWebViewWrapper view, boolean value) {
235
+ mRNCWebViewManagerImpl.setMessagingEnabled(view, value);
236
+ }
237
+
238
+ @Override
239
+ @ReactProp(name = "messagingModuleName")
240
+ public void setMessagingModuleName(RNCWebViewWrapper view, @Nullable String value) {
241
+ mRNCWebViewManagerImpl.setMessagingModuleName(view, value);
242
+ }
243
+
244
+ @Override
245
+ @ReactProp(name = "minimumFontSize")
246
+ public void setMinimumFontSize(RNCWebViewWrapper view, int value) {
247
+ mRNCWebViewManagerImpl.setMinimumFontSize(view, value);
248
+ }
249
+
250
+ @Override
251
+ @ReactProp(name = "mixedContentMode")
252
+ public void setMixedContentMode(RNCWebViewWrapper view, @Nullable String value) {
253
+ mRNCWebViewManagerImpl.setMixedContentMode(view, value);
254
+ }
255
+
256
+ @Override
257
+ @ReactProp(name = "nestedScrollEnabled")
258
+ public void setNestedScrollEnabled(RNCWebViewWrapper view, boolean value) {
259
+ mRNCWebViewManagerImpl.setNestedScrollEnabled(view, value);
260
+ }
261
+
262
+ @Override
263
+ @ReactProp(name = "overScrollMode")
264
+ public void setOverScrollMode(RNCWebViewWrapper view, @Nullable String value) {
265
+ mRNCWebViewManagerImpl.setOverScrollMode(view, value);
266
+ }
267
+
268
+ @Override
269
+ @ReactProp(name = "saveFormDataDisabled")
270
+ public void setSaveFormDataDisabled(RNCWebViewWrapper view, boolean value) {
271
+ mRNCWebViewManagerImpl.setSaveFormDataDisabled(view, value);
272
+ }
273
+
274
+ @Override
275
+ @ReactProp(name = "scalesPageToFit")
276
+ public void setScalesPageToFit(RNCWebViewWrapper view, boolean value) {
277
+ mRNCWebViewManagerImpl.setScalesPageToFit(view, value);
278
+ }
279
+
280
+ @Override
281
+ @ReactProp(name = "setBuiltInZoomControls")
282
+ public void setSetBuiltInZoomControls(RNCWebViewWrapper view, boolean value) {
283
+ mRNCWebViewManagerImpl.setSetBuiltInZoomControls(view, value);
284
+ }
285
+
286
+ @Override
287
+ @ReactProp(name = "setDisplayZoomControls")
288
+ public void setSetDisplayZoomControls(RNCWebViewWrapper view, boolean value) {
289
+ mRNCWebViewManagerImpl.setSetDisplayZoomControls(view, value);
290
+ }
291
+
292
+ @Override
293
+ @ReactProp(name = "setSupportMultipleWindows")
294
+ public void setSetSupportMultipleWindows(RNCWebViewWrapper view, boolean value) {
295
+ mRNCWebViewManagerImpl.setSetSupportMultipleWindows(view, value);
296
+ }
297
+
298
+ @Override
299
+ @ReactProp(name = "showsHorizontalScrollIndicator")
300
+ public void setShowsHorizontalScrollIndicator(RNCWebViewWrapper view, boolean value) {
301
+ mRNCWebViewManagerImpl.setShowsHorizontalScrollIndicator(view, value);
302
+ }
303
+
304
+ @Override
305
+ @ReactProp(name = "showsVerticalScrollIndicator")
306
+ public void setShowsVerticalScrollIndicator(RNCWebViewWrapper view, boolean value) {
307
+ mRNCWebViewManagerImpl.setShowsVerticalScrollIndicator(view, value);
308
+ }
309
+
310
+ @Override
311
+ @ReactProp(name = "newSource")
312
+ public void setNewSource(RNCWebViewWrapper view, @Nullable ReadableMap value) {
313
+ mRNCWebViewManagerImpl.setSource(view, value);
314
+ }
315
+
316
+ @Override
317
+ @ReactProp(name = "textZoom")
318
+ public void setTextZoom(RNCWebViewWrapper view, int value) {
319
+ mRNCWebViewManagerImpl.setTextZoom(view, value);
320
+ }
321
+
322
+ @Override
323
+ @ReactProp(name = "thirdPartyCookiesEnabled")
324
+ public void setThirdPartyCookiesEnabled(RNCWebViewWrapper view, boolean value) {
325
+ mRNCWebViewManagerImpl.setThirdPartyCookiesEnabled(view, value);
326
+ }
327
+
328
+ @Override
329
+ @ReactProp(name = "webviewDebuggingEnabled")
330
+ public void setWebviewDebuggingEnabled(RNCWebViewWrapper view, boolean value) {
331
+ mRNCWebViewManagerImpl.setWebviewDebuggingEnabled(view, value);
332
+ }
333
+
334
+ /* iOS PROPS - no implemented here */
335
+ @Override
336
+ public void setAllowingReadAccessToURL(RNCWebViewWrapper view, @Nullable String value) {}
337
+
338
+ @Override
339
+ public void setAllowsBackForwardNavigationGestures(RNCWebViewWrapper view, boolean value) {}
340
+
341
+ @Override
342
+ public void setAllowsInlineMediaPlayback(RNCWebViewWrapper view, boolean value) {}
343
+
344
+ @Override
345
+ public void setAllowsPictureInPictureMediaPlayback(RNCWebViewWrapper view, boolean value) {}
346
+
347
+ @Override
348
+ public void setAllowsAirPlayForMediaPlayback(RNCWebViewWrapper view, boolean value) {}
349
+
350
+ @Override
351
+ public void setAllowsLinkPreview(RNCWebViewWrapper view, boolean value) {}
352
+
353
+ @Override
354
+ public void setAutomaticallyAdjustContentInsets(RNCWebViewWrapper view, boolean value) {}
355
+
356
+ @Override
357
+ public void setAutoManageStatusBarEnabled(RNCWebViewWrapper view, boolean value) {}
358
+
359
+ @Override
360
+ public void setBounces(RNCWebViewWrapper view, boolean value) {}
361
+
362
+ @Override
363
+ public void setContentInset(RNCWebViewWrapper view, @Nullable ReadableMap value) {}
364
+
365
+ @Override
366
+ public void setContentInsetAdjustmentBehavior(RNCWebViewWrapper view, @Nullable String value) {}
367
+
368
+ @Override
369
+ public void setContentMode(RNCWebViewWrapper view, @Nullable String value) {}
370
+
371
+ @Override
372
+ public void setDataDetectorTypes(RNCWebViewWrapper view, @Nullable ReadableArray value) {}
373
+
374
+ @Override
375
+ public void setDecelerationRate(RNCWebViewWrapper view, double value) {}
376
+
377
+ @Override
378
+ public void setDirectionalLockEnabled(RNCWebViewWrapper view, boolean value) {}
379
+
380
+ @Override
381
+ public void setEnableApplePay(RNCWebViewWrapper view, boolean value) {}
382
+
383
+ @Override
384
+ public void setHideKeyboardAccessoryView(RNCWebViewWrapper view, boolean value) {}
385
+
386
+ @Override
387
+ public void setKeyboardDisplayRequiresUserAction(RNCWebViewWrapper view, boolean value) {}
388
+
389
+ @Override
390
+ public void setPagingEnabled(RNCWebViewWrapper view, boolean value) {}
391
+
392
+ @Override
393
+ public void setPullToRefreshEnabled(RNCWebViewWrapper view, boolean value) {}
394
+
395
+ @Override
396
+ public void setRefreshControlLightMode(RNCWebViewWrapper view, boolean value) {}
397
+
398
+ @Override
399
+ public void setScrollEnabled(RNCWebViewWrapper view, boolean value) {}
400
+
401
+ @Override
402
+ public void setSharedCookiesEnabled(RNCWebViewWrapper view, boolean value) {}
403
+
404
+ @Override
405
+ public void setUseSharedProcessPool(RNCWebViewWrapper view, boolean value) {}
406
+
407
+ @Override
408
+ public void setLimitsNavigationsToAppBoundDomains(RNCWebViewWrapper view, boolean value) {}
409
+
410
+ @Override
411
+ public void setTextInteractionEnabled(RNCWebViewWrapper view, boolean value) {}
412
+
413
+ @Override
414
+ public void setHasOnFileDownload(RNCWebViewWrapper view, boolean value) {}
415
+
416
+ @Override
417
+ public void setMediaCapturePermissionGrantType(RNCWebViewWrapper view, @Nullable String value) {}
418
+
419
+ @Override
420
+ public void setFraudulentWebsiteWarningEnabled(RNCWebViewWrapper view, boolean value) {}
421
+ /* !iOS PROPS - no implemented here */
422
+
423
+ @Override
424
+ @ReactProp(name = "userAgent")
425
+ public void setUserAgent(RNCWebViewWrapper view, @Nullable String value) {
426
+ mRNCWebViewManagerImpl.setUserAgent(view, value);
427
+ }
428
+
429
+ @Override
430
+ public void goBack(RNCWebViewWrapper view) {
431
+ view.getWebView().goBack();
432
+ }
433
+
434
+ @Override
435
+ public void goForward(RNCWebViewWrapper view) {
436
+ view.getWebView().goForward();
437
+ }
438
+
439
+ @Override
440
+ public void reload(RNCWebViewWrapper view) {
441
+ view.getWebView().reload();
442
+ }
443
+
444
+ @Override
445
+ public void stopLoading(RNCWebViewWrapper view) {
446
+ view.getWebView().stopLoading();
447
+ }
448
+
449
+ @Override
450
+ public void injectJavaScript(RNCWebViewWrapper view, String javascript) {
451
+ view.getWebView().evaluateJavascriptWithFallback(javascript);
452
+ }
453
+
454
+ @Override
455
+ public void requestFocus(RNCWebViewWrapper view) {
456
+ view.requestFocus();
457
+ }
458
+
459
+ @Override
460
+ public void postMessage(RNCWebViewWrapper view, String data) {
461
+ try {
462
+ JSONObject eventInitDict = new JSONObject();
463
+ eventInitDict.put("data", data);
464
+ view.getWebView().evaluateJavascriptWithFallback(
465
+ "(function () {" +
466
+ "var event;" +
467
+ "var data = " + eventInitDict.toString() + ";" +
468
+ "try {" +
469
+ "event = new MessageEvent('message', data);" +
470
+ "} catch (e) {" +
471
+ "event = document.createEvent('MessageEvent');" +
472
+ "event.initMessageEvent('message', true, true, data.data, data.origin, data.lastEventId, data.source);" +
473
+ "}" +
474
+ "document.dispatchEvent(event);" +
475
+ "})();"
476
+ );
477
+ } catch (JSONException e) {
478
+ throw new RuntimeException(e);
479
+ }
480
+ }
481
+
482
+ @Override
483
+ public void loadUrl(RNCWebViewWrapper view, String url) {
484
+ view.getWebView().loadUrl(url);
485
+ }
486
+
487
+ @Override
488
+ public void clearFormData(RNCWebViewWrapper view) {
489
+ view.getWebView().clearFormData();
490
+ }
491
+
492
+ @Override
493
+ public void clearCache(RNCWebViewWrapper view, boolean includeDiskFiles) {
494
+ view.getWebView().clearCache(includeDiskFiles);
495
+ }
496
+
497
+ @Override
498
+ public void clearHistory(RNCWebViewWrapper view) {
499
+ view.getWebView().clearHistory();
500
+ }
501
+
502
+ @Override
503
+ protected void addEventEmitters(@NonNull ThemedReactContext reactContext, RNCWebViewWrapper view) {
504
+ // Do not register default touch emitter and let WebView implementation handle touches
505
+ view.getWebView().setWebViewClient(new RNCWebViewClient());
506
+ }
507
+
508
+ @Override
509
+ public Map<String, Object> getExportedCustomDirectEventTypeConstants() {
510
+ Map<String, Object> export = super.getExportedCustomDirectEventTypeConstants();
511
+ if (export == null) {
512
+ export = MapBuilder.newHashMap();
513
+ }
514
+ // Default events but adding them here explicitly for clarity
515
+ export.put(TopLoadingStartEvent.EVENT_NAME, MapBuilder.of("registrationName", "onLoadingStart"));
516
+ export.put(TopLoadingFinishEvent.EVENT_NAME, MapBuilder.of("registrationName", "onLoadingFinish"));
517
+ export.put(TopLoadingErrorEvent.EVENT_NAME, MapBuilder.of("registrationName", "onLoadingError"));
518
+ export.put(TopMessageEvent.EVENT_NAME, MapBuilder.of("registrationName", "onMessage"));
519
+ // !Default events but adding them here explicitly for clarity
520
+
521
+ export.put(TopLoadingProgressEvent.EVENT_NAME, MapBuilder.of("registrationName", "onLoadingProgress"));
522
+ export.put(TopShouldStartLoadWithRequestEvent.EVENT_NAME, MapBuilder.of("registrationName", "onShouldStartLoadWithRequest"));
523
+ export.put(ScrollEventType.getJSEventName(ScrollEventType.SCROLL), MapBuilder.of("registrationName", "onScroll"));
524
+ export.put(TopHttpErrorEvent.EVENT_NAME, MapBuilder.of("registrationName", "onHttpError"));
525
+ export.put(TopRenderProcessGoneEvent.EVENT_NAME, MapBuilder.of("registrationName", "onRenderProcessGone"));
526
+ export.put(TopCustomMenuSelectionEvent.EVENT_NAME, MapBuilder.of("registrationName", "onCustomMenuSelection"));
527
+ export.put(TopOpenWindowEvent.EVENT_NAME, MapBuilder.of("registrationName", "onOpenWindow"));
528
+ return export;
529
+ }
530
+
531
+ @Override
532
+ public @Nullable
533
+ Map<String, Integer> getCommandsMap() {
534
+ return mRNCWebViewManagerImpl.getCommandsMap();
535
+ }
536
+
537
+ @Override
538
+ public void receiveCommand(@NonNull RNCWebViewWrapper reactWebView, String commandId, @Nullable ReadableArray args) {
539
+ super.receiveCommand(reactWebView, commandId, args);
540
+ }
541
+
542
+ @Override
543
+ protected void onAfterUpdateTransaction(@NonNull RNCWebViewWrapper view) {
544
+ super.onAfterUpdateTransaction(view);
545
+ mRNCWebViewManagerImpl.onAfterUpdateTransaction(view);
546
+ }
547
+
548
+ @Override
549
+ public void onDropViewInstance(@NonNull RNCWebViewWrapper view) {
550
+ mRNCWebViewManagerImpl.onDropViewInstance(view);
551
+ super.onDropViewInstance(view);
552
+ }
553
+ }
@@ -0,0 +1,63 @@
1
+ package com.reactnativecommunity.webview;
2
+
3
+ import android.app.DownloadManager;
4
+ import android.net.Uri;
5
+ import android.webkit.ValueCallback;
6
+
7
+ import androidx.annotation.NonNull;
8
+
9
+ import com.facebook.react.bridge.Promise;
10
+ import com.facebook.react.bridge.ReactApplicationContext;
11
+ import com.facebook.react.module.annotations.ReactModule;
12
+
13
+ @ReactModule(name = RNCWebViewModuleImpl.NAME)
14
+ public class RNCWebViewModule extends NativeRNCWebViewModuleSpec {
15
+ final private RNCWebViewModuleImpl mRNCWebViewModuleImpl;
16
+
17
+ public RNCWebViewModule(ReactApplicationContext reactContext) {
18
+ super(reactContext);
19
+ mRNCWebViewModuleImpl = new RNCWebViewModuleImpl(reactContext);
20
+ }
21
+
22
+ @Override
23
+ public void isFileUploadSupported(final Promise promise) {
24
+ promise.resolve(mRNCWebViewModuleImpl.isFileUploadSupported());
25
+ }
26
+
27
+ @Override
28
+ public void shouldStartLoadWithLockIdentifier(boolean shouldStart, double lockIdentifier) {
29
+ mRNCWebViewModuleImpl.shouldStartLoadWithLockIdentifier(shouldStart, lockIdentifier);
30
+ }
31
+
32
+ @Override
33
+ public void addListener(String eventType) {}
34
+
35
+ @Override
36
+ public void removeListeners(double count) {}
37
+
38
+ public void startPhotoPickerIntent(ValueCallback<Uri> filePathCallback, String acceptType) {
39
+ mRNCWebViewModuleImpl.startPhotoPickerIntent(acceptType, filePathCallback);
40
+ }
41
+
42
+ public boolean startPhotoPickerIntent(final ValueCallback<Uri[]> callback, final String[] acceptTypes, final boolean allowMultiple, final boolean isCaptureEnabled) {
43
+ return mRNCWebViewModuleImpl.startPhotoPickerIntent(acceptTypes, allowMultiple, callback, isCaptureEnabled);
44
+ }
45
+
46
+ public void setDownloadRequest(DownloadManager.Request request) {
47
+ mRNCWebViewModuleImpl.setDownloadRequest(request);
48
+ }
49
+
50
+ public void downloadFile(String downloadingMessage) {
51
+ mRNCWebViewModuleImpl.downloadFile(downloadingMessage);
52
+ }
53
+
54
+ public boolean grantFileDownloaderPermissions(String downloadingMessage, String lackPermissionToDownloadMessage) {
55
+ return mRNCWebViewModuleImpl.grantFileDownloaderPermissions(downloadingMessage, lackPermissionToDownloadMessage);
56
+ }
57
+
58
+ @NonNull
59
+ @Override
60
+ public String getName() {
61
+ return RNCWebViewModuleImpl.NAME;
62
+ }
63
+ }