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,13 +1,8 @@
1
1
  package kr.co.bootpay.webview;
2
2
 
3
- import static kr.co.bootpay.webview.BPCWebViewManager.getModule;
4
-
5
3
  import android.Manifest;
6
4
  import android.annotation.TargetApi;
7
5
  import android.app.Activity;
8
- import android.app.Dialog;
9
- import android.content.Context;
10
- import android.content.Intent;
11
6
  import android.content.pm.PackageManager;
12
7
  import android.net.Uri;
13
8
  import android.os.Build;
@@ -16,12 +11,14 @@ import android.view.Gravity;
16
11
  import android.view.View;
17
12
  import android.view.ViewGroup;
18
13
  import android.view.WindowManager;
14
+
19
15
  import android.webkit.ConsoleMessage;
20
16
  import android.webkit.GeolocationPermissions;
21
17
  import android.webkit.PermissionRequest;
22
18
  import android.webkit.ValueCallback;
23
19
  import android.webkit.WebChromeClient;
24
20
  import android.webkit.WebView;
21
+ import android.webkit.WebViewClient;
25
22
  import android.widget.FrameLayout;
26
23
 
27
24
  import androidx.annotation.RequiresApi;
@@ -29,525 +26,448 @@ import androidx.core.content.ContextCompat;
29
26
 
30
27
  import com.facebook.react.bridge.Arguments;
31
28
  import com.facebook.react.bridge.LifecycleEventListener;
32
- import com.facebook.react.bridge.ReactContext;
33
29
  import com.facebook.react.bridge.WritableMap;
34
30
  import com.facebook.react.common.build.ReactBuildConfig;
35
31
  import com.facebook.react.modules.core.PermissionAwareActivity;
36
32
  import com.facebook.react.modules.core.PermissionListener;
33
+ import com.facebook.react.uimanager.UIManagerHelper;
37
34
  import com.facebook.react.uimanager.ThemedReactContext;
38
35
 
36
+
37
+ import kr.co.bootpay.webview.events.TopLoadingProgressEvent;
38
+ import kr.co.bootpay.webview.events.TopOpenWindowEvent;
39
+
39
40
  import java.util.ArrayList;
40
41
  import java.util.Collections;
41
42
  import java.util.List;
42
43
 
43
- import kr.co.bootpay.webview.events.TopLoadingProgressEvent;
44
+ import android.app.Dialog;
45
+ import android.content.Context;
46
+ import android.content.Intent;
44
47
 
