react-native-webview-bootpay 11.26.20 → 13.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -31
- package/android/build.gradle +70 -112
- package/android/gradle.properties +5 -6
- package/android/src/main/java/kr/co/bootpay/webview/BPCBasicAuthCredential.java +11 -0
- package/android/src/main/java/kr/co/bootpay/webview/BPCWebChromeClient.java +354 -434
- package/android/src/main/java/kr/co/bootpay/webview/BPCWebView.java +350 -259
- package/android/src/main/java/kr/co/bootpay/webview/BPCWebViewClient.java +253 -399
- package/android/src/main/java/kr/co/bootpay/webview/{WebViewConfig.java → BPCWebViewConfig.java} +3 -4
- package/android/src/main/java/kr/co/bootpay/webview/BPCWebViewFileProvider.java +1 -1
- package/android/src/main/java/kr/co/bootpay/webview/BPCWebViewManager.java +290 -877
- package/android/src/main/java/kr/co/bootpay/webview/BPCWebViewManagerImpl.kt +664 -0
- package/android/src/main/java/kr/co/bootpay/webview/BPCWebViewModule.java +29 -520
- package/android/src/main/java/kr/co/bootpay/webview/BPCWebViewModuleImpl.java +554 -0
- package/android/src/main/java/kr/co/bootpay/webview/BPCWebViewPackage.java +56 -0
- package/android/src/main/java/kr/co/bootpay/webview/BootpayUrlHelper.java +122 -0
- package/android/src/main/java/kr/co/bootpay/webview/events/TopCustomMenuSelectionEvent.kt +24 -0
- package/android/src/main/java/kr/co/bootpay/webview/events/TopNewWindowEvent.kt +25 -0
- package/android/src/newarch/com/reactnativecommunity/webview/BPCWebViewManager.java +544 -0
- package/android/src/newarch/com/reactnativecommunity/webview/BPCWebViewModule.java +57 -0
- package/apple/BPCWebView.h +22 -126
- package/apple/BPCWebView.mm +528 -0
- package/apple/BPCWebViewDecisionManager.h +20 -0
- package/apple/BPCWebViewDecisionManager.m +47 -0
- package/apple/BPCWebViewImpl.h +150 -0
- package/apple/{BPCWebView.m → BPCWebViewImpl.m} +377 -210
- package/apple/BPCWebViewManager.h +4 -8
- package/apple/{BPCWebViewManager.m → BPCWebViewManager.mm} +93 -149
- package/ios/{BPCWebView.xcodeproj → RNCWebView.xcodeproj}/project.pbxproj +18 -18
- package/ios/main.jsbundle +457 -0
- package/lib/BPCWebViewNativeComponent.d.ts +242 -0
- package/lib/BPCWebViewNativeComponent.d.ts.map +1 -0
- package/lib/BPCWebViewNativeComponent.js +6 -0
- package/lib/NativeBPCWebView.d.ts +10 -0
- package/lib/NativeBPCWebView.d.ts.map +1 -0
- package/lib/NativeBPCWebView.js +2 -0
- package/lib/WebView.android.d.ts.map +1 -1
- package/lib/WebView.android.js +53 -29
- package/lib/WebView.ios.d.ts.map +1 -1
- package/lib/WebView.ios.js +49 -28
- package/lib/WebView.macos.d.ts.map +1 -1
- package/lib/WebView.macos.js +10 -14
- package/lib/WebView.windows.d.ts.map +1 -1
- package/lib/WebView.windows.js +4 -6
- package/lib/WebViewNativeComponent.macos.d.ts +2 -2
- package/lib/WebViewNativeComponent.macos.js +2 -2
- package/lib/WebViewShared.d.ts +4 -2
- package/lib/WebViewShared.d.ts.map +1 -1
- package/lib/WebViewShared.js +8 -2
- package/lib/WebViewTypes.d.ts +62 -95
- package/lib/WebViewTypes.d.ts.map +1 -1
- package/lib/WebViewTypes.js +0 -16
- package/macos/RNCWebView.xcodeproj/project.pbxproj +44 -44
- package/package.json +38 -20
- package/react-native-webview-bootpay.podspec +22 -3
- package/react-native.config.js +1 -2
- package/src/BPCWebViewNativeComponent.ts +281 -0
- package/src/NativeBPCWebView.ts +14 -0
- package/src/WebView.android.tsx +229 -0
- package/src/WebView.ios.tsx +232 -0
- package/src/WebView.macos.tsx +177 -0
- package/src/WebView.styles.ts +44 -0
- package/src/WebView.tsx +18 -0
- package/src/WebView.windows.tsx +156 -0
- package/src/WebViewNativeComponent.macos.ts +8 -0
- package/src/WebViewNativeComponent.windows.ts +10 -0
- package/src/WebViewShared.tsx +235 -0
- package/src/WebViewTypes.ts +1287 -0
- package/src/__tests__/WebViewShared-test.js +208 -0
- package/src/__tests__/__snapshots__/WebViewShared-test.js.snap +8 -0
- package/src/index.ts +4 -0
- package/windows/ReactNativeWebView/ReactNativeWebView.vcxproj +1 -1
- package/windows/ReactNativeWebView/ReactWebView.idl +1 -0
- package/windows/ReactNativeWebView/ReactWebView2.cpp +142 -19
- package/windows/ReactNativeWebView/ReactWebView2.h +3 -0
- package/windows/ReactNativeWebView/ReactWebView2Manager.cpp +29 -5
- package/windows/ReactNativeWebView/pch.h +1 -0
- package/android/.editorconfig +0 -6
- package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/results.bin +0 -1
- package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebChromeClient$1.dex +0 -0
- package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebChromeClient.dex +0 -0
- package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebView$1.dex +0 -0
- package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebView$BPCWebViewBridge.dex +0 -0
- package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebView$ProgressChangedFilter.dex +0 -0
- package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebView.dex +0 -0
- package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebViewClient.dex +0 -0
- package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebViewFileProvider.dex +0 -0
- package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebViewManager$1.dex +0 -0
- package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebViewManager$2.dex +0 -0
- package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebViewManager$3.dex +0 -0
- package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebViewManager$4.dex +0 -0
- package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebViewManager.dex +0 -0
- package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebViewModule$1.dex +0 -0
- package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebViewModule$2.dex +0 -0
- package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebViewModule$MimeType.dex +0 -0
- package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebViewModule$ShouldOverrideUrlLoadingLock$ShouldOverrideCallbackState.dex +0 -0
- package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebViewModule$ShouldOverrideUrlLoadingLock.dex +0 -0
- package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebViewModule.dex +0 -0
- package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BPCWebViewPackage.dex +0 -0
- package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BasicAuthCredential.dex +0 -0
- package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/BuildConfig.dex +0 -0
- package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/URLUtil.dex +0 -0
- package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/WebViewConfig.dex +0 -0
- package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/events/TopHttpErrorEvent$Companion.dex +0 -0
- package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/events/TopHttpErrorEvent.dex +0 -0
- package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/events/TopLoadingErrorEvent$Companion.dex +0 -0
- package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/events/TopLoadingErrorEvent.dex +0 -0
- package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/events/TopLoadingFinishEvent$Companion.dex +0 -0
- package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/events/TopLoadingFinishEvent.dex +0 -0
- package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/events/TopLoadingProgressEvent$Companion.dex +0 -0
- package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/events/TopLoadingProgressEvent.dex +0 -0
- package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/events/TopLoadingStartEvent$Companion.dex +0 -0
- package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/events/TopLoadingStartEvent.dex +0 -0
- package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/events/TopMessageEvent$Companion.dex +0 -0
- package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/events/TopMessageEvent.dex +0 -0
- package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/events/TopRenderProcessGoneEvent$Companion.dex +0 -0
- package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/events/TopRenderProcessGoneEvent.dex +0 -0
- package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/events/TopShouldStartLoadWithRequestEvent$Companion.dex +0 -0
- package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/debug/kr/co/bootpay/webview/events/TopShouldStartLoadWithRequestEvent.dex +0 -0
- package/android/build/.transforms/547b28b34bd585663252523c1a7a53e6/transformed/desugar_graph.bin +0 -0
- package/android/build/.transforms/88c49d67076e4458a9ddee82f875eb6a/results.bin +0 -1
- package/android/build/.transforms/88c49d67076e4458a9ddee82f875eb6a/transformed/classes/classes.dex +0 -0
- package/android/build/.transforms/c0e86b44db04fcaf424a5b7ce79324f4/results.bin +0 -1
- package/android/build/generated/source/buildConfig/debug/kr/co/bootpay/webview/BuildConfig.java +0 -10
- package/android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/AndroidManifest.xml +0 -106
- package/android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/output-metadata.json +0 -18
- package/android/build/intermediates/aar_metadata/debug/aar-metadata.properties +0 -4
- package/android/build/intermediates/annotation_processor_list/debug/annotationProcessors.json +0 -1
- package/android/build/intermediates/compile_library_classes_jar/debug/classes.jar +0 -0
- package/android/build/intermediates/compile_r_class_jar/debug/R.jar +0 -0
- package/android/build/intermediates/compile_symbol_list/debug/R.txt +0 -1861
- package/android/build/intermediates/compiled_local_resources/debug/out/xml_file_provider_paths.xml.flat +0 -0
- package/android/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties +0 -2
- package/android/build/intermediates/incremental/debug/packageDebugResources/merger.xml +0 -2
- package/android/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml +0 -2
- package/android/build/intermediates/incremental/mergeDebugShaders/merger.xml +0 -2
- package/android/build/intermediates/incremental/packageDebugAssets/merger.xml +0 -2
- package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebChromeClient$1.class +0 -0
- package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebChromeClient.class +0 -0
- package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebView$1.class +0 -0
- package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebView$BPCWebViewBridge.class +0 -0
- package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebView$ProgressChangedFilter.class +0 -0
- package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebView.class +0 -0
- package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewClient.class +0 -0
- package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewFileProvider.class +0 -0
- package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewManager$1.class +0 -0
- package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewManager$2.class +0 -0
- package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewManager$3.class +0 -0
- package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewManager$4.class +0 -0
- package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewManager.class +0 -0
- package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewModule$1.class +0 -0
- package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewModule$2.class +0 -0
- package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewModule$MimeType.class +0 -0
- package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewModule$ShouldOverrideUrlLoadingLock$ShouldOverrideCallbackState.class +0 -0
- package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewModule$ShouldOverrideUrlLoadingLock.class +0 -0
- package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BPCWebViewModule.class +0 -0
- package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BasicAuthCredential.class +0 -0
- package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BuildConfig.class +0 -0
- package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/URLUtil.class +0 -0
- package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/WebViewConfig.class +0 -0
- package/android/build/intermediates/library_java_res/debug/res.jar +0 -0
- package/android/build/intermediates/local_only_symbol_list/debug/R-def.txt +0 -3
- package/android/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt +0 -210
- package/android/build/intermediates/merged_manifest/debug/AndroidManifest.xml +0 -106
- package/android/build/intermediates/navigation_json/debug/navigation.json +0 -1
- package/android/build/intermediates/packaged_manifests/debug/output-metadata.json +0 -18
- package/android/build/intermediates/packaged_res/debug/xml/file_provider_paths.xml +0 -6
- package/android/build/intermediates/runtime_library_classes_dir/debug/META-INF/react-native-webview-bootpay_debug.kotlin_module +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebChromeClient$1.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebChromeClient.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebView$1.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebView$BPCWebViewBridge.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebView$ProgressChangedFilter.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebView.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebViewClient.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebViewFileProvider.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebViewManager$1.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebViewManager$2.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebViewManager$3.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebViewManager$4.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebViewManager.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebViewModule$1.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebViewModule$2.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebViewModule$MimeType.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebViewModule$ShouldOverrideUrlLoadingLock$ShouldOverrideCallbackState.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebViewModule$ShouldOverrideUrlLoadingLock.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebViewModule.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BPCWebViewPackage.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BasicAuthCredential.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/BuildConfig.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/URLUtil.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/WebViewConfig.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/events/TopHttpErrorEvent$Companion.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/events/TopHttpErrorEvent.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/events/TopLoadingErrorEvent$Companion.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/events/TopLoadingErrorEvent.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/events/TopLoadingFinishEvent$Companion.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/events/TopLoadingFinishEvent.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/events/TopLoadingProgressEvent$Companion.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/events/TopLoadingProgressEvent.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/events/TopLoadingStartEvent$Companion.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/events/TopLoadingStartEvent.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/events/TopMessageEvent$Companion.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/events/TopMessageEvent.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/events/TopRenderProcessGoneEvent$Companion.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/events/TopRenderProcessGoneEvent.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/events/TopShouldStartLoadWithRequestEvent$Companion.class +0 -0
- package/android/build/intermediates/runtime_library_classes_dir/debug/kr/co/bootpay/webview/events/TopShouldStartLoadWithRequestEvent.class +0 -0
- package/android/build/intermediates/runtime_library_classes_jar/debug/classes.jar +0 -0
- package/android/build/intermediates/symbol_list_with_package_name/debug/package-aware-r.txt +0 -1381
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/inputs/source-to-output.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-attributes.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/constants.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/java-sources-proto-map.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/java-sources-proto-map.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/java-sources-proto-map.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/java-sources-proto-map.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/java-sources-proto-map.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/java-sources-proto-map.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/java-sources-proto-map.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/proto.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/subtypes.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/jvm/kotlin/supertypes.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/counters.tab +0 -2
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/file-to-id.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/id-to-file.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/caches-jvm/lookups/lookups.tab_i.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/cacheable/last-build.bin +0 -0
- package/android/build/kotlin/compileDebugKotlin/local-state/build-history.bin +0 -0
- package/android/build/outputs/logs/manifest-merger-debug-report.txt +0 -229
- package/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin +0 -0
- package/android/build/tmp/kotlin-classes/debug/META-INF/react-native-webview-bootpay_debug.kotlin_module +0 -0
- package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/BPCWebViewPackage.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopHttpErrorEvent$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopHttpErrorEvent.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopLoadingErrorEvent$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopLoadingErrorEvent.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopLoadingFinishEvent$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopLoadingFinishEvent.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopLoadingProgressEvent$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopLoadingProgressEvent.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopLoadingStartEvent$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopLoadingStartEvent.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopMessageEvent$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopMessageEvent.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopRenderProcessGoneEvent$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopRenderProcessGoneEvent.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopShouldStartLoadWithRequestEvent$Companion.class +0 -0
- package/android/build/tmp/kotlin-classes/debug/kr/co/bootpay/webview/events/TopShouldStartLoadWithRequestEvent.class +0 -0
- package/android/src/main/java/kr/co/bootpay/webview/BPCWebViewPackage.kt +0 -15
- package/android/src/main/java/kr/co/bootpay/webview/BasicAuthCredential.java +0 -11
- package/ios/BPCWebView.xcodeproj/project.xcworkspace/contents.xcworkspacedata +0 -7
- package/ios/BPCWebView.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -8
- package/ios/BPCWebView.xcodeproj/project.xcworkspace/xcuserdata/ehowlsla.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/ios/BPCWebView.xcodeproj/xcuserdata/ehowlsla.xcuserdatad/xcschemes/xcschememanagement.plist +0 -14
- package/lib/WebViewNativeComponent.android.d.ts +0 -4
- package/lib/WebViewNativeComponent.android.d.ts.map +0 -1
- package/lib/WebViewNativeComponent.android.js +0 -3
- package/lib/WebViewNativeComponent.ios.d.ts +0 -4
- package/lib/WebViewNativeComponent.ios.d.ts.map +0 -1
- 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
|
|
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
|
-
|
|
47
|
-
|
|
48
|
-
|
|
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
|
-
|
|
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
|
-
|
|
62
|
+
protected BPCWebView mWebView;
|
|
60
63
|
|
|
61
|
-
|
|
62
|
-
|
|
64
|
+
protected View mVideoView;
|
|
65
|
+
protected WebChromeClient.CustomViewCallback mCustomViewCallback;
|
|
63
66
|
|
|
64
|
-
|
|
65
|
-
|
|
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
|
-
|
|
69
|
-
|
|
70
|
-
|
|
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
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
78
|
+
// Webview geolocation permission callback
|
|
79
|
+
protected GeolocationPermissions.Callback geolocationPermissionCallback;
|
|
80
|
+
// Webview geolocation permission origin callback
|
|
81
|
+
protected String geolocationPermissionOrigin;
|
|
77
82
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
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
|
-
|
|
84
|
-
|
|
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
|
-
|
|
91
|
+
protected boolean mHasOnOpenWindowEvent = false;
|
|
89
92
|
|
|
90
|
-
|
|
91
|
-
|
|
93
|
+
public BPCWebChromeClient(BPCWebView webView) {
|
|
94
|
+
this.mWebView = webView;
|
|
95
|
+
}
|
|
92
96
|
|
|
93
|
-
|
|
94
|
-
|
|
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
|
-
|
|
102
|
+
BPCWebChromeClient client = new BPCWebChromeClient(newWebView);
|
|
103
|
+
client.setProgressChangedFilter(progressChangedFilter);
|
|
104
|
+
newWebView.setWebChromeClient(client);
|
|
100
105
|
|
|
101
|
-
|
|
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
|
-
|
|
113
|
-
|
|
114
|
-
|
|
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
|
-
|
|
162
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
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
|
-
|
|
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
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
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
|
-
|
|
289
|
+
// Otherwise, ask to Android System for native permissions asynchronously
|
|
240
290
|
|
|
241
|
-
|
|
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
|
-
|
|
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
|
-
|
|
312
|
+
callback.invoke(origin, true, false);
|
|
361
313
|
}
|
|
362
|
-
}
|
|
363
314
|
}
|
|
364
315
|
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
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
|
-
|
|
326
|
+
private synchronized void requestPermissions(List<String> permissions) {
|
|
373
327
|
|
|
374
|
-
|
|
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
|
-
|
|
377
|
-
|
|
334
|
+
if (permissionsRequestShown) {
|
|
335
|
+
pendingPermissions.addAll(permissions);
|
|
336
|
+
return;
|
|
337
|
+
}
|
|
378
338
|
|
|
339
|
+
PermissionAwareActivity activity = getPermissionAwareActivity();
|
|
340
|
+
permissionsRequestShown = true;
|
|
379
341
|
|
|
380
|
-
|
|
381
|
-
|
|
342
|
+
activity.requestPermissions(
|
|
343
|
+
permissions.toArray(new String[0]),
|
|
344
|
+
COMMON_PERMISSION_REQUEST,
|
|
345
|
+
webviewPermissionsListener
|
|
346
|
+
);
|
|
382
347
|
|
|
383
|
-
|
|
384
|
-
|
|
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
|
-
|
|
353
|
+
private PermissionListener webviewPermissionsListener = (requestCode, permissions, grantResults) -> {
|
|
393
354
|
|
|
394
|
-
|
|
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
|
-
|
|
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
|
-
|
|
418
|
-
|
|
419
|
-
|
|
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
|
-
|
|
423
|
-
|
|
372
|
+
if (granted) {
|
|
373
|
+
geolocationPermissionCallback.invoke(geolocationPermissionOrigin, true, false);
|
|
374
|
+
} else {
|
|
375
|
+
geolocationPermissionCallback.invoke(geolocationPermissionOrigin, false, false);
|
|
376
|
+
}
|
|
424
377
|
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
webviewPermissionsListener
|
|
429
|
-
);
|
|
378
|
+
geolocationPermissionCallback = null;
|
|
379
|
+
geolocationPermissionOrigin = null;
|
|
380
|
+
}
|
|
430
381
|
|
|
431
|
-
|
|
432
|
-
|
|
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
|
-
|
|
437
|
-
|
|
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
|
-
|
|
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
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
boolean shouldAnswerToPermissionRequest = false;
|
|
412
|
+
if (!pendingPermissions.isEmpty()) {
|
|
413
|
+
requestPermissions(pendingPermissions);
|
|
414
|
+
return false;
|
|
415
|
+
}
|
|
446
416
|
|
|
447
|
-
|
|
417
|
+
return true;
|
|
418
|
+
};
|
|
448
419
|
|
|
449
|
-
|
|
450
|
-
|
|
420
|
+
protected void openFileChooser(ValueCallback<Uri> filePathCallback, String acceptType) {
|
|
421
|
+
this.mWebView.getThemedReactContext().getNativeModule(BPCWebViewModule.class).startPhotoPickerIntent(filePathCallback, acceptType);
|
|
422
|
+
}
|
|
451
423
|
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
424
|
+
protected void openFileChooser(ValueCallback<Uri> filePathCallback) {
|
|
425
|
+
this.mWebView.getThemedReactContext().getNativeModule(BPCWebViewModule.class).startPhotoPickerIntent(filePathCallback, "");
|
|
426
|
+
}
|
|
455
427
|
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
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
|
-
|
|
463
|
-
|
|
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
|
-
|
|
467
|
-
|
|
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
|
-
|
|
474
|
-
|
|
475
|
-
|
|
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
|
-
|
|
478
|
-
}
|
|
445
|
+
}
|
|
479
446
|
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
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
|
-
|
|
489
|
-
|
|
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
|
-
|
|
497
|
-
|
|
498
|
-
|
|
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
|
-
|
|
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
|
}
|