react-native-webview-bootpay 11.26.20 → 13.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (342) hide show
  1. package/README.md +9 -31
  2. package/android/build.gradle +70 -112
  3. package/android/gradle.properties +5 -6
  4. package/android/src/main/java/kr/co/bootpay/webview/BPCBasicAuthCredential.java +11 -0
  5. package/android/src/main/java/kr/co/bootpay/webview/BPCWebChromeClient.java +354 -434
  6. package/android/src/main/java/kr/co/bootpay/webview/BPCWebView.java +350 -259
  7. package/android/src/main/java/kr/co/bootpay/webview/BPCWebViewClient.java +253 -399
  8. package/android/src/main/java/kr/co/bootpay/webview/{WebViewConfig.java → BPCWebViewConfig.java} +3 -4
  9. package/android/src/main/java/kr/co/bootpay/webview/BPCWebViewFileProvider.java +1 -1
  10. package/android/src/main/java/kr/co/bootpay/webview/BPCWebViewManager.java +290 -877
  11. package/android/src/main/java/kr/co/bootpay/webview/BPCWebViewManagerImpl.kt +664 -0
  12. package/android/src/main/java/kr/co/bootpay/webview/BPCWebViewModule.java +29 -520
  13. package/android/src/main/java/kr/co/bootpay/webview/BPCWebViewModuleImpl.java +554 -0
  14. package/android/src/main/java/kr/co/bootpay/webview/BPCWebViewPackage.java +56 -0
  15. package/android/src/main/java/kr/co/bootpay/webview/BootpayUrlHelper.java +122 -0
  16. package/android/src/main/java/kr/co/bootpay/webview/events/TopCustomMenuSelectionEvent.kt +24 -0
  17. package/android/src/main/java/kr/co/bootpay/webview/events/TopNewWindowEvent.kt +25 -0
  18. package/android/src/newarch/com/reactnativecommunity/webview/BPCWebViewManager.java +544 -0
  19. package/android/src/newarch/com/reactnativecommunity/webview/BPCWebViewModule.java +57 -0
  20. package/apple/BPCWebView.h +22 -126
  21. package/apple/BPCWebView.mm +528 -0
  22. package/apple/BPCWebViewDecisionManager.h +20 -0
  23. package/apple/BPCWebViewDecisionManager.m +47 -0
  24. package/apple/BPCWebViewImpl.h +150 -0
  25. package/apple/{BPCWebView.m → BPCWebViewImpl.m} +381 -214
  26. package/apple/BPCWebViewManager.h +4 -8
  27. package/apple/{BPCWebViewManager.m → BPCWebViewManager.mm} +93 -149
  28. package/{android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream → ios/.DS_Store} +0 -0
  29. package/ios/{BPCWebView.xcodeproj → RNCWebView.xcodeproj}/project.pbxproj +18 -18
  30. package/ios/main.jsbundle +457 -0
  31. package/lib/BPCWebViewNativeComponent.d.ts +242 -0
  32. package/lib/BPCWebViewNativeComponent.d.ts.map +1 -0
  33. package/lib/BPCWebViewNativeComponent.js +6 -0
  34. package/lib/NativeBPCWebView.d.ts +10 -0
  35. package/lib/NativeBPCWebView.d.ts.map +1 -0
  36. package/lib/NativeBPCWebView.js +2 -0
  37. package/lib/NativeRNCWebView.d.ts +10 -0
  38. package/lib/NativeRNCWebView.d.ts.map +1 -0
  39. package/lib/NativeRNCWebView.js +2 -0
  40. package/lib/RNCWebViewNativeComponent.d.ts +242 -0
  41. package/lib/RNCWebViewNativeComponent.d.ts.map +1 -0
  42. package/lib/RNCWebViewNativeComponent.js +6 -0
  43. package/lib/WebView.android.d.ts.map +1 -1
  44. package/lib/WebView.android.js +53 -29
  45. package/lib/WebView.ios.d.ts.map +1 -1
  46. package/lib/WebView.ios.js +49 -28
  47. package/lib/WebView.macos.d.ts.map +1 -1
  48. package/lib/WebView.macos.js +10 -14
  49. package/lib/WebView.windows.d.ts.map +1 -1
  50. package/lib/WebView.windows.js +4 -6
  51. package/lib/WebViewNativeComponent.macos.d.ts +2 -2
  52. package/lib/WebViewNativeComponent.macos.js +2 -2
  53. package/lib/WebViewShared.d.ts +4 -2
  54. package/lib/WebViewShared.d.ts.map +1 -1
  55. package/lib/WebViewShared.js +8 -2
  56. package/lib/WebViewTypes.d.ts +62 -95
  57. package/lib/WebViewTypes.d.ts.map +1 -1
  58. package/lib/WebViewTypes.js +0 -16
  59. package/macos/RNCWebView.xcodeproj/project.pbxproj +44 -44
  60. package/package.json +38 -20
  61. package/react-native-webview-bootpay.podspec +22 -3
  62. package/react-native.config.js +1 -2
  63. package/src/BPCWebViewNativeComponent.ts +281 -0
  64. package/src/NativeBPCWebView.ts +14 -0
  65. package/src/WebView.android.tsx +229 -0
  66. package/src/WebView.ios.tsx +232 -0
  67. package/src/WebView.macos.tsx +177 -0
  68. package/src/WebView.styles.ts +44 -0
  69. package/src/WebView.tsx +18 -0
  70. package/src/WebView.windows.tsx +156 -0
  71. package/src/WebViewNativeComponent.macos.ts +8 -0
  72. package/src/WebViewNativeComponent.windows.ts +10 -0
  73. package/src/WebViewShared.tsx +235 -0
  74. package/src/WebViewTypes.ts +1287 -0
  75. package/src/__tests__/WebViewShared-test.js +208 -0
  76. package/src/__tests__/__snapshots__/WebViewShared-test.js.snap +8 -0
  77. package/src/index.ts +4 -0
  78. package/windows/.gitignore +353 -0
  79. package/windows/ReactNativeWebView/ReactNativeWebView.vcxproj +1 -1
  80. package/windows/ReactNativeWebView/ReactWebView.idl +1 -0
  81. package/windows/ReactNativeWebView/ReactWebView2.cpp +142 -19
  82. package/windows/ReactNativeWebView/ReactWebView2.h +3 -0
  83. package/windows/ReactNativeWebView/ReactWebView2Manager.cpp +29 -5
  84. package/windows/ReactNativeWebView/pch.h +1 -0
  85. package/android/.editorconfig +0 -6
  86. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/results.bin +0 -1
  87. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebChromeClient$1.dex +0 -0
  88. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebChromeClient.dex +0 -0
  89. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebView$1.dex +0 -0
  90. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebView$BPCWebViewBridge.dex +0 -0
  91. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebView$ProgressChangedFilter.dex +0 -0
  92. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebView.dex +0 -0
  93. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebViewClient.dex +0 -0
  94. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebViewFileProvider.dex +0 -0
  95. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebViewManager$1.dex +0 -0
  96. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebViewManager$2.dex +0 -0
  97. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebViewManager$3.dex +0 -0
  98. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebViewManager$4.dex +0 -0
  99. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebViewManager.dex +0 -0
  100. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebViewModule$1.dex +0 -0
  101. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebViewModule$2.dex +0 -0
  102. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebViewModule$MimeType.dex +0 -0
  103. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebViewModule$ShouldOverrideUrlLoadingLock$ShouldOverrideCallbackState.dex +0 -0
  104. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebViewModule$ShouldOverrideUrlLoadingLock.dex +0 -0
  105. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebViewModule.dex +0 -0
  106. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebViewPackage.dex +0 -0
  107. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BasicAuthCredential.dex +0 -0
  108. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BuildConfig.dex +0 -0
  109. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/URLUtil.dex +0 -0
  110. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/WebViewConfig.dex +0 -0
  111. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/events/TopHttpErrorEvent$Companion.dex +0 -0
  112. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/events/TopHttpErrorEvent.dex +0 -0
  113. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/events/TopLoadingErrorEvent$Companion.dex +0 -0
  114. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/events/TopLoadingErrorEvent.dex +0 -0
  115. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/events/TopLoadingFinishEvent$Companion.dex +0 -0
  116. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/events/TopLoadingFinishEvent.dex +0 -0
  117. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/events/TopLoadingProgressEvent$Companion.dex +0 -0
  118. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/events/TopLoadingProgressEvent.dex +0 -0
  119. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/events/TopLoadingStartEvent$Companion.dex +0 -0
  120. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/events/TopLoadingStartEvent.dex +0 -0
  121. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/events/TopMessageEvent$Companion.dex +0 -0
  122. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/events/TopMessageEvent.dex +0 -0
  123. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/events/TopRenderProcessGoneEvent$Companion.dex +0 -0
  124. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/events/TopRenderProcessGoneEvent.dex +0 -0
  125. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/events/TopShouldStartLoadWithRequestEvent$Companion.dex +0 -0
  126. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/events/TopShouldStartLoadWithRequestEvent.dex +0 -0
  127. package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/desugar_graph.bin +0 -0
  128. package/android/build/.transforms/88c49d67076e4458a9ddee82f875eb6a/results.bin +0 -1
  129. package/android/build/.transforms/88c49d67076e4458a9ddee82f875eb6a/transformed/classes/classes.dex +0 -0
  130. package/android/build/.transforms/c0e86b44db04fcaf424a5b7ce79324f4/results.bin +0 -1
  131. package/android/build/generated/source/buildConfig/debug/kr/co/bootpay/webview/BuildConfig.java +0 -10
  132. package/android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/AndroidManifest.xml +0 -106
  133. package/android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/output-metadata.json +0 -18
  134. package/android/build/intermediates/aar_metadata/debug/aar-metadata.properties +0 -4
  135. package/android/build/intermediates/annotation_processor_list/debug/annotationProcessors.json +0 -1
  136. package/android/build/intermediates/compile_library_classes_jar/debug/classes.jar +0 -0
  137. package/android/build/intermediates/compile_r_class_jar/debug/R.jar +0 -0
  138. package/android/build/intermediates/compile_symbol_list/debug/R.txt +0 -1861
  139. package/android/build/intermediates/compiled_local_resources/debug/out/xml_file_provider_paths.xml.flat +0 -0
  140. package/android/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties +0 -2
  141. package/android/build/intermediates/incremental/debug/packageDebugResources/merger.xml +0 -2
  142. package/android/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml +0 -2
  143. package/android/build/intermediates/incremental/mergeDebugShaders/merger.xml +0 -2
  144. package/android/build/intermediates/incremental/packageDebugAssets/merger.xml +0 -2
  145. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebChromeClient$1.class +0 -0
  146. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebChromeClient.class +0 -0
  147. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebView$1.class +0 -0
  148. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebView$BPCWebViewBridge.class +0 -0
  149. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebView$ProgressChangedFilter.class +0 -0
  150. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebView.class +0 -0
  151. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewClient.class +0 -0
  152. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewFileProvider.class +0 -0
  153. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewManager$1.class +0 -0
  154. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewManager$2.class +0 -0
  155. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewManager$3.class +0 -0
  156. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewManager$4.class +0 -0
  157. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewManager.class +0 -0
  158. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewModule$1.class +0 -0
  159. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewModule$2.class +0 -0
  160. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewModule$MimeType.class +0 -0
  161. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewModule$ShouldOverrideUrlLoadingLock$ShouldOverrideCallbackState.class +0 -0
  162. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewModule$ShouldOverrideUrlLoadingLock.class +0 -0
  163. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewModule.class +0 -0
  164. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BasicAuthCredential.class +0 -0
  165. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BuildConfig.class +0 -0
  166. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/URLUtil.class +0 -0
  167. package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/WebViewConfig.class +0 -0
  168. package/android/build/intermediates/library_java_res/debug/res.jar +0 -0
  169. package/android/build/intermediates/local_only_symbol_list/debug/R-def.txt +0 -3
  170. package/android/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt +0 -210
  171. package/android/build/intermediates/merged_manifest/debug/AndroidManifest.xml +0 -106
  172. package/android/build/intermediates/navigation_json/debug/navigation.json +0 -1
  173. package/android/build/intermediates/packaged_manifests/debug/output-metadata.json +0 -18
  174. package/android/build/intermediates/packaged_res/debug/xml/file_provider_paths.xml +0 -6
  175. package/android/build/intermediates/runtime_library_classes_dir/debug/META-INF/react-native-webview-bootpay_debug.kotlin_module +0 -0
  176. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebChromeClient$1.class +0 -0
  177. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebChromeClient.class +0 -0
  178. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebView$1.class +0 -0
  179. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebView$BPCWebViewBridge.class +0 -0
  180. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebView$ProgressChangedFilter.class +0 -0
  181. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebView.class +0 -0
  182. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebViewClient.class +0 -0
  183. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebViewFileProvider.class +0 -0
  184. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebViewManager$1.class +0 -0
  185. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebViewManager$2.class +0 -0
  186. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebViewManager$3.class +0 -0
  187. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebViewManager$4.class +0 -0
  188. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebViewManager.class +0 -0
  189. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebViewModule$1.class +0 -0
  190. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebViewModule$2.class +0 -0
  191. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebViewModule$MimeType.class +0 -0
  192. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebViewModule$ShouldOverrideUrlLoadingLock$ShouldOverrideCallbackState.class +0 -0
  193. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebViewModule$ShouldOverrideUrlLoadingLock.class +0 -0
  194. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebViewModule.class +0 -0
  195. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebViewPackage.class +0 -0
  196. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BasicAuthCredential.class +0 -0
  197. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BuildConfig.class +0 -0
  198. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/URLUtil.class +0 -0
  199. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/WebViewConfig.class +0 -0
  200. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/events/TopHttpErrorEvent$Companion.class +0 -0
  201. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/events/TopHttpErrorEvent.class +0 -0
  202. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/events/TopLoadingErrorEvent$Companion.class +0 -0
  203. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/events/TopLoadingErrorEvent.class +0 -0
  204. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/events/TopLoadingFinishEvent$Companion.class +0 -0
  205. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/events/TopLoadingFinishEvent.class +0 -0
  206. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/events/TopLoadingProgressEvent$Companion.class +0 -0
  207. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/events/TopLoadingProgressEvent.class +0 -0
  208. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/events/TopLoadingStartEvent$Companion.class +0 -0
  209. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/events/TopLoadingStartEvent.class +0 -0
  210. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/events/TopMessageEvent$Companion.class +0 -0
  211. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/events/TopMessageEvent.class +0 -0
  212. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/events/TopRenderProcessGoneEvent$Companion.class +0 -0
  213. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/events/TopRenderProcessGoneEvent.class +0 -0
  214. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/events/TopShouldStartLoadWithRequestEvent$Companion.class +0 -0
  215. package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/events/TopShouldStartLoadWithRequestEvent.class +0 -0
  216. package/android/build/intermediates/runtime_library_classes_jar/debug/classes.jar +0 -0
  217. package/android/build/intermediates/symbol_list_with_package_name/debug/package-aware-r.txt +0 -1381
  218. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab +0 -0
  219. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream +0 -0
  220. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream.len +0 -0
  221. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.len +0 -0
  222. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at +0 -0
  223. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i +0 -0
  224. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i.len +0 -0
  225. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab +0 -0
  226. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream +0 -0
  227. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len +0 -0
  228. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.len +0 -0
  229. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at +0 -0
  230. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i +0 -0
  231. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i.len +0 -0
  232. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab +0 -0
  233. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream +0 -0
  234. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len +0 -0
  235. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len +0 -0
  236. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at +0 -0
  237. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i +0 -0
  238. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len +0 -0
  239. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab +0 -0
  240. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.keystream +0 -0
  241. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.keystream.len +0 -0
  242. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.len +0 -0
  243. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.values.at +0 -0
  244. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab_i +0 -0
  245. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab_i.len +0 -0
  246. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab +0 -0
  247. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream +0 -0
  248. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len +0 -0
  249. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len +0 -0
  250. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at +0 -0
  251. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i +0 -0
  252. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len +0 -0
  253. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/java-sources-proto-map.tab +0 -0
  254. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/java-sources-proto-map.tab.keystream +0 -0
  255. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/java-sources-proto-map.tab.keystream.len +0 -0
  256. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/java-sources-proto-map.tab.len +0 -0
  257. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/java-sources-proto-map.tab.values.at +0 -0
  258. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/java-sources-proto-map.tab_i +0 -0
  259. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/java-sources-proto-map.tab_i.len +0 -0
  260. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab +0 -0
  261. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream +0 -0
  262. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len +0 -0
  263. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len +0 -0
  264. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at +0 -0
  265. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i +0 -0
  266. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i.len +0 -0
  267. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab +0 -0
  268. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream +0 -0
  269. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len +0 -0
  270. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.len +0 -0
  271. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at +0 -0
  272. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i +0 -0
  273. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len +0 -0
  274. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab +0 -0
  275. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream +0 -0
  276. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream.len +0 -0
  277. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.len +0 -0
  278. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.values.at +0 -0
  279. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i +0 -0
  280. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i.len +0 -0
  281. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab +0 -0
  282. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream +0 -0
  283. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream.len +0 -0
  284. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.len +0 -0
  285. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.values.at +0 -0
  286. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i +0 -0
  287. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i.len +0 -0
  288. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/counters.tab +0 -2
  289. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab +0 -0
  290. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream +0 -0
  291. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream.len +0 -0
  292. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.len +0 -0
  293. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at +0 -0
  294. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i +0 -0
  295. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i.len +0 -0
  296. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab +0 -0
  297. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len +0 -0
  298. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len +0 -0
  299. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at +0 -0
  300. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i +0 -0
  301. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i.len +0 -0
  302. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab +0 -0
  303. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream +0 -0
  304. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len +0 -0
  305. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.len +0 -0
  306. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at +0 -0
  307. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab_i +0 -0
  308. package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab_i.len +0 -0
  309. package/android/build/kotlin/compileDebugKotlin/cacheable/last-build.bin +0 -0
  310. package/android/build/kotlin/compileDebugKotlin/local-state/build-history.bin +0 -0
  311. package/android/build/outputs/logs/manifest-merger-debug-report.txt +0 -229
  312. package/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin +0 -0
  313. package/android/build/tmp/kotlin-classes/debug/META-INF/react-native-webview-bootpay_debug.kotlin_module +0 -0
  314. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/BPCWebViewPackage.class +0 -0
  315. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopHttpErrorEvent$Companion.class +0 -0
  316. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopHttpErrorEvent.class +0 -0
  317. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopLoadingErrorEvent$Companion.class +0 -0
  318. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopLoadingErrorEvent.class +0 -0
  319. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopLoadingFinishEvent$Companion.class +0 -0
  320. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopLoadingFinishEvent.class +0 -0
  321. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopLoadingProgressEvent$Companion.class +0 -0
  322. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopLoadingProgressEvent.class +0 -0
  323. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopLoadingStartEvent$Companion.class +0 -0
  324. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopLoadingStartEvent.class +0 -0
  325. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopMessageEvent$Companion.class +0 -0
  326. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopMessageEvent.class +0 -0
  327. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopRenderProcessGoneEvent$Companion.class +0 -0
  328. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopRenderProcessGoneEvent.class +0 -0
  329. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopShouldStartLoadWithRequestEvent$Companion.class +0 -0
  330. package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopShouldStartLoadWithRequestEvent.class +0 -0
  331. package/android/src/main/java/kr/co/bootpay/webview/BPCWebViewPackage.kt +0 -15
  332. package/android/src/main/java/kr/co/bootpay/webview/BasicAuthCredential.java +0 -11
  333. package/ios/BPCWebView.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
  334. package/ios/BPCWebView.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
  335. package/ios/BPCWebView.xcodeproj/project.xcworkspace/xcuserdata/ehowlsla.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  336. package/ios/BPCWebView.xcodeproj/xcuserdata/ehowlsla.xcuserdatad/xcschemes/xcschememanagement.plist +0 -14
  337. package/lib/WebViewNativeComponent.android.d.ts +0 -4
  338. package/lib/WebViewNativeComponent.android.d.ts.map +0 -1
  339. package/lib/WebViewNativeComponent.android.js +0 -3
  340. package/lib/WebViewNativeComponent.ios.d.ts +0 -4
  341. package/lib/WebViewNativeComponent.ios.d.ts.map +0 -1
  342. package/lib/WebViewNativeComponent.ios.js +0 -3