48
+ public class BPCWebChromeClient extends WebChromeClient implements LifecycleEventListener {
49
+ protected static final FrameLayout.LayoutParams FULLSCREEN_LAYOUT_PARAMS = new FrameLayout.LayoutParams(
50
+ ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, Gravity.CENTER);
45
51
 
46
- class BPCWebChromeClient extends WebChromeClient implements LifecycleEventListener {
47
- protected static final FrameLayout.LayoutParams FULLSCREEN_LAYOUT_PARAMS = new FrameLayout.LayoutParams(
48
- ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT, Gravity.CENTER);
52
+ protected static final int FULLSCREEN_SYSTEM_UI_VISIBILITY = View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
53
+ View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |
54
+ View.SYSTEM_UI_FLAG_LAYOUT_STABLE |
55
+ View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
56
+ View.SYSTEM_UI_FLAG_FULLSCREEN |
57
+ View.SYSTEM_UI_FLAG_IMMERSIVE |
58
+ View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
49
59
 
50
- @RequiresApi(api = Build.VERSION_CODES.KITKAT)
51
- protected static final int FULLSCREEN_SYSTEM_UI_VISIBILITY = View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
52
- View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |
53
- View.SYSTEM_UI_FLAG_LAYOUT_STABLE |
54
- View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
55
- View.SYSTEM_UI_FLAG_FULLSCREEN |
56
- View.SYSTEM_UI_FLAG_IMMERSIVE |
57
- View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY;
60
+ protected static final int COMMON_PERMISSION_REQUEST = 3;
58
61
 
59
- protected static final int COMMON_PERMISSION_REQUEST = 3;
62
+ protected BPCWebView mWebView;
60
63
 
61
- protected ReactContext mReactContext;
62
- protected View mWebView;
64
+ protected View mVideoView;
65
+ protected WebChromeClient.CustomViewCallback mCustomViewCallback;
63
66
 
64
- protected View mVideoView;
65
- protected WebChromeClient.CustomViewCallback mCustomViewCallback;
67
+ /*
68
+ * - Permissions -
69
+ * As native permissions are asynchronously handled by the PermissionListener, many fields have
70
+ * to be stored to send permissions results to the webview
71
+ */
66
72
 
67
- /*
68
- * - Permissions -
69
- * As native permissions are asynchronously handled by the PermissionListener, many fields have
70
- * to be stored to send permissions results to the webview
71
- */
73
+ // Webview camera & audio permission callback
74
+ protected PermissionRequest permissionRequest;
75
+ // Webview camera & audio permission already granted
76
+ protected List<String> grantedPermissions;
72
77
 
73
- // Webview camera & audio permission callback
74
- protected PermissionRequest permissionRequest;
75
- // Webview camera & audio permission already granted
76
- protected List<String> grantedPermissions;
78
+ // Webview geolocation permission callback
79
+ protected GeolocationPermissions.Callback geolocationPermissionCallback;
80
+ // Webview geolocation permission origin callback
81
+ protected String geolocationPermissionOrigin;
77
82
 
78
- // Webview geolocation permission callback
79
- protected GeolocationPermissions.Callback geolocationPermissionCallback;
80
- // Webview geolocation permission origin callback
81
- protected String geolocationPermissionOrigin;
83
+ // true if native permissions dialog is shown, false otherwise
84
+ protected boolean permissionsRequestShown = false;
85
+ // Pending Android permissions for the next request
86
+ protected List<String> pendingPermissions = new ArrayList<>();
82
87
 
83
- // true if native permissions dialog is shown, false otherwise
84
- protected boolean permissionsRequestShown = false;
85
- // Pending Android permissions for the next request
86
- protected List<String> pendingPermissions = new ArrayList<>();
88
+ protected BPCWebView.ProgressChangedFilter progressChangedFilter = null;
89
+ protected boolean mAllowsProtectedMedia = false;
87
90
 
88
- protected BPCWebView.ProgressChangedFilter progressChangedFilter = null;
91
+ protected boolean mHasOnOpenWindowEvent = false;
89
92
 
90
- // True if protected media should be allowed, false otherwise
91
- protected boolean mAllowsProtectedMedia = false;
93
+ public BPCWebChromeClient(BPCWebView webView) {
94
+ this.mWebView = webView;
95
+ }
92
96
 
93
- public BPCWebChromeClient(ReactContext reactContext, WebView webView) {
94
- this.mReactContext = reactContext;
95
- this.mWebView = webView;
96
- }
97
+ @Override
98
+ public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
97
99
 
100
+ final BPCWebView newWebView = new BPCWebView((ThemedReactContext) view.getContext());
98
101
 
99
- /** bootpay change **/
102
+ BPCWebChromeClient client = new BPCWebChromeClient(newWebView);
103
+ client.setProgressChangedFilter(progressChangedFilter);
104
+ newWebView.setWebChromeClient(client);
100
105
 
101
- @Override
102
- public void onCloseWindow(WebView window) {
103
- super.onCloseWindow(window);
104
- ((BPCWebView) window).dissmissDialog();
105
- // if(mainView != null) {
106
- // mainView.removeView(window);
107
- // }
108
- // window.setVisibility(View.GONE);
109
- }
106
+ setWebSettingCopy(view, newWebView);
110
107
 
111
108
 
112
- void setWebSettingCopy(WebView view, WebView newWebView) {
113
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
114
- newWebView.getSettings().setMediaPlaybackRequiresUserGesture( view.getSettings().getMediaPlaybackRequiresUserGesture() );
115
- }
109
+ newWebView.setWebViewClient(new WebViewClient(){
110
+ @Override
111
+ public boolean shouldOverrideUrlLoading (WebView subview, String url) {
116
112
 
117
- newWebView.getSettings().setBuiltInZoomControls(view.getSettings().getBuiltInZoomControls());
118
- newWebView.getSettings().setDisplayZoomControls(view.getSettings().getDisplayZoomControls());
119
- newWebView.getSettings().setAllowFileAccess(view.getSettings().getAllowFileAccess());
120
- newWebView.getSettings().setAllowContentAccess(view.getSettings().getAllowContentAccess());
121
- newWebView.getSettings().setLoadWithOverviewMode(view.getSettings().getLoadWithOverviewMode());
122
- // newWebView.getSettings().setEnableSmoothTransition(view.getSettings().);
123
- newWebView.getSettings().setSaveFormData(view.getSettings().getSaveFormData());
124
- newWebView.getSettings().setSavePassword(view.getSettings().getSavePassword());
125
- newWebView.getSettings().setTextZoom(view.getSettings().getTextZoom());
126
-
127
- newWebView.getSettings().setUseWideViewPort(view.getSettings().getUseWideViewPort());
128
- newWebView.getSettings().setSupportMultipleWindows(true);
129
- newWebView.getSettings().setLayoutAlgorithm(view.getSettings().getLayoutAlgorithm());
130
- newWebView.getSettings().setStandardFontFamily(view.getSettings().getStandardFontFamily());
131
- newWebView.getSettings().setFixedFontFamily(view.getSettings().getFixedFontFamily());
132
- newWebView.getSettings().setSansSerifFontFamily(view.getSettings().getSansSerifFontFamily());
133
- newWebView.getSettings().setSerifFontFamily(view.getSettings().getSerifFontFamily());
134
- newWebView.getSettings().setCursiveFontFamily(view.getSettings().getCursiveFontFamily());
135
- newWebView.getSettings().setFantasyFontFamily(view.getSettings().getFantasyFontFamily());
136
- newWebView.getSettings().setMinimumFontSize(view.getSettings().getMinimumFontSize());
137
- newWebView.getSettings().setMinimumLogicalFontSize(view.getSettings().getMinimumLogicalFontSize());
138
- newWebView.getSettings().setDefaultFontSize(view.getSettings().getDefaultFontSize());
139
- newWebView.getSettings().setDefaultFixedFontSize(view.getSettings().getDefaultFixedFontSize());
140
- newWebView.getSettings().setLoadsImagesAutomatically(view.getSettings().getLoadsImagesAutomatically());
141
- newWebView.getSettings().setBlockNetworkImage(view.getSettings().getBlockNetworkImage());
142
- newWebView.getSettings().setJavaScriptEnabled(view.getSettings().getJavaScriptEnabled());
143
- newWebView.getSettings().setDatabaseEnabled(view.getSettings().getDatabaseEnabled());
144
- newWebView.getSettings().setDomStorageEnabled(view.getSettings().getDomStorageEnabled());
145
-
146
- newWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(view.getSettings().getJavaScriptCanOpenWindowsAutomatically());
147
- newWebView.getSettings().setDefaultTextEncodingName(view.getSettings().getDefaultTextEncodingName());
148
- newWebView.getSettings().setUserAgentString(view.getSettings().getUserAgentString());
149
- newWebView.getSettings().setCacheMode(view.getSettings().getCacheMode());
150
-
151
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
152
- newWebView.getSettings().setMixedContentMode(view.getSettings().getMixedContentMode());
153
- }
154
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
155
- newWebView.getSettings().setSafeBrowsingEnabled(view.getSettings().getSafeBrowsingEnabled());
156
- }
157
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
158
- newWebView.getSettings().setForceDark(view.getSettings().getForceDark());
159
- }
160
113
 
161
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
162
- newWebView.getSettings().setDisabledActionModeMenuItems(view.getSettings().getDisabledActionModeMenuItems());
114
+ // return true;
115
+ if(BootpayUrlHelper.shouldOverrideUrlLoading(view, url)) {
116
+ return true;
117
+ }
118
+ // return shouldOverrideUrlLoadingRN(view, url);
119
+ WritableMap event = Arguments.createMap();
120
+ event.putString("targetUrl", url);
121
+
122
+ ((BPCWebView) view).dispatchEvent(
123
+ view,
124
+ new TopOpenWindowEvent(view.getId(), event)
125
+ );
126
+
127
+ return false;
128
+ }
129
+ });
130
+
131
+ Dialog popupDialog = new Dialog(view.getContext(), android.R.style.Theme_Black_NoTitleBar_Fullscreen);
132
+ popupDialog.setContentView(newWebView);
133
+ ViewGroup.LayoutParams params = popupDialog.getWindow().getAttributes();
134
+ params.width = ViewGroup.LayoutParams.MATCH_PARENT;
135
+ params.height = ViewGroup.LayoutParams.MATCH_PARENT;
136
+ popupDialog.getWindow().setAttributes((WindowManager.LayoutParams) params);
137
+ popupDialog.setOnDismissListener(dialog -> {
138
+ onCloseWindow(view); //rn에선 딱히 동작하지 않음
139
+ });
140
+ newWebView.setDialog(popupDialog);
141
+ popupDialog.show();
142
+
143
+
144
+ final WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
145
+ transport.setWebView(newWebView);
146
+ resultMsg.sendToTarget();
147
+
148
+
149
+ return true;
163
150
  }
