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