@@ -1,910 +1,323 @@
1
1
  package kr.co.bootpay.webview;
2
2
 
3
- import android.annotation.SuppressLint;
4
- import android.annotation.TargetApi;
5
- import android.app.Activity;
6
- import android.app.DownloadManager;
7
- import android.content.Context;
8
- import android.content.pm.ActivityInfo;
9
- import android.content.pm.PackageManager;
10
- import android.graphics.Bitmap;
11
- import android.graphics.Color;
12
- import android.Manifest;
13
- import android.net.http.SslError;
14
- import android.net.Uri;
15
- import android.os.Build;
16
- import android.os.Environment;
17
- import android.os.Message;
18
- import android.os.SystemClock;
19
- import android.text.TextUtils;
20
- import android.util.Log;
21
- import android.view.Gravity;
22
- import android.view.MotionEvent;
23
- import android.view.View;
24
- import android.view.ViewGroup;
25
- import android.view.ViewGroup.LayoutParams;
26
- import android.view.WindowManager;
27
- import android.webkit.ConsoleMessage;
28
- import android.webkit.CookieManager;
29
- import android.webkit.DownloadListener;
30
- import android.webkit.GeolocationPermissions;
31
- import android.webkit.HttpAuthHandler;
32
- import android.webkit.JavascriptInterface;
33
- import android.webkit.RenderProcessGoneDetail;
34
- import android.webkit.SslErrorHandler;
35
- import android.webkit.PermissionRequest;
36
- import android.webkit.ValueCallback;
37
- import android.webkit.WebChromeClient;
38
- import android.webkit.WebResourceRequest;
39
- import android.webkit.WebResourceResponse;
40
- import android.webkit.WebSettings;
41
- import android.webkit.WebView;
42
- import android.webkit.WebViewClient;
43
- import android.widget.FrameLayout;
44
-
45
3
  import androidx.annotation.NonNull;