164
- }
165
151
 
166
- @Override
167
- public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
168
152
 
169
- if(isDialog) {
153
+ @Override
154
+ public void onCloseWindow(WebView window) {
155
+ super.onCloseWindow(window);
156
+ ((BPCWebView) window).dissmissDialog();
157
+ // if(mainView != null) {
158
+ // mainView.removeView(window);
159
+ // }
160
+ // window.setVisibility(View.GONE);
161
+ }
170
162
 
171
- final BPCWebView newWebView = new BPCWebView((ThemedReactContext) view.getContext());
172
- BPCWebChromeClient client = new BPCWebChromeClient(this.mReactContext, view);
173
- // client.onCloseWindow();
174
- client.setProgressChangedFilter(progressChangedFilter);
175
- newWebView.setWebChromeClient(client);
176
- setWebSettingCopy(view, newWebView);
177
163
 
178
- newWebView.setWebViewClient(new BPCWebViewClient() {
164
+ void setWebSettingCopy(WebView view, WebView newWebView) {
165
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
166
+ newWebView.getSettings().setMediaPlaybackRequiresUserGesture( view.getSettings().getMediaPlaybackRequiresUserGesture() );
167
+ }
179
168
 
180
- @Override
181
- public boolean shouldOverrideUrlLoading(WebView view, String url) {
182
- Intent intent = getIntentWithPackage(url);
183
- Context context = view.getContext();
184
-
185
- if(isIntent(url)) {
186
- if(isInstallApp(intent, context)) return startApp(intent, context);
187
- else return startGooglePlay(intent, context);
188
- } else if(isMarket(url)) {
189
- if(isInstallApp(intent, context)) return startApp(intent, context);
190
- else return startGooglePlay(intent, context);
191
- } else if(isSpecialCase(url)) {
192
- if(isInstallApp(intent, context)) return startApp(intent, context);
193
- else return startGooglePlay(intent, context);
194
- }
195
- return url.contains("vguardend");
169
+ newWebView.getSettings().setBuiltInZoomControls(view.getSettings().getBuiltInZoomControls());
170
+ newWebView.getSettings().setDisplayZoomControls(view.getSettings().getDisplayZoomControls());
171
+ newWebView.getSettings().setAllowFileAccess(view.getSettings().getAllowFileAccess());
172
+ newWebView.getSettings().setAllowContentAccess(view.getSettings().getAllowContentAccess());
173
+ newWebView.getSettings().setLoadWithOverviewMode(view.getSettings().getLoadWithOverviewMode());
174
+ // newWebView.getSettings().setEnableSmoothTransition(view.getSettings().);
175
+ newWebView.getSettings().setSaveFormData(view.getSettings().getSaveFormData());
176
+ newWebView.getSettings().setSavePassword(view.getSettings().getSavePassword());
177
+ newWebView.getSettings().setTextZoom(view.getSettings().getTextZoom());
178
+
179
+ newWebView.getSettings().setUseWideViewPort(view.getSettings().getUseWideViewPort());
180
+ newWebView.getSettings().setSupportMultipleWindows(true);
181
+ newWebView.getSettings().setLayoutAlgorithm(view.getSettings().getLayoutAlgorithm());
182
+ newWebView.getSettings().setStandardFontFamily(view.getSettings().getStandardFontFamily());
183
+ newWebView.getSettings().setFixedFontFamily(view.getSettings().getFixedFontFamily());
184
+ newWebView.getSettings().setSansSerifFontFamily(view.getSettings().getSansSerifFontFamily());
185
+ newWebView.getSettings().setSerifFontFamily(view.getSettings().getSerifFontFamily());
186
+ newWebView.getSettings().setCursiveFontFamily(view.getSettings().getCursiveFontFamily());
187
+ newWebView.getSettings().setFantasyFontFamily(view.getSettings().getFantasyFontFamily());
188
+ newWebView.getSettings().setMinimumFontSize(view.getSettings().getMinimumFontSize());
189
+ newWebView.getSettings().setMinimumLogicalFontSize(view.getSettings().getMinimumLogicalFontSize());
190
+ newWebView.getSettings().setDefaultFontSize(view.getSettings().getDefaultFontSize());
191
+ newWebView.getSettings().setDefaultFixedFontSize(view.getSettings().getDefaultFixedFontSize());
192
+ newWebView.getSettings().setLoadsImagesAutomatically(view.getSettings().getLoadsImagesAutomatically());
193
+ newWebView.getSettings().setBlockNetworkImage(view.getSettings().getBlockNetworkImage());
194
+ newWebView.getSettings().setJavaScriptEnabled(view.getSettings().getJavaScriptEnabled());
195
+ newWebView.getSettings().setDatabaseEnabled(view.getSettings().getDatabaseEnabled());
196
+ newWebView.getSettings().setDomStorageEnabled(view.getSettings().getDomStorageEnabled());
197
+
198
+ newWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(view.getSettings().getJavaScriptCanOpenWindowsAutomatically());
199
+ newWebView.getSettings().setDefaultTextEncodingName(view.getSettings().getDefaultTextEncodingName());
200
+ newWebView.getSettings().setUserAgentString(view.getSettings().getUserAgentString());
201
+ newWebView.getSettings().setCacheMode(view.getSettings().getCacheMode());
202
+
203
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
204
+ newWebView.getSettings().setMixedContentMode(view.getSettings().getMixedContentMode());
205
+ }
206
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
207
+ newWebView.getSettings().setSafeBrowsingEnabled(view.getSettings().getSafeBrowsingEnabled());
208
+ }
209
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
210
+ newWebView.getSettings().setForceDark(view.getSettings().getForceDark());
211
+ }
212
+
213
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
214
+ newWebView.getSettings().setDisabledActionModeMenuItems(view.getSettings().getDisabledActionModeMenuItems());
196
215
  }
197
- });
198
-
199
- Dialog popupDialog = new Dialog(view.getContext(), android.R.style.Theme_Black_NoTitleBar_Fullscreen);
200
- popupDialog.setContentView(newWebView);
201
- ViewGroup.LayoutParams params = popupDialog.getWindow().getAttributes();
202
- params.width = ViewGroup.LayoutParams.MATCH_PARENT;
203
- params.height = ViewGroup.LayoutParams.MATCH_PARENT;
204
- popupDialog.getWindow().setAttributes((WindowManager.LayoutParams) params);
205
- popupDialog.setOnDismissListener(dialog -> {
206
- // Toast.makeText(view.getContext(), "팝업취소", Toast.LENGTH_SHORT).show();
207
- onCloseWindow(view); //rn에선 딱히 동작하지 않음
208
- });
209
- newWebView.setDialog(popupDialog);
210
- popupDialog.show();
211
-
212
- final WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
213
- transport.setWebView(newWebView);
214
- resultMsg.sendToTarget();
215
-
216
- return true;
217
- } else {
218
- final WebView newWebView = new WebView(view.getContext());
219
- final WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
220
- transport.setWebView(newWebView);
221
- resultMsg.sendToTarget();
222
-
223
- return true;
224
216
  }
225
217
 
218
+ @Override
219
+ public boolean onConsoleMessage(ConsoleMessage message) {
220
+ if (ReactBuildConfig.DEBUG) {
221
+ return super.onConsoleMessage(message);
222
+ }
223
+ // Ignore console logs in non debug builds.
224
+ return true;
225
+ }
226
226
 
227
- /*
227
+ @Override
228
+ public void onProgressChanged(WebView webView, int newProgress) {
229
+ super.onProgressChanged(webView, newProgress);
230
+ final String url = webView.getUrl();
231
+ if (progressChangedFilter.isWaitingForCommandLoadUrl()) {
232
+ return;
233
+ }
234
+ WritableMap event = Arguments.createMap();
235
+ event.putDouble("target", webView.getId());
236
+ event.putString("title", webView.getTitle());
237
+ event.putString("url", url);
238
+ event.putBoolean("canGoBack", webView.canGoBack());
239
+ event.putBoolean("canGoForward", webView.canGoForward());
240
+ event.putDouble("progress", (float) newProgress / 100);
241
+
242
+ int reactTag = webView.getId();
243
+ UIManagerHelper.getEventDispatcherForReactTag(this.mWebView.getThemedReactContext(), reactTag).dispatchEvent(new TopLoadingProgressEvent(reactTag, event));
244
+ }
228
245
 
229
- String url = resultMsg.getData().getString("url");
246
+ @Override
247
+ public void onPermissionRequest(final PermissionRequest request) {
248
+
249
+ grantedPermissions = new ArrayList<>();
250
+
251
+ ArrayList<String> requestedAndroidPermissions = new ArrayList<>();
252
+ for (String requestedResource : request.getResources()) {
253
+ String androidPermission = null;
254
+
255
+ if (requestedResource.equals(PermissionRequest.RESOURCE_AUDIO_CAPTURE)) {
256
+ androidPermission = Manifest.permission.RECORD_AUDIO;
257
+ } else if (requestedResource.equals(PermissionRequest.RESOURCE_VIDEO_CAPTURE)) {
258
+ androidPermission = Manifest.permission.CAMERA;
259
+ } else if(requestedResource.equals(PermissionRequest.RESOURCE_PROTECTED_MEDIA_ID)) {
260
+ if (mAllowsProtectedMedia) {
261
+ grantedPermissions.add(requestedResource);
262
+ } else {
263
+ /**
264
+ * Legacy handling (Kept in case it was working under some conditions (given Android version or something))
265
+ *
266
+ * Try to ask user to grant permission using Activity.requestPermissions
267
+ *
268
+ * Find more details here: https://github.com/react-native-webview-bootpay/react-native-webview-bootpay/pull/2732
269
+ */
270
+ androidPermission = PermissionRequest.RESOURCE_PROTECTED_MEDIA_ID;
271
+ } }
272
+ // TODO: RESOURCE_MIDI_SYSEX, RESOURCE_PROTECTED_MEDIA_ID.
273
+ if (androidPermission != null) {
274
+ if (ContextCompat.checkSelfPermission(this.mWebView.getThemedReactContext(), androidPermission) == PackageManager.PERMISSION_GRANTED) {
275
+ grantedPermissions.add(requestedResource);
276
+ } else {
277
+ requestedAndroidPermissions.add(androidPermission);
278
+ }
279
+ }
280
+ }
230
281
 