46
4
  import androidx.annotation.Nullable;
47
- import androidx.annotation.RequiresApi;
48
- import androidx.core.content.ContextCompat;
49
- import androidx.core.util.Pair;
50
- import androidx.webkit.WebSettingsCompat;
51
- import androidx.webkit.WebViewFeature;
52
-
53
- import com.facebook.common.logging.FLog;
54
- import com.facebook.react.modules.core.PermissionAwareActivity;
55
- import com.facebook.react.modules.core.PermissionListener;
56
- import com.facebook.react.views.scroll.ScrollEvent;
57
- import com.facebook.react.views.scroll.ScrollEventType;
58
- import com.facebook.react.views.scroll.OnScrollDispatchHelper;
59
- import com.facebook.react.bridge.Arguments;
60
- import com.facebook.react.bridge.CatalystInstance;
61
- import com.facebook.react.bridge.LifecycleEventListener;
62
- import com.facebook.react.bridge.ReactContext;
5
+
63
6
  import com.facebook.react.bridge.ReadableArray;
64
7
  import com.facebook.react.bridge.ReadableMap;
65
- import com.facebook.react.bridge.ReadableMapKeySetIterator;
66
- import com.facebook.react.bridge.WritableMap;
67
- import com.facebook.react.bridge.WritableNativeArray;
68
- import com.facebook.react.bridge.WritableNativeMap;
69
8
  import com.facebook.react.common.MapBuilder;
70
- import com.facebook.react.common.build.ReactBuildConfig;
71
- import com.facebook.react.module.annotations.ReactModule;
72
9
  import com.facebook.react.uimanager.SimpleViewManager;
73
10
  import com.facebook.react.uimanager.ThemedReactContext;
74
- import com.facebook.react.uimanager.UIManagerModule;
75
11
  import com.facebook.react.uimanager.annotations.ReactProp;
76
- import com.facebook.react.uimanager.events.ContentSizeChangeEvent;
77
- import com.facebook.react.uimanager.events.Event;
78
- import com.facebook.react.uimanager.events.EventDispatcher;
79
- import kr.co.bootpay.webview.BPCWebViewModule.ShouldOverrideUrlLoadingLock.ShouldOverrideCallbackState;
80
- import kr.co.bootpay.webview.events.TopLoadingErrorEvent;
12
+ import com.facebook.react.views.scroll.ScrollEventType;
13
+
14
+ import java.util.Map;
15
+
16
+ import kr.co.bootpay.webview.events.TopCustomMenuSelectionEvent;
81
17
  import kr.co.bootpay.webview.events.TopHttpErrorEvent;
18
+ import kr.co.bootpay.webview.events.TopLoadingErrorEvent;
82
19
  import kr.co.bootpay.webview.events.TopLoadingFinishEvent;
83
20
  import kr.co.bootpay.webview.events.TopLoadingProgressEvent;
84
21
  import kr.co.bootpay.webview.events.TopLoadingStartEvent;
85
22
  import kr.co.bootpay.webview.events.TopMessageEvent;
86
- import kr.co.bootpay.webview.events.TopShouldStartLoadWithRequestEvent;
23
+ import kr.co.bootpay.webview.events.TopOpenWindowEvent;
87
24
  import kr.co.bootpay.webview.events.TopRenderProcessGoneEvent;
25
+ import kr.co.bootpay.webview.events.TopShouldStartLoadWithRequestEvent;
88
26
 