231
- if(url.startsWith("https://gw.bootpay.co.kr") || url.startsWith("http://gw.bootpay.co.kr")) {
232
- final BPCWebView newWebView = new BPCWebView((ThemedReactContext) view.getContext());
233
- BPCWebChromeClient client = new BPCWebChromeClient(this.mReactContext, view);
234
- // client.onCloseWindow();
235
- client.setProgressChangedFilter(progressChangedFilter);
236
- newWebView.setWebChromeClient(client);
237
- setWebSettingCopy(view, newWebView);
282
+ // If all the permissions are already granted, send the response to the WebView synchronously
283
+ if (requestedAndroidPermissions.isEmpty()) {
284
+ request.grant(grantedPermissions.toArray(new String[0]));
285
+ grantedPermissions = null;
286
+ return;
287
+ }
238
288
 
239
- newWebView.setWebViewClient(new BPCWebViewClient() {
289
+ // Otherwise, ask to Android System for native permissions asynchronously
240
290
 
241
- @Override
242
- public boolean shouldOverrideUrlLoading(WebView view, String url) {
243
- Intent intent = getIntentWithPackage(url);
244
- Context context = view.getContext();
245
-
246
- if(isIntent(url)) {
247
- if(isInstallApp(intent, context)) return startApp(intent, context);
248
- else return startGooglePlay(intent, context);
249
- } else if(isMarket(url)) {
250
- if(isInstallApp(intent, context)) return startApp(intent, context);
251
- else return startGooglePlay(intent, context);
252
- } else if(isSpecialCase(url)) {
253
- if(isInstallApp(intent, context)) return startApp(intent, context);
254
- else return startGooglePlay(intent, context);
255
- }
256
- return url.contains("vguardend");
257
- }
258
- });
259
-
260
- Dialog popupDialog = new Dialog(view.getContext(), android.R.style.Theme_Black_NoTitleBar_Fullscreen);
261
- popupDialog.setContentView(newWebView);
262
- ViewGroup.LayoutParams params = popupDialog.getWindow().getAttributes();
263
- params.width = ViewGroup.LayoutParams.MATCH_PARENT;
264
- params.height = ViewGroup.LayoutParams.MATCH_PARENT;
265
- popupDialog.getWindow().setAttributes((WindowManager.LayoutParams) params);
266
- popupDialog.setOnDismissListener(dialog -> {
267
- // Toast.makeText(view.getContext(), "팝업취소", Toast.LENGTH_SHORT).show();
268
- onCloseWindow(view); //rn에선 딱히 동작하지 않음
269
- });
270
- newWebView.setDialog(popupDialog);
271
- popupDialog.show();
272
-
273
- final WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
274
- transport.setWebView(newWebView);
275
- resultMsg.sendToTarget();
276
-
277
- return true;
278
-
279
- } else {
280
- final WebView newWebView = new WebView(view.getContext());
281
- final WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
282
- transport.setWebView(newWebView);
283
- resultMsg.sendToTarget();
284
-
285
- return true;
291
+ this.permissionRequest = request;
286
292
 
293
+ requestPermissions(requestedAndroidPermissions);
287
294
  }
288
295
 
289
- */
290
-
291
296
 
297
+ @Override
298
+ public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
292
299
 
300
+ if (ContextCompat.checkSelfPermission(this.mWebView.getThemedReactContext(), Manifest.permission.ACCESS_FINE_LOCATION)
301
+ != PackageManager.PERMISSION_GRANTED) {
293
302
 
294
- }
303
+ /*
304
+ * Keep the trace of callback and origin for the async permission request
305
+ */
306
+ geolocationPermissionCallback = callback;
307
+ geolocationPermissionOrigin = origin;
295
308
 
296
- @Override
297
- public boolean onConsoleMessage(ConsoleMessage message) {
298
- if (ReactBuildConfig.DEBUG) {
299
- return super.onConsoleMessage(message);
300
- }
301
- // Ignore console logs in non debug builds.
302
- return true;
303
- }
304
-
305
- @Override
306
- public void onProgressChanged(WebView webView, int newProgress) {
307
- super.onProgressChanged(webView, newProgress);
308
- final String url = webView.getUrl();
309
- if (progressChangedFilter.isWaitingForCommandLoadUrl()) {
310
- return;
311
- }
312
- WritableMap event = Arguments.createMap();
313
- event.putDouble("target", webView.getId());
314
- event.putString("title", webView.getTitle());
315
- event.putString("url", url);
316
- event.putBoolean("canGoBack", webView.canGoBack());
317
- event.putBoolean("canGoForward", webView.canGoForward());
318
- event.putDouble("progress", (float) newProgress / 100);
319
- ((BPCWebView) webView).dispatchEvent(
320
- webView,
321
- new TopLoadingProgressEvent(
322
- webView.getId(),
323
- event));
324
- }
325
-
326
- @TargetApi(Build.VERSION_CODES.LOLLIPOP)
327
- @Override
328
- public void onPermissionRequest(final PermissionRequest request) {
329
-
330
- grantedPermissions = new ArrayList<>();
331
-
332
- ArrayList<String> requestedAndroidPermissions = new ArrayList<>();
333
- for (String requestedResource : request.getResources()) {
334
- String androidPermission = null;
335
-
336
- if (requestedResource.equals(PermissionRequest.RESOURCE_AUDIO_CAPTURE)) {
337
- androidPermission = Manifest.permission.RECORD_AUDIO;
338
- } else if (requestedResource.equals(PermissionRequest.RESOURCE_VIDEO_CAPTURE)) {
339
- androidPermission = Manifest.permission.CAMERA;
340
- } else if(requestedResource.equals(PermissionRequest.RESOURCE_PROTECTED_MEDIA_ID)) {
341
- if (mAllowsProtectedMedia) {
342
- grantedPermissions.add(requestedResource);
343
- } else {
344
- /**
345
- * Legacy handling (Kept in case it was working under some conditions (given Android version or something))
346
- *
347
- * Try to ask user to grant permission using Activity.requestPermissions
348
- *
349
- * Find more details here: https://github.com/react-native-webview/react-native-webview/pull/2732
350
- */
351
- androidPermission = PermissionRequest.RESOURCE_PROTECTED_MEDIA_ID;
352
- }
353
- }
354
- // TODO: RESOURCE_MIDI_SYSEX.
309
+ requestPermissions(Collections.singletonList(Manifest.permission.ACCESS_FINE_LOCATION));
355
310
 
356
- if (androidPermission != null) {
357
- if (ContextCompat.checkSelfPermission(mReactContext, androidPermission) == PackageManager.PERMISSION_GRANTED) {
358
- grantedPermissions.add(requestedResource);
359
311
  } else {
360
- requestedAndroidPermissions.add(androidPermission);
312
+ callback.invoke(origin, true, false);
361
313
  }
362
- }
363
314
  }
364
315
 
365
- // If all the permissions are already granted, send the response to the WebView synchronously
366
- if (requestedAndroidPermissions.isEmpty()) {
367
- request.grant(grantedPermissions.toArray(new String[0]));
368
- grantedPermissions = null;
369
- return;
316
+ private PermissionAwareActivity getPermissionAwareActivity() {
317
+ Activity activity = this.mWebView.getThemedReactContext().getCurrentActivity();
318
+ if (activity == null) {
319
+ throw new IllegalStateException("Tried to use permissions API while not attached to an Activity.");
320
+ } else if (!(activity instanceof PermissionAwareActivity)) {
321
+ throw new IllegalStateException("Tried to use permissions API but the host Activity doesn't implement PermissionAwareActivity.");
322
+ }
323
+ return (PermissionAwareActivity) activity;
370
324
  }
371
325
 
372
- // Otherwise, ask to Android System for native permissions asynchronously
326
+ private synchronized void requestPermissions(List<String> permissions) {
373
327
 
374
- this.permissionRequest = request;
328
+ /*
329
+ * If permissions request dialog is displayed on the screen and another request is sent to the
330
+ * activity, the last permission asked is skipped. As a work-around, we use pendingPermissions
331
+ * to store next required permissions.
332
+ */
375
333
 
376
- requestPermissions(requestedAndroidPermissions);
377
- }
334
+ if (permissionsRequestShown) {
335
+ pendingPermissions.addAll(permissions);
336
+ return;
337
+ }
378
338
 
339
+ PermissionAwareActivity activity = getPermissionAwareActivity();
340
+ permissionsRequestShown = true;
379
341
 
380
- @Override
381
- public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
342
+ activity.requestPermissions(
343
+ permissions.toArray(new String[0]),
344
+ COMMON_PERMISSION_REQUEST,
345
+ webviewPermissionsListener
346
+ );
382
347
 
383
- if (ContextCompat.checkSelfPermission(mReactContext, Manifest.permission.ACCESS_FINE_LOCATION)
384
- != PackageManager.PERMISSION_GRANTED) {
348
+ // Pending permissions have been sent, the list can be cleared
349
+ pendingPermissions.clear();
350
+ }
385
351
 
386
- /*
387
- * Keep the trace of callback and origin for the async permission request
388
- */
389
- geolocationPermissionCallback = callback;
390
- geolocationPermissionOrigin = origin;
391
352
 
392
- requestPermissions(Collections.singletonList(Manifest.permission.ACCESS_FINE_LOCATION));
353
+ private PermissionListener webviewPermissionsListener = (requestCode, permissions, grantResults) -> {
393
354
 
394
- } else {
395
- callback.invoke(origin, true, false);
396
- }
397
- }
398
-
399
- private PermissionAwareActivity getPermissionAwareActivity() {
400
- Activity activity = mReactContext.getCurrentActivity();
401
- if (activity == null) {
402
- throw new IllegalStateException("Tried to use permissions API while not attached to an Activity.");
403
- } else if (!(activity instanceof PermissionAwareActivity)) {
404
- throw new IllegalStateException("Tried to use permissions API but the host Activity doesn't implement PermissionAwareActivity.");
405
- }
406
- return (PermissionAwareActivity) activity;
407
- }
355
+ permissionsRequestShown = false;
408
356
 
409
- private synchronized void requestPermissions(List<String> permissions) {
357
+ /*
358
+ * As a "pending requests" approach is used, requestCode cannot help to define if the request
359
+ * came from geolocation or camera/audio. This is why shouldAnswerToPermissionRequest is used
360
+ */
361
+ boolean shouldAnswerToPermissionRequest = false;
410
362
 
411
- /*
412
- * If permissions request dialog is displayed on the screen and another request is sent to the
413
- * activity, the last permission asked is skipped. As a work-around, we use pendingPermissions
414
- * to store next required permissions.
415
- */
363
+ for (int i = 0; i < permissions.length; i++) {
416
364
 
417
- if (permissionsRequestShown) {
418
- pendingPermissions.addAll(permissions);
419
- return;
420
- }
365
+ String permission = permissions[i];
366
+ boolean granted = grantResults[i] == PackageManager.PERMISSION_GRANTED;
367
+
368
+ if (permission.equals(Manifest.permission.ACCESS_FINE_LOCATION)
369
+ && geolocationPermissionCallback != null
370
+ && geolocationPermissionOrigin != null) {
421
371
 
422
- PermissionAwareActivity activity = getPermissionAwareActivity();
423
- permissionsRequestShown = true;
372
+ if (granted) {
373
+ geolocationPermissionCallback.invoke(geolocationPermissionOrigin, true, false);
374
+ } else {
375
+ geolocationPermissionCallback.invoke(geolocationPermissionOrigin, false, false);
376
+ }
424
377
 
425
- activity.requestPermissions(
426
- permissions.toArray(new String[0]),
427
- COMMON_PERMISSION_REQUEST,
428
- webviewPermissionsListener
429
- );
378
+ geolocationPermissionCallback = null;
379
+ geolocationPermissionOrigin = null;
380
+ }
430
381
 
431
- // Pending permissions have been sent, the list can be cleared
432
- pendingPermissions.clear();
433
- }
382
+ if (permission.equals(Manifest.permission.RECORD_AUDIO)) {
383
+ if (granted && grantedPermissions != null) {
384
+ grantedPermissions.add(PermissionRequest.RESOURCE_AUDIO_CAPTURE);
385
+ }
386
+ shouldAnswerToPermissionRequest = true;
387
+ }
434
388
 
389
+ if (permission.equals(Manifest.permission.CAMERA)) {
390
+ if (granted && grantedPermissions != null) {
391
+ grantedPermissions.add(PermissionRequest.RESOURCE_VIDEO_CAPTURE);
392
+ }
393
+ shouldAnswerToPermissionRequest = true;
394
+ }
435
395
 
436
- @TargetApi(Build.VERSION_CODES.LOLLIPOP)
437
- private PermissionListener webviewPermissionsListener = (requestCode, permissions, grantResults) -> {
396
+ if (permission.equals(PermissionRequest.RESOURCE_PROTECTED_MEDIA_ID)) {
397
+ if (granted && grantedPermissions != null) {
398
+ grantedPermissions.add(PermissionRequest.RESOURCE_PROTECTED_MEDIA_ID);
399
+ }
400
+ shouldAnswerToPermissionRequest = true;
401
+ }
402
+ }
438
403
 
439
- permissionsRequestShown = false;
404
+ if (shouldAnswerToPermissionRequest
405
+ && permissionRequest != null
406
+ && grantedPermissions != null) {
407
+ permissionRequest.grant(grantedPermissions.toArray(new String[0]));
408
+ permissionRequest = null;
409
+ grantedPermissions = null;
410
+ }
440
411
 
441
- /*
442
- * As a "pending requests" approach is used, requestCode cannot help to define if the request
443
- * came from geolocation or camera/audio. This is why shouldAnswerToPermissionRequest is used
444
- */
445
- boolean shouldAnswerToPermissionRequest = false;
412
+ if (!pendingPermissions.isEmpty()) {
413
+ requestPermissions(pendingPermissions);
414
+ return false;
415
+ }
446
416
 
447
- for (int i = 0; i < permissions.length; i++) {
417
+ return true;
418
+ };
448
419
 
449
- String permission = permissions[i];
450
- boolean granted = grantResults[i] == PackageManager.PERMISSION_GRANTED;
420
+ protected void openFileChooser(ValueCallback<Uri> filePathCallback, String acceptType) {
421
+ this.mWebView.getThemedReactContext().getNativeModule(BPCWebViewModule.class).startPhotoPickerIntent(filePathCallback, acceptType);
422
+ }
451
423
 
452
- if (permission.equals(Manifest.permission.ACCESS_FINE_LOCATION)
453
- && geolocationPermissionCallback != null
454
- && geolocationPermissionOrigin != null) {
424
+ protected void openFileChooser(ValueCallback<Uri> filePathCallback) {
425
+ this.mWebView.getThemedReactContext().getNativeModule(BPCWebViewModule.class).startPhotoPickerIntent(filePathCallback, "");
426
+ }
455
427
 
456
- if (granted) {
457
- geolocationPermissionCallback.invoke(geolocationPermissionOrigin, true, false);
458
- } else {
459
- geolocationPermissionCallback.invoke(geolocationPermissionOrigin, false, false);
460
- }
428
+ protected void openFileChooser(ValueCallback<Uri> filePathCallback, String acceptType, String capture) {
429
+ this.mWebView.getThemedReactContext().getNativeModule(BPCWebViewModule.class).startPhotoPickerIntent(filePathCallback, acceptType);
430
+ }
461
431
 
462
- geolocationPermissionCallback = null;
463
- geolocationPermissionOrigin = null;
464
- }
432
+ @Override
433
+ public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {
434
+ String[] acceptTypes = fileChooserParams.getAcceptTypes();
435
+ boolean allowMultiple = fileChooserParams.getMode() == WebChromeClient.FileChooserParams.MODE_OPEN_MULTIPLE;
465
436
 
466
- if (permission.equals(Manifest.permission.RECORD_AUDIO)) {
467
- if (granted && grantedPermissions != null) {
468
- grantedPermissions.add(PermissionRequest.RESOURCE_AUDIO_CAPTURE);
469
- }
470
- shouldAnswerToPermissionRequest = true;
471
- }
437
+ return this.mWebView.getThemedReactContext().getNativeModule(BPCWebViewModule.class).startPhotoPickerIntent(filePathCallback, acceptTypes, allowMultiple, fileChooserParams.isCaptureEnabled());
438
+ }
472
439
 
473
- if (permission.equals(Manifest.permission.CAMERA)) {
474
- if (granted && grantedPermissions != null) {
475
- grantedPermissions.add(PermissionRequest.RESOURCE_VIDEO_CAPTURE);
440
+ @Override
441
+ public void onHostResume() {
442
+ if (mVideoView != null && mVideoView.getSystemUiVisibility() != FULLSCREEN_SYSTEM_UI_VISIBILITY) {
443
+ mVideoView.setSystemUiVisibility(FULLSCREEN_SYSTEM_UI_VISIBILITY);
476
444
  }
477
- shouldAnswerToPermissionRequest = true;
478
- }
445
+ }
479
446
 
480
- if (permission.equals(PermissionRequest.RESOURCE_PROTECTED_MEDIA_ID)) {
481
- if (granted && grantedPermissions != null) {
482
- grantedPermissions.add(PermissionRequest.RESOURCE_PROTECTED_MEDIA_ID);
483
- }
484
- shouldAnswerToPermissionRequest = true;
485
- }
447
+ @Override
448
+ public void onHostPause() { }
449
+
450
+ @Override
451
+ public void onHostDestroy() { }
452
+
453
+ protected ViewGroup getRootView() {
454
+ return this.mWebView.getThemedReactContext().getCurrentActivity().findViewById(android.R.id.content);
486
455
  }
487
456
 
488
- if (shouldAnswerToPermissionRequest
489
- && permissionRequest != null
490
- && grantedPermissions != null) {
491
- permissionRequest.grant(grantedPermissions.toArray(new String[0]));
492
- permissionRequest = null;
493
- grantedPermissions = null;
457
+ public void setProgressChangedFilter(BPCWebView.ProgressChangedFilter filter) {
458
+ progressChangedFilter = filter;
494
459
  }
495
460
 
496
- if (!pendingPermissions.isEmpty()) {
497
- requestPermissions(pendingPermissions);
498
- return false;
461
+ /**
462
+ * Set whether or not protected media should be allowed
463
+ * /!\ Setting this to false won't revoke permission already granted to the current webpage.
464
+ * In order to do so, you'd need to reload the page /!\
465
+ */
466
+ public void setAllowsProtectedMedia(boolean enabled) {
467
+ mAllowsProtectedMedia = enabled;
499
468
  }
500
469
 
501
- return true;
502
- };
503
-
504
- protected void openFileChooser(ValueCallback<Uri> filePathCallback, String acceptType) {
505
- getModule(mReactContext).startPhotoPickerIntent(filePathCallback, acceptType);
506
- }
507
-
508
- protected void openFileChooser(ValueCallback<Uri> filePathCallback) {
509
- getModule(mReactContext).startPhotoPickerIntent(filePathCallback, "");
510
- }
511
-
512
- protected void openFileChooser(ValueCallback<Uri> filePathCallback, String acceptType, String capture) {
513
- getModule(mReactContext).startPhotoPickerIntent(filePathCallback, acceptType);
514
- }
515
-
516
- @TargetApi(Build.VERSION_CODES.LOLLIPOP)
517
- @Override
518
- public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {
519
- String[] acceptTypes = fileChooserParams.getAcceptTypes();
520
- boolean allowMultiple = fileChooserParams.getMode() == WebChromeClient.FileChooserParams.MODE_OPEN_MULTIPLE;
521
- return getModule(mReactContext).startPhotoPickerIntent(filePathCallback, acceptTypes, allowMultiple);
522
- }
523
-
524
- @Override
525
- public void onHostResume() {
526
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && mVideoView != null && mVideoView.getSystemUiVisibility() != FULLSCREEN_SYSTEM_UI_VISIBILITY) {
527
- mVideoView.setSystemUiVisibility(FULLSCREEN_SYSTEM_UI_VISIBILITY);
470
+ public void setHasOnOpenWindowEvent(boolean hasEvent) {
471
+ mHasOnOpenWindowEvent = hasEvent;
528
472
  }
529
- }
530
-
531
- @Override
532
- public void onHostPause() { }
533
-
534
- @Override
535
- public void onHostDestroy() { }
536
-
537
- protected ViewGroup getRootView() {
538
- return (ViewGroup) mReactContext.getCurrentActivity().findViewById(android.R.id.content);
539
- }
540
-
541
- public void setProgressChangedFilter(BPCWebView.ProgressChangedFilter filter) {
542
- progressChangedFilter = filter;
543
- }
544
-
545
- /**
546
- * Set whether or not protected media should be allowed
547
- * /!\ Setting this to false won't revoke permission already granted to the current webpage.
548
- * In order to do so, you'd need to reload the page /!\
549
- */
550
- public void setAllowsProtectedMedia(boolean enabled) {
551
- mAllowsProtectedMedia = enabled;
552
- }
553
473
  }