89
- import org.json.JSONException;
90
- import org.json.JSONObject;
91
-
92
- import java.io.UnsupportedEncodingException;
93
- import java.lang.IllegalArgumentException;
94
- import java.net.MalformedURLException;
95
- import java.net.URL;
96
- import java.net.URLEncoder;
97
- import java.util.ArrayList;
98
- import java.util.Collections;
99
- import java.util.HashMap;
100
- import java.util.List;
101
- import java.util.Locale;
102
- import java.util.Map;
103
- import java.util.concurrent.atomic.AtomicReference;
104
-
105
- /**
106
- * Manages instances of {@link WebView}
107
- * <p>
108
- * Can accept following commands:
109
- * - GO_BACK
110
- * - GO_FORWARD
111
- * - RELOAD
112
- * - LOAD_URL
113
- * <p>
114
- * {@link WebView} instances could emit following direct events:
115
- * - topLoadingFinish
116
- * - topLoadingStart
117
- * - topLoadingStart
118
- * - topLoadingProgress
119
- * - topShouldStartLoadWithRequest
120
- * <p>
121
- * Each event will carry the following properties:
122
- * - target - view's react tag
123
- * - url - url set for the webview
124
- * - loading - whether webview is in a loading state
125
- * - title - title of the current page
126
- * - canGoBack - boolean, whether there is anything on a history stack to go back
127
- * - canGoForward - boolean, whether it is possible to request GO_FORWARD command
128
- */
129
- @ReactModule(name = BPCWebViewManager.REACT_CLASS)
130
- public class BPCWebViewManager extends SimpleViewManager<WebView> {
131
- private static final String TAG = "BPCWebViewManager";
132
-
133
- public static final int COMMAND_GO_BACK = 1;
134
- public static final int COMMAND_GO_FORWARD = 2;
135
- public static final int COMMAND_RELOAD = 3;
136
- public static final int COMMAND_STOP_LOADING = 4;
137
- public static final int COMMAND_POST_MESSAGE = 5;
138
- public static final int COMMAND_INJECT_JAVASCRIPT = 6;
139
- public static final int COMMAND_LOAD_URL = 7;
140
- public static final int COMMAND_FOCUS = 8;
141
-
142
- // android commands
143
- public static final int COMMAND_CLEAR_FORM_DATA = 1000;
144
- public static final int COMMAND_CLEAR_CACHE = 1001;
145
- public static final int COMMAND_CLEAR_HISTORY = 1002;
146
-
147
- protected static final String REACT_CLASS = "BPCWebView";
148
- protected static final String HTML_ENCODING = "UTF-8";
149
- protected static final String HTML_MIME_TYPE = "text/html";
150
- // protected static final String JAVASCRIPT_INTERFACE = "ReactNativeWebView";
151
- protected static final String HTTP_METHOD_POST = "POST";
152
- // Use `webView.loadUrl("about:blank")` to reliably reset the view
153
- // state and release page resources (including any running JavaScript).
154
- protected static final String BLANK_URL = "about:blank";
155
- protected static final int SHOULD_OVERRIDE_URL_LOADING_TIMEOUT = 250;
156
- protected static final String DEFAULT_DOWNLOADING_MESSAGE = "Downloading";
157
- protected static final String DEFAULT_LACK_PERMISSION_TO_DOWNLOAD_MESSAGE =
158
- "Cannot download files as permission was denied. Please provide permission to write to storage, in order to download files.";
159
- protected WebViewConfig mWebViewConfig;
160
-
161
- protected BPCWebChromeClient mWebChromeClient = null;
162
- protected boolean mAllowsFullscreenVideo = false;
163
- protected boolean mAllowsProtectedMedia = false;
164
- protected @Nullable String mUserAgent = null;
165
- protected @Nullable String mUserAgentWithApplicationName = null;
166
- protected @Nullable String mDownloadingMessage = null;
167
- protected @Nullable String mLackPermissionToDownloadMessage = null;
168
-
169
- public BPCWebViewManager() {
170
- mWebViewConfig = new WebViewConfig() {
171
- public void configWebView(WebView webView) {
172
- }
173
- };
174
- }
175
-
176
- public BPCWebViewManager(WebViewConfig webViewConfig) {
177
- mWebViewConfig = webViewConfig;
178
- }
179
-
180
- @Override
181
- public String getName() {
182
- return REACT_CLASS;
183
- }
184
-
185
- protected BPCWebView createBPCWebViewInstance(ThemedReactContext reactContext) {
186
- return new BPCWebView(reactContext);
187
- }
188
-
189
- @Override
190
- @TargetApi(Build.VERSION_CODES.LOLLIPOP)
191
- protected WebView createViewInstance(ThemedReactContext reactContext) {
192
- BPCWebView webView = createBPCWebViewInstance(reactContext);
193
- setupWebChromeClient(reactContext, webView);
194
- reactContext.addLifecycleEventListener(webView);
195
- mWebViewConfig.configWebView(webView);
196
- WebSettings settings = webView.getSettings();
197
- settings.setBuiltInZoomControls(true);
198
- settings.setDisplayZoomControls(false);
199
- settings.setDomStorageEnabled(true);
200
- settings.setSupportMultipleWindows(true);
201
-
202
- settings.setAllowFileAccess(false);
203
- settings.setAllowContentAccess(false);
204
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
205
- settings.setAllowFileAccessFromFileURLs(false);
206
- setAllowUniversalAccessFromFileURLs(webView, false);
207
- }
208
- setMixedContentMode(webView, "never");
209
-
210
- // Fixes broken full-screen modals/galleries due to body height being 0.
211
- webView.setLayoutParams(
212
- new LayoutParams(LayoutParams.MATCH_PARENT,
213
- LayoutParams.MATCH_PARENT));
214
-
215
- if (ReactBuildConfig.DEBUG && Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
216
- WebView.setWebContentsDebuggingEnabled(true);
217
- }
218
-
219
- webView.setDownloadListener(new DownloadListener() {
220
- public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
221
- webView.setIgnoreErrFailedForThisURL(url);
222
-
223
- BPCWebViewModule module = getModule(reactContext);
224
-
225
- DownloadManager.Request request;
226
- try {
227
- request = new DownloadManager.Request(Uri.parse(url));
228
- } catch (IllegalArgumentException e) {
229
- Log.w(TAG, "Unsupported URI, aborting download", e);
230
- return;
231
- }
27
+ public class BPCWebViewManager extends SimpleViewManager<BPCWebView> {
232
28
 
233
- String fileName = URLUtil.guessFileName(url, contentDisposition, mimetype);
234
- String downloadMessage = "Downloading " + fileName;
235
-
236
- //Attempt to add cookie, if it exists
237
- URL urlObj = null;
238
- try {
239
- urlObj = new URL(url);
240
- String baseUrl = urlObj.getProtocol() + "://" + urlObj.getHost();
241
- String cookie = CookieManager.getInstance().getCookie(baseUrl);
242
- request.addRequestHeader("Cookie", cookie);
243
- } catch (MalformedURLException e) {
244
- Log.w(TAG, "Error getting cookie for DownloadManager", e);
245
- }
29
+ private final BPCWebViewManagerImpl mBPCWebViewManagerImpl;
246
30
 
247
- //Finish setting up request
248
- request.addRequestHeader("User-Agent", userAgent);
249
- request.setTitle(fileName);
250
- request.setDescription(downloadMessage);
251
- request.allowScanningByMediaScanner();
252
- request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
253
- request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, fileName);
31
+ public BPCWebViewManager() {
32
+ mBPCWebViewManagerImpl = new BPCWebViewManagerImpl();
33
+ }
254
34
 
255
- module.setDownloadRequest(request);
35
+ @Override
36
+ public String getName() {
37
+ return BPCWebViewManagerImpl.NAME;
38
+ }
256
39
 
257
- if (module.grantFileDownloaderPermissions(getDownloadingMessage(), getLackPermissionToDownloadMessage())) {
258
- module.downloadFile(getDownloadingMessage());
259
- }
260
- }
261
- });
262
-
263
- return webView;
264
- }
265
-
266
- private String getDownloadingMessage() {
267
- return mDownloadingMessage == null ? DEFAULT_DOWNLOADING_MESSAGE : mDownloadingMessage;
268
- }
269
-
270
- private String getLackPermissionToDownloadMessage() {
271
- return mDownloadingMessage == null ? DEFAULT_LACK_PERMISSION_TO_DOWNLOAD_MESSAGE : mLackPermissionToDownloadMessage;
272
- }
273
-
274
- @ReactProp(name = "javaScriptEnabled")
275
- public void setJavaScriptEnabled(WebView view, boolean enabled) {
276
- view.getSettings().setJavaScriptEnabled(enabled);
277
- }
278
-
279
- @ReactProp(name = "setBuiltInZoomControls")
280
- public void setBuiltInZoomControls(WebView view, boolean enabled) {
281
- view.getSettings().setBuiltInZoomControls(enabled);
282
- }
283
-
284
- @ReactProp(name = "setDisplayZoomControls")
285
- public void setDisplayZoomControls(WebView view, boolean enabled) {
286
- view.getSettings().setDisplayZoomControls(enabled);
287
- }
288
-
289
- @ReactProp(name = "setSupportMultipleWindows")
290
- public void setSupportMultipleWindows(WebView view, boolean enabled){
291
- view.getSettings().setSupportMultipleWindows(enabled);
292
- }
293
-
294
- @ReactProp(name = "showsHorizontalScrollIndicator")
295
- public void setShowsHorizontalScrollIndicator(WebView view, boolean enabled) {
296
- view.setHorizontalScrollBarEnabled(enabled);
297
- }
298
-
299
- @ReactProp(name = "showsVerticalScrollIndicator")
300
- public void setShowsVerticalScrollIndicator(WebView view, boolean enabled) {
301
- view.setVerticalScrollBarEnabled(enabled);
302
- }
303
-
304
- @ReactProp(name = "downloadingMessage")
305
- public void setDownloadingMessage(WebView view, String message) {
306
- mDownloadingMessage = message;
307
- }
308
-
309
- @ReactProp(name = "lackPermissionToDownloadMessage")
310
- public void setLackPermissionToDownlaodMessage(WebView view, String message) {
311
- mLackPermissionToDownloadMessage = message;
312
- }
313
-
314
- @ReactProp(name = "cacheEnabled")
315
- public void setCacheEnabled(WebView view, boolean enabled) {
316
- view.getSettings().setCacheMode(enabled ? WebSettings.LOAD_DEFAULT : WebSettings.LOAD_NO_CACHE);
317
- }
318
-
319
- @ReactProp(name = "cacheMode")
320
- public void setCacheMode(WebView view, String cacheModeString) {
321
- Integer cacheMode;
322
- switch (cacheModeString) {
323
- case "LOAD_CACHE_ONLY":
324
- cacheMode = WebSettings.LOAD_CACHE_ONLY;
325
- break;
326
- case "LOAD_CACHE_ELSE_NETWORK":
327
- cacheMode = WebSettings.LOAD_CACHE_ELSE_NETWORK;
328
- break;
329
- case "LOAD_NO_CACHE":
330
- cacheMode = WebSettings.LOAD_NO_CACHE;
331
- break;
332
- case "LOAD_DEFAULT":
333
- default:
334
- cacheMode = WebSettings.LOAD_DEFAULT;
335
- break;
336
- }
337
- view.getSettings().setCacheMode(cacheMode);
338
- }
339
-
340
- @ReactProp(name = "androidHardwareAccelerationDisabled")
341
- public void setHardwareAccelerationDisabled(WebView view, boolean disabled) {
342
- if (disabled) {
343
- view.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
344
- }
345
- }
346
-
347
- @ReactProp(name = "androidLayerType")
348
- public void setLayerType(WebView view, String layerTypeString) {
349
- int layerType = View.LAYER_TYPE_NONE;
350
- switch (layerTypeString) {
351
- case "hardware":
352
- layerType = View.LAYER_TYPE_HARDWARE;
353
- break;
354
- case "software":
355
- layerType = View.LAYER_TYPE_SOFTWARE;
356
- break;
357
- }
358
- view.setLayerType(layerType, null);
359
- }
360
-
361
-
362
- @ReactProp(name = "overScrollMode")
363
- public void setOverScrollMode(WebView view, String overScrollModeString) {
364
- Integer overScrollMode;
365
- switch (overScrollModeString) {
366
- case "never":
367
- overScrollMode = View.OVER_SCROLL_NEVER;
368
- break;
369
- case "content":
370
- overScrollMode = View.OVER_SCROLL_IF_CONTENT_SCROLLS;
371
- break;
372
- case "always":
373
- default:
374
- overScrollMode = View.OVER_SCROLL_ALWAYS;
375
- break;
376
- }
377
- view.setOverScrollMode(overScrollMode);
378
- }
379
-
380
- @ReactProp(name = "nestedScrollEnabled")
381
- public void setNestedScrollEnabled(WebView view, boolean enabled) {
382
- ((BPCWebView) view).setNestedScrollEnabled(enabled);
383
- }
384
-
385
- @ReactProp(name = "thirdPartyCookiesEnabled")
386
- public void setThirdPartyCookiesEnabled(WebView view, boolean enabled) {
387
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
388
- CookieManager.getInstance().setAcceptThirdPartyCookies(view, enabled);
389
- }
390
- }
391
-
392
- @ReactProp(name = "textZoom")
393
- public void setTextZoom(WebView view, int value) {
394
- view.getSettings().setTextZoom(value);
395
- }
396
-
397
- @ReactProp(name = "scalesPageToFit")
398
- public void setScalesPageToFit(WebView view, boolean enabled) {
399
- view.getSettings().setLoadWithOverviewMode(enabled);
400
- view.getSettings().setUseWideViewPort(enabled);
401
- }
402
-
403
- @ReactProp(name = "domStorageEnabled")
404
- public void setDomStorageEnabled(WebView view, boolean enabled) {
405
- view.getSettings().setDomStorageEnabled(enabled);
406
- }
407
-
408
- @ReactProp(name = "userAgent")
409
- public void setUserAgent(WebView view, @Nullable String userAgent) {
410
- if (userAgent != null) {
411
- mUserAgent = userAgent;
412
- } else {
413
- mUserAgent = null;
414
- }
415
- this.setUserAgentString(view);
416
- }
417
-
418
- @ReactProp(name = "applicationNameForUserAgent")
419
- public void setApplicationNameForUserAgent(WebView view, @Nullable String applicationName) {
420
- if(applicationName != null) {
421
- if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
422
- String defaultUserAgent = WebSettings.getDefaultUserAgent(view.getContext());
423
- mUserAgentWithApplicationName = defaultUserAgent + " " + applicationName;
424
- }
425
- } else {
426
- mUserAgentWithApplicationName = null;
427
- }
428
- this.setUserAgentString(view);
429
- }
430
-
431
- protected void setUserAgentString(WebView view) {
432
- if(mUserAgent != null) {
433
- view.getSettings().setUserAgentString(mUserAgent);
434
- } else if(mUserAgentWithApplicationName != null) {
435
- view.getSettings().setUserAgentString(mUserAgentWithApplicationName);
436
- } else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
437
- // handle unsets of `userAgent` prop as long as device is >= API 17
438
- view.getSettings().setUserAgentString(WebSettings.getDefaultUserAgent(view.getContext()));
439
- }
440
- }
441
-
442
- @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
443
- @ReactProp(name = "mediaPlaybackRequiresUserAction")
444
- public void setMediaPlaybackRequiresUserAction(WebView view, boolean requires) {
445
- view.getSettings().setMediaPlaybackRequiresUserGesture(requires);
446
- }
447
-
448
- @ReactProp(name = "javaScriptCanOpenWindowsAutomatically")
449
- public void setJavaScriptCanOpenWindowsAutomatically(WebView view, boolean enabled) {
450
- view.getSettings().setJavaScriptCanOpenWindowsAutomatically(enabled);
451
- }
452
-
453
- @ReactProp(name = "allowFileAccessFromFileURLs")
454
- public void setAllowFileAccessFromFileURLs(WebView view, boolean allow) {
455
- view.getSettings().setAllowFileAccessFromFileURLs(allow);
456
- }
457
-
458
- @ReactProp(name = "allowUniversalAccessFromFileURLs")
459
- public void setAllowUniversalAccessFromFileURLs(WebView view, boolean allow) {
460
- view.getSettings().setAllowUniversalAccessFromFileURLs(allow);
461
- }
462
-
463
- @ReactProp(name = "saveFormDataDisabled")
464
- public void setSaveFormDataDisabled(WebView view, boolean disable) {
465
- view.getSettings().setSaveFormData(!disable);
466
- }
467
-
468
- @ReactProp(name = "injectedJavaScript")
469
- public void setInjectedJavaScript(WebView view, @Nullable String injectedJavaScript) {
470
- ((BPCWebView) view).setInjectedJavaScript(injectedJavaScript);
471
- }
472
-
473
- @ReactProp(name = "injectedJavaScriptBeforeContentLoaded")
474
- public void setInjectedJavaScriptBeforeContentLoaded(WebView view, @Nullable String injectedJavaScriptBeforeContentLoaded) {
475
- ((BPCWebView) view).setInjectedJavaScriptBeforeContentLoaded(injectedJavaScriptBeforeContentLoaded);
476
- }
477
-
478
- @ReactProp(name = "injectedJavaScriptForMainFrameOnly")
479
- public void setInjectedJavaScriptForMainFrameOnly(WebView view, boolean enabled) {
480
- ((BPCWebView) view).setInjectedJavaScriptForMainFrameOnly(enabled);
481
- }
482
-
483
- @ReactProp(name = "injectedJavaScriptBeforeContentLoadedForMainFrameOnly")
484
- public void setInjectedJavaScriptBeforeContentLoadedForMainFrameOnly(WebView view, boolean enabled) {
485
- ((BPCWebView) view).setInjectedJavaScriptBeforeContentLoadedForMainFrameOnly(enabled);
486
- }
487
-
488
- @ReactProp(name = "messagingEnabled")
489
- public void setMessagingEnabled(WebView view, boolean enabled) {
490
- ((BPCWebView) view).setMessagingEnabled(enabled);
491
- }
492
-
493
- @ReactProp(name = "messagingModuleName")
494
- public void setMessagingModuleName(WebView view, String moduleName) {
495
- ((BPCWebView) view).setMessagingModuleName(moduleName);
496
- }
497
-
498
- @ReactProp(name = "incognito")
499
- public void setIncognito(WebView view, boolean enabled) {
500
- // Don't do anything when incognito is disabled
501
- if (!enabled) {
502
- return;
503
- }
504
-
505
- // Remove all previous cookies
506
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
507
- CookieManager.getInstance().removeAllCookies(null);
508
- } else {
509
- CookieManager.getInstance().removeAllCookie();
510
- }
511
-
512
- // Disable caching
513
- view.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
514
- view.clearHistory();
515
- view.clearCache(true);
516
-
517
- // No form data or autofill enabled
518
- view.clearFormData();
519
- view.getSettings().setSavePassword(false);
520
- view.getSettings().setSaveFormData(false);
521
- }
522
-
523
- @ReactProp(name = "source")
524
- public void setSource(WebView view, @Nullable ReadableMap source) {
525
- if (source != null) {
526
- if (source.hasKey("html")) {
527
- String html = source.getString("html");
528
- String baseUrl = source.hasKey("baseUrl") ? source.getString("baseUrl") : "";
529
- view.loadDataWithBaseURL(baseUrl, html, HTML_MIME_TYPE, HTML_ENCODING, null);
530
- return;
531
- }
532
- if (source.hasKey("uri")) {
533
- String url = source.getString("uri");
534
- String previousUrl = view.getUrl();
535
- if (previousUrl != null && previousUrl.equals(url)) {
536
- return;
537
- }
538
- if (source.hasKey("method")) {
539
- String method = source.getString("method");
540
- if (method.equalsIgnoreCase(HTTP_METHOD_POST)) {
541
- byte[] postData = null;
542
- if (source.hasKey("body")) {
543
- String body = source.getString("body");
544
- try {
545
- postData = body.getBytes("UTF-8");
546
- } catch (UnsupportedEncodingException e) {
547
- postData = body.getBytes();
548
- }
549
- }
550
- if (postData == null) {
551
- postData = new byte[0];
552
- }
553
- view.postUrl(url, postData);
554
- return;
555
- }
556
- }
557
- HashMap<String, String> headerMap = new HashMap<>();
558
- if (source.hasKey("headers")) {
559
- ReadableMap headers = source.getMap("headers");
560
- ReadableMapKeySetIterator iter = headers.keySetIterator();
561
- while (iter.hasNextKey()) {
562
- String key = iter.nextKey();
563
- if ("user-agent".equals(key.toLowerCase(Locale.ENGLISH))) {
564
- if (view.getSettings() != null) {
565
- view.getSettings().setUserAgentString(headers.getString(key));
566
- }
567
- } else {
568
- headerMap.put(key, headers.getString(key));
569
- }
570
- }
571
- }
572
- view.loadUrl(url, headerMap);
573
- return;
574
- }
575
- }
576
- view.loadUrl(BLANK_URL);
577
- }
578
-
579
- @ReactProp(name = "basicAuthCredential")
580
- public void setBasicAuthCredential(WebView view, @Nullable ReadableMap credential) {
581
- @Nullable BasicAuthCredential basicAuthCredential = null;
582
- if (credential != null) {
583
- if (credential.hasKey("username") && credential.hasKey("password")) {
584
- String username = credential.getString("username");
585
- String password = credential.getString("password");
586
- basicAuthCredential = new BasicAuthCredential(username, password);
587
- }
588
- }
589
- ((BPCWebView) view).setBasicAuthCredential(basicAuthCredential);
590
- }
591
-
592
- @ReactProp(name = "onContentSizeChange")
593
- public void setOnContentSizeChange(WebView view, boolean sendContentSizeChangeEvents) {
594
- ((BPCWebView) view).setSendContentSizeChangeEvents(sendContentSizeChangeEvents);
595
- }
596
-
597
- @ReactProp(name = "mixedContentMode")
598
- public void setMixedContentMode(WebView view, @Nullable String mixedContentMode) {
599
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
600
- if (mixedContentMode == null || "never".equals(mixedContentMode)) {
601
- view.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_NEVER_ALLOW);
602
- } else if ("always".equals(mixedContentMode)) {
603
- view.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
604
- } else if ("compatibility".equals(mixedContentMode)) {
605
- view.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE);
606
- }
607
- }
608
- }
609
-
610
- @ReactProp(name = "urlPrefixesForDefaultIntent")
611
- public void setUrlPrefixesForDefaultIntent(
612
- WebView view,
613
- @Nullable ReadableArray urlPrefixesForDefaultIntent) {
614
- BPCWebViewClient client = ((BPCWebView) view).getBPCWebViewClient();
615
- if (client != null && urlPrefixesForDefaultIntent != null) {
616
- client.setUrlPrefixesForDefaultIntent(urlPrefixesForDefaultIntent);
617
- }
618
- }
619
-
620
- @ReactProp(name = "allowsFullscreenVideo")
621
- public void setAllowsFullscreenVideo(
622
- WebView view,
623
- @Nullable Boolean allowsFullscreenVideo) {
624
- mAllowsFullscreenVideo = allowsFullscreenVideo != null && allowsFullscreenVideo;
625
- setupWebChromeClient((ReactContext)view.getContext(), view);
626
- }
627
-
628
- @ReactProp(name = "allowFileAccess")
629
- public void setAllowFileAccess(
630
- WebView view,
631
- @Nullable Boolean allowFileAccess) {
632
- view.getSettings().setAllowFileAccess(allowFileAccess != null && allowFileAccess);
633
- }
634
-
635
- @ReactProp(name = "geolocationEnabled")
636
- public void setGeolocationEnabled(
637
- WebView view,
638
- @Nullable Boolean isGeolocationEnabled) {
639
- view.getSettings().setGeolocationEnabled(isGeolocationEnabled != null && isGeolocationEnabled);
640
- }
641
-
642
- @ReactProp(name = "onScroll")
643
- public void setOnScroll(WebView view, boolean hasScrollEvent) {
644
- ((BPCWebView) view).setHasScrollEvent(hasScrollEvent);
645
- }
646
-
647
- @ReactProp(name = "forceDarkOn")
648
- public void setForceDarkOn(WebView view, boolean enabled) {
649
- // Only Android 10+ support dark mode
650
- if (Build.VERSION.SDK_INT > Build.VERSION_CODES.P) {
651
- // Switch WebView dark mode
652
- if (WebViewFeature.isFeatureSupported(WebViewFeature.FORCE_DARK)) {
653
- int forceDarkMode = enabled ? WebSettingsCompat.FORCE_DARK_ON : WebSettingsCompat.FORCE_DARK_OFF;
654
- WebSettingsCompat.setForceDark(view.getSettings(), forceDarkMode);
655
- }
656
-
657
- // Set how WebView content should be darkened.
658
- // PREFER_WEB_THEME_OVER_USER_AGENT_DARKENING: checks for the "color-scheme" <meta> tag.
659
- // If present, it uses media queries. If absent, it applies user-agent (automatic)
660
- // More information about Force Dark Strategy can be found here:
661
- // https://developer.android.com/reference/androidx/webkit/WebSettingsCompat#setForceDarkStrategy(android.webkit.WebSettings)
662
- if (enabled && WebViewFeature.isFeatureSupported(WebViewFeature.FORCE_DARK_STRATEGY)) {
663
- WebSettingsCompat.setForceDarkStrategy(view.getSettings(), WebSettingsCompat.DARK_STRATEGY_PREFER_WEB_THEME_OVER_USER_AGENT_DARKENING);
664
- }
665
- }
666
- }
667
-
668
- @ReactProp(name = "minimumFontSize")
669
- public void setMinimumFontSize(WebView view, int fontSize) {
670
- view.getSettings().setMinimumFontSize(fontSize);
671
- }
672
-
673
- @ReactProp(name = "allowsProtectedMedia")
674
- public void setAllowsProtectedMedia(WebView view, boolean enabled) {
675
- // This variable is used to keep consistency
676
- // in case a new WebChromeClient is created
677
- // (eg. when mAllowsFullScreenVideo changes)
678
- mAllowsProtectedMedia = enabled;
679
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
680
- WebChromeClient client = view.getWebChromeClient();
681
- if (client != null && client instanceof BPCWebChromeClient) {
682
- ((BPCWebChromeClient) client).setAllowsProtectedMedia(enabled);
683
- }
40
+ @Override
41
+ public BPCWebView createViewInstance(ThemedReactContext context) {
42
+ return mBPCWebViewManagerImpl.createViewInstance(context);
684
43
  }
685
- }
686
-
687
- @Override
688
- protected void addEventEmitters(ThemedReactContext reactContext, WebView view) {
689
- // Do not register default touch emitter and let WebView implementation handle touches
690
- view.setWebViewClient(new BPCWebViewClient());
691
- }
692
-
693
- @Override
694
- public Map getExportedCustomDirectEventTypeConstants() {
695
- Map export = super.getExportedCustomDirectEventTypeConstants();
696
- if (export == null) {
697
- export = MapBuilder.newHashMap();
698
- }
699
- // Default events but adding them here explicitly for clarity
700
- export.put(TopLoadingStartEvent.EVENT_NAME, MapBuilder.of("registrationName", "onLoadingStart"));
701
- export.put(TopLoadingFinishEvent.EVENT_NAME, MapBuilder.of("registrationName", "onLoadingFinish"));
702
- export.put(TopLoadingErrorEvent.EVENT_NAME, MapBuilder.of("registrationName", "onLoadingError"));
703
- export.put(TopMessageEvent.EVENT_NAME, MapBuilder.of("registrationName", "onMessage"));
704
- // !Default events but adding them here explicitly for clarity
705
-
706
- export.put(TopLoadingProgressEvent.EVENT_NAME, MapBuilder.of("registrationName", "onLoadingProgress"));
707
- export.put(TopShouldStartLoadWithRequestEvent.EVENT_NAME, MapBuilder.of("registrationName", "onShouldStartLoadWithRequest"));
708
- export.put(ScrollEventType.getJSEventName(ScrollEventType.SCROLL), MapBuilder.of("registrationName", "onScroll"));
709
- export.put(TopHttpErrorEvent.EVENT_NAME, MapBuilder.of("registrationName", "onHttpError"));
710
- export.put(TopRenderProcessGoneEvent.EVENT_NAME, MapBuilder.of("registrationName", "onRenderProcessGone"));
711
- return export;
712
- }
713
-
714
- @Override
715
- public @Nullable
716
- Map<String, Integer> getCommandsMap() {
717
- return MapBuilder.<String, Integer>builder()
718
- .put("goBack", COMMAND_GO_BACK)
719
- .put("goForward", COMMAND_GO_FORWARD)
720
- .put("reload", COMMAND_RELOAD)
721
- .put("stopLoading", COMMAND_STOP_LOADING)
722
- .put("postMessage", COMMAND_POST_MESSAGE)
723
- .put("injectJavaScript", COMMAND_INJECT_JAVASCRIPT)
724
- .put("loadUrl", COMMAND_LOAD_URL)
725
- .put("requestFocus", COMMAND_FOCUS)
726
- .put("clearFormData", COMMAND_CLEAR_FORM_DATA)
727
- .put("clearCache", COMMAND_CLEAR_CACHE)
728
- .put("clearHistory", COMMAND_CLEAR_HISTORY)
729
- .build();
730
- }
731
-
732
- @Override
733
- public void receiveCommand(@NonNull WebView root, String commandId, @Nullable ReadableArray args) {
734
- switch (commandId) {
735
- case "goBack":
736
- root.goBack();
737
- break;
738
- case "goForward":
739
- root.goForward();
740
- break;
741
- case "reload":
742
- root.reload();
743
- break;
744
- case "stopLoading":
745
- root.stopLoading();
746
- break;
747
- case "postMessage":
748
- try {
749
- BPCWebView reactWebView = (BPCWebView) root;
750
- JSONObject eventInitDict = new JSONObject();
751
- eventInitDict.put("data", args.getString(0));
752
- reactWebView.evaluateJavascriptWithFallback("(function () {" +
753
- "var event;" +
754
- "var data = " + eventInitDict.toString() + ";" +
755
- "try {" +
756
- "event = new MessageEvent('message', data);" +
757
- "} catch (e) {" +
758
- "event = document.createEvent('MessageEvent');" +
759
- "event.initMessageEvent('message', true, true, data.data, data.origin, data.lastEventId, data.source);" +
760
- "}" +
761
- "document.dispatchEvent(event);" +
762
- "})();");
763
- } catch (JSONException e) {
764
- throw new RuntimeException(e);
765
- }
766
- break;
767
- case "injectJavaScript":
768
- BPCWebView reactWebView = (BPCWebView) root;
769
- reactWebView.evaluateJavascriptWithFallback(args.getString(0));
770
- break;
771
- case "loadUrl":
772
- if (args == null) {
773
- throw new RuntimeException("Arguments for loading an url are null!");
774
- }
775
- ((BPCWebView) root).progressChangedFilter.setWaitingForCommandLoadUrl(false);
776
- root.loadUrl(args.getString(0));
777
- break;
778
- case "requestFocus":
779
- root.requestFocus();
780
- break;
781
- case "clearFormData":
782
- root.clearFormData();
783
- break;
784
- case "clearCache":
785
- boolean includeDiskFiles = args != null && args.getBoolean(0);
786
- root.clearCache(includeDiskFiles);
787
- break;
788
- case "clearHistory":
789
- root.clearHistory();
790
- break;
791
- }
792
- super.receiveCommand(root, commandId, args);
793
- }
794
-
795
- @Override
796
- public void onDropViewInstance(WebView webView) {
797
- super.onDropViewInstance(webView);
798
- ((ThemedReactContext) webView.getContext()).removeLifecycleEventListener((BPCWebView) webView);
799
- ((BPCWebView) webView).cleanupCallbacksAndDestroy();
800
- mWebChromeClient = null;
801
- }
802
-
803
- public static BPCWebViewModule getModule(ReactContext reactContext) {
804
- return reactContext.getNativeModule(BPCWebViewModule.class);
805
- }
806
-
807
- protected void setupWebChromeClient(ReactContext reactContext, WebView webView) {
808
- Activity activity = reactContext.getCurrentActivity();
809
-
810
- if (mAllowsFullscreenVideo && activity != null) {
811
- int initialRequestedOrientation = activity.getRequestedOrientation();
812
-
813
- mWebChromeClient = new BPCWebChromeClient(reactContext, webView) {
814
- @Override
815
- public Bitmap getDefaultVideoPoster() {
816
- return Bitmap.createBitmap(50, 50, Bitmap.Config.ARGB_8888);
817
- }
818
44
 
819
- @Override
820
- public void onShowCustomView(View view, CustomViewCallback callback) {
821
- if (mVideoView != null) {
822
- callback.onCustomViewHidden();
823
- return;
824
- }
825
-
826
- mVideoView = view;
827
- mCustomViewCallback = callback;
828
-
829
- activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
830
-
831
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
832
- mVideoView.setSystemUiVisibility(FULLSCREEN_SYSTEM_UI_VISIBILITY);
833
- activity.getWindow().setFlags(
834
- WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
835
- WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
836
- );
837
- }
838
-
839
- mVideoView.setBackgroundColor(Color.BLACK);
840
-
841
- // Since RN's Modals interfere with the View hierarchy
842
- // we will decide which View to hide if the hierarchy
843
- // does not match (i.e., the WebView is within a Modal)
844
- // NOTE: We could use `mWebView.getRootView()` instead of `getRootView()`
845
- // but that breaks the Modal's styles and layout, so we need this to render
846
- // in the main View hierarchy regardless
847
- ViewGroup rootView = getRootView();
848
- rootView.addView(mVideoView, FULLSCREEN_LAYOUT_PARAMS);
849
-
850
- // Different root views, we are in a Modal
851
- if (rootView.getRootView() != mWebView.getRootView()) {
852
- mWebView.getRootView().setVisibility(View.GONE);
853
- } else {
854
- // Same view hierarchy (no Modal), just hide the WebView then
855
- mWebView.setVisibility(View.GONE);
856
- }
857
-
858
- mReactContext.addLifecycleEventListener(this);
859
- }
45
+ public BPCWebView createViewInstance(ThemedReactContext context, BPCWebView webView) {
46
+ return mBPCWebViewManagerImpl.createViewInstance(context, webView);
47
+ }
860
48
 
861
- @Override
862
- public void onHideCustomView() {
863
- if (mVideoView == null) {
864
- return;
865
- }
49
+ @ReactProp(name = "allowFileAccess")
50
+ public void setAllowFileAccess(BPCWebView view, boolean value) {
51
+ mBPCWebViewManagerImpl.setAllowFileAccess(view, value);
52
+ }
866
53
 
867
- // Same logic as above
868
- ViewGroup rootView = getRootView();
54
+ @ReactProp(name = "allowFileAccessFromFileURLs")
55
+ public void setAllowFileAccessFromFileURLs(BPCWebView view, boolean value) {
56
+ mBPCWebViewManagerImpl.setAllowFileAccessFromFileURLs(view, value);
869
57
 
870
- if (rootView.getRootView() != mWebView.getRootView()) {
871
- mWebView.getRootView().setVisibility(View.VISIBLE);
872
- } else {
873
- // Same view hierarchy (no Modal)
874
- mWebView.setVisibility(View.VISIBLE);
875
- }
58
+ }
876
59
 
877
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
878
- activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
879
- }
60
+ @ReactProp(name = "allowUniversalAccessFromFileURLs")
61
+ public void setAllowUniversalAccessFromFileURLs(BPCWebView view, boolean value) {
62
+ mBPCWebViewManagerImpl.setAllowUniversalAccessFromFileURLs(view, value);
63
+ }
880
64
 
881
- rootView.removeView(mVideoView);
882
- mCustomViewCallback.onCustomViewHidden();
65
+ @ReactProp(name = "allowsFullscreenVideo")
66
+ public void setAllowsFullscreenVideo(BPCWebView view, boolean value) {
67
+ mBPCWebViewManagerImpl.setAllowsFullscreenVideo(view, value);
68
+ }
883
69
 
884
- mVideoView = null;
885
- mCustomViewCallback = null;
70
+ @ReactProp(name = "allowsProtectedMedia")
71
+ public void setAllowsProtectedMedia(BPCWebView view, boolean value) {
72
+ mBPCWebViewManagerImpl.setAllowsProtectedMedia(view, value);
73
+ }
886
74
 
887
- activity.setRequestedOrientation(initialRequestedOrientation);
75
+ @ReactProp(name = "androidLayerType")
76
+ public void setAndroidLayerType(BPCWebView view, @Nullable String value) {
77
+ mBPCWebViewManagerImpl.setAndroidLayerType(view, value);
78
+ }
888
79
 
889
- mReactContext.removeLifecycleEventListener(this);
890
- }
891
- };
892
-
893
- // bootpay added //
894
- webView.setWebChromeClient(mWebChromeClient);
895
- } else {
896
- if (mWebChromeClient != null) {
897
- mWebChromeClient.onHideCustomView();
898
- }
899
-
900
- mWebChromeClient = new BPCWebChromeClient(reactContext, webView) {
901
- @Override
902
- public Bitmap getDefaultVideoPoster() {
903
- return Bitmap.createBitmap(50, 50, Bitmap.Config.ARGB_8888);
80
+ @ReactProp(name = "applicationNameForUserAgent")
81
+ public void setApplicationNameForUserAgent(BPCWebView view, @Nullable String value) {
82
+ mBPCWebViewManagerImpl.setApplicationNameForUserAgent(view, value);
83
+ }
84
+
85
+ @ReactProp(name = "basicAuthCredential")
86
+ public void setBasicAuthCredential(BPCWebView view, @Nullable ReadableMap value) {
87
+ mBPCWebViewManagerImpl.setBasicAuthCredential(view, value);
88
+ }
89
+
90
+ @ReactProp(name = "cacheEnabled")
91
+ public void setCacheEnabled(BPCWebView view, boolean value) {
92
+ mBPCWebViewManagerImpl.setCacheEnabled(view, value);
93
+ }
94
+
95
+ @ReactProp(name = "cacheMode")
96
+ public void setCacheMode(BPCWebView view, @Nullable String value) {
97
+ mBPCWebViewManagerImpl.setCacheMode(view, value);
98
+ }
99
+
100
+ @ReactProp(name = "domStorageEnabled")
101
+ public void setDomStorageEnabled(BPCWebView view, boolean value) {
102
+ mBPCWebViewManagerImpl.setDomStorageEnabled(view, value);
103
+ }
104
+
105
+ @ReactProp(name = "downloadingMessage")
106
+ public void setDownloadingMessage(BPCWebView view, @Nullable String value) {
107
+ mBPCWebViewManagerImpl.setDownloadingMessage(value);
108
+ }
109
+
110
+ @ReactProp(name = "forceDarkOn")
111
+ public void setForceDarkOn(BPCWebView view, boolean value) {
112
+ mBPCWebViewManagerImpl.setForceDarkOn(view, value);
113
+ }
114
+
115
+ @ReactProp(name = "geolocationEnabled")
116
+ public void setGeolocationEnabled(BPCWebView view, boolean value) {
117
+ mBPCWebViewManagerImpl.setGeolocationEnabled(view, value);
118
+ }
119
+
120
+ @ReactProp(name = "hasOnScroll")
121
+ public void setHasOnScroll(BPCWebView view, boolean hasScrollEvent) {
122
+ mBPCWebViewManagerImpl.setHasOnScroll(view, hasScrollEvent);
123
+ }
124
+
125
+ @ReactProp(name = "incognito")
126
+ public void setIncognito(BPCWebView view, boolean value) {
127
+ mBPCWebViewManagerImpl.setIncognito(view, value);
128
+ }
129
+
130
+ @ReactProp(name = "injectedJavaScript")
131
+ public void setInjectedJavaScript(BPCWebView view, @Nullable String value) {
132
+ mBPCWebViewManagerImpl.setInjectedJavaScript(view, value);
133
+ }
134
+
135
+ @ReactProp(name = "injectedJavaScriptBeforeContentLoaded")
136
+ public void setInjectedJavaScriptBeforeContentLoaded(BPCWebView view, @Nullable String value) {
137
+ mBPCWebViewManagerImpl.setInjectedJavaScriptBeforeContentLoaded(view, value);
138
+ }
139
+
140
+ @ReactProp(name = "injectedJavaScriptForMainFrameOnly")
141
+ public void setInjectedJavaScriptForMainFrameOnly(BPCWebView view, boolean value) {
142
+ mBPCWebViewManagerImpl.setInjectedJavaScriptForMainFrameOnly(view, value);
143
+
144
+ }
145
+
146
+ @ReactProp(name = "injectedJavaScriptBeforeContentLoadedForMainFrameOnly")
147
+ public void setInjectedJavaScriptBeforeContentLoadedForMainFrameOnly(BPCWebView view, boolean value) {
148
+ mBPCWebViewManagerImpl.setInjectedJavaScriptBeforeContentLoadedForMainFrameOnly(view, value);
149
+
150
+ }
151
+
152
+ @ReactProp(name = "injectedJavaScriptObject")
153
+ public void setInjectedJavaScriptObject(BPCWebView view, @Nullable String value) {
154
+ mBPCWebViewManagerImpl.setInjectedJavaScriptObject(view, value);
155
+ }
156
+
157
+ @ReactProp(name = "javaScriptCanOpenWindowsAutomatically")
158
+ public void setJavaScriptCanOpenWindowsAutomatically(BPCWebView view, boolean value) {
159
+ mBPCWebViewManagerImpl.setJavaScriptCanOpenWindowsAutomatically(view, value);
160
+ }
161
+
162
+ @ReactProp(name = "javaScriptEnabled")
163
+ public void setJavaScriptEnabled(BPCWebView view, boolean enabled) {
164
+ mBPCWebViewManagerImpl.setJavaScriptEnabled(view, enabled);
165
+ }
166
+
167
+ @ReactProp(name = "lackPermissionToDownloadMessage")
168
+ public void setLackPermissionToDownloadMessage(BPCWebView view, @Nullable String value) {
169
+ mBPCWebViewManagerImpl.setLackPermissionToDownloadMessage(value);
170
+ }
171
+
172
+ @ReactProp(name = "hasOnOpenWindowEvent")
173
+ public void setHasOnOpenWindowEvent(BPCWebView view, boolean hasEvent) {
174
+ mBPCWebViewManagerImpl.setHasOnOpenWindowEvent(view, hasEvent);
175
+ }
176
+
177
+ @ReactProp(name = "mediaPlaybackRequiresUserAction")
178
+ public void setMediaPlaybackRequiresUserAction(BPCWebView view, boolean value) {
179
+ mBPCWebViewManagerImpl.setMediaPlaybackRequiresUserAction(view, value);
180
+ }
181
+
182
+ @ReactProp(name = "messagingEnabled")
183
+ public void setMessagingEnabled(BPCWebView view, boolean value) {
184
+ mBPCWebViewManagerImpl.setMessagingEnabled(view, value);
185
+ }
186
+
187
+ @ReactProp(name = "menuItems")
188
+ public void setMenuCustomItems(BPCWebView view, @Nullable ReadableArray items) {
189
+ mBPCWebViewManagerImpl.setMenuCustomItems(view, items);
190
+ }
191
+
192
+ @ReactProp(name = "messagingModuleName")
193
+ public void setMessagingModuleName(BPCWebView view, @Nullable String value) {
194
+ mBPCWebViewManagerImpl.setMessagingModuleName(view, value);
195
+ }
196
+
197
+ @ReactProp(name = "minimumFontSize")
198
+ public void setMinimumFontSize(BPCWebView view, int value) {
199
+ mBPCWebViewManagerImpl.setMinimumFontSize(view, value);
200
+ }
201
+
202
+ @ReactProp(name = "mixedContentMode")
203
+ public void setMixedContentMode(BPCWebView view, @Nullable String value) {
204
+ mBPCWebViewManagerImpl.setMixedContentMode(view, value);
205
+ }
206
+
207
+ @ReactProp(name = "nestedScrollEnabled")
208
+ public void setNestedScrollEnabled(BPCWebView view, boolean value) {
209
+ mBPCWebViewManagerImpl.setNestedScrollEnabled(view, value);
210
+ }
211
+
212
+ @ReactProp(name = "overScrollMode")
213
+ public void setOverScrollMode(BPCWebView view, @Nullable String value) {
214
+ mBPCWebViewManagerImpl.setOverScrollMode(view, value);
215
+ }
216
+
217
+ @ReactProp(name = "saveFormDataDisabled")
218
+ public void setSaveFormDataDisabled(BPCWebView view, boolean value) {
219
+ mBPCWebViewManagerImpl.setSaveFormDataDisabled(view, value);
220
+ }
221
+
222
+ @ReactProp(name = "scalesPageToFit")
223
+ public void setScalesPageToFit(BPCWebView view, boolean value) {
224
+ mBPCWebViewManagerImpl.setScalesPageToFit(view, value);
225
+ }
226
+
227
+ @ReactProp(name = "setBuiltInZoomControls")
228
+ public void setSetBuiltInZoomControls(BPCWebView view, boolean value) {
229
+ mBPCWebViewManagerImpl.setSetBuiltInZoomControls(view, value);
230
+ }
231
+
232
+ @ReactProp(name = "setDisplayZoomControls")
233
+ public void setSetDisplayZoomControls(BPCWebView view, boolean value) {
234
+ mBPCWebViewManagerImpl.setSetDisplayZoomControls(view, value);
235
+ }
236
+
237
+ @ReactProp(name = "setSupportMultipleWindows")
238
+ public void setSetSupportMultipleWindows(BPCWebView view, boolean value) {
239
+ mBPCWebViewManagerImpl.setSetSupportMultipleWindows(view, value);
240
+ }
241
+
242
+ @ReactProp(name = "showsHorizontalScrollIndicator")
243
+ public void setShowsHorizontalScrollIndicator(BPCWebView view, boolean value) {
244
+ mBPCWebViewManagerImpl.setShowsHorizontalScrollIndicator(view, value);
245
+ }
246
+
247
+ @ReactProp(name = "showsVerticalScrollIndicator")
248
+ public void setShowsVerticalScrollIndicator(BPCWebView view, boolean value) {
249
+ mBPCWebViewManagerImpl.setShowsVerticalScrollIndicator(view, value);
250
+ }
251
+
252
+ @ReactProp(name = "source")
253
+ public void setSource(BPCWebView view, @Nullable ReadableMap value) {
254
+ mBPCWebViewManagerImpl.setSource(view, value, false);
255
+ }
256
+
257
+ @ReactProp(name = "textZoom")
258
+ public void setTextZoom(BPCWebView view, int value) {
259
+ mBPCWebViewManagerImpl.setTextZoom(view, value);
260
+ }
261
+
262
+ @ReactProp(name = "thirdPartyCookiesEnabled")
263
+ public void setThirdPartyCookiesEnabled(BPCWebView view, boolean value) {
264
+ mBPCWebViewManagerImpl.setThirdPartyCookiesEnabled(view, value);
265
+ }
266
+
267
+ @ReactProp(name = "webviewDebuggingEnabled")
268
+ public void setWebviewDebuggingEnabled(BPCWebView view, boolean value) {
269
+ mBPCWebViewManagerImpl.setWebviewDebuggingEnabled(view, value);
270
+ }
271
+
272
+ @ReactProp(name = "userAgent")
273
+ public void setUserAgent(BPCWebView view, @Nullable String value) {
274
+ mBPCWebViewManagerImpl.setUserAgent(view, value);
275
+ }
276
+
277
+ @Override
278
+ protected void addEventEmitters(@NonNull ThemedReactContext reactContext, BPCWebView view) {
279
+ // Do not register default touch emitter and let WebView implementation handle touches
280
+ view.setWebViewClient(new BPCWebViewClient());
281
+ }
282
+
283
+ @Override
284
+ public Map<String, Object> getExportedCustomDirectEventTypeConstants() {
285
+ Map<String, Object> export = super.getExportedCustomDirectEventTypeConstants();
286
+ if (export == null) {
287
+ export = MapBuilder.newHashMap();
904
288
  }
905
- };
289
+ // Default events but adding them here explicitly for clarity
290
+ export.put(TopLoadingStartEvent.EVENT_NAME, MapBuilder.of("registrationName", "onLoadingStart"));
291
+ export.put(TopLoadingFinishEvent.EVENT_NAME, MapBuilder.of("registrationName", "onLoadingFinish"));
292
+ export.put(TopLoadingErrorEvent.EVENT_NAME, MapBuilder.of("registrationName", "onLoadingError"));
293
+ export.put(TopMessageEvent.EVENT_NAME, MapBuilder.of("registrationName", "onMessage"));
294
+ // !Default events but adding them here explicitly for clarity
295
+
296
+ export.put(TopLoadingProgressEvent.EVENT_NAME, MapBuilder.of("registrationName", "onLoadingProgress"));
297
+ export.put(TopShouldStartLoadWithRequestEvent.EVENT_NAME, MapBuilder.of("registrationName", "onShouldStartLoadWithRequest"));
298
+ export.put(ScrollEventType.getJSEventName(ScrollEventType.SCROLL), MapBuilder.of("registrationName", "onScroll"));
299
+ export.put(TopHttpErrorEvent.EVENT_NAME, MapBuilder.of("registrationName", "onHttpError"));
300
+ export.put(TopRenderProcessGoneEvent.EVENT_NAME, MapBuilder.of("registrationName", "onRenderProcessGone"));
301
+ export.put(TopCustomMenuSelectionEvent.EVENT_NAME, MapBuilder.of("registrationName", "onCustomMenuSelection"));
302
+ export.put(TopOpenWindowEvent.EVENT_NAME, MapBuilder.of("registrationName", "onOpenWindow"));
303
+ return export;
304
+ }
305
+
306
+ @Override
307
+ public @Nullable
308
+ Map<String, Integer> getCommandsMap() {
309
+ return mBPCWebViewManagerImpl.getCommandsMap();
310
+ }
311
+
312
+ @Override
313
+ public void receiveCommand(@NonNull BPCWebView reactWebView, String commandId, @Nullable ReadableArray args) {
314
+ mBPCWebViewManagerImpl.receiveCommand(reactWebView, commandId, args);
315
+ super.receiveCommand(reactWebView, commandId, args);
316
+ }
317
+
318
+ @Override
319
+ public void onDropViewInstance(@NonNull BPCWebView view) {
320
+ mBPCWebViewManagerImpl.onDropViewInstance(view);
321
+ super.onDropViewInstance(view);
906
322
  }
907
- mWebChromeClient.setAllowsProtectedMedia(mAllowsProtectedMedia);
908
- webView.setWebChromeClient(mWebChromeClient);
909
- }
910
- }
323
+ }