react-native-webview-bootpay 11.18.1 → 11.18.11
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/android/.DS_Store +0 -0
- package/android/.gradle/6.8/executionHistory/executionHistory.bin +0 -0
- package/android/.gradle/6.8/executionHistory/executionHistory.lock +0 -0
- package/android/.gradle/6.8/fileHashes/fileHashes.bin +0 -0
- package/android/.gradle/6.8/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/7.0-rc-1/dependencies-accessors/dependencies-accessors.lock +0 -0
- package/android/.gradle/7.0-rc-1/dependencies-accessors/gc.properties +0 -0
- package/android/.gradle/7.0-rc-1/executionHistory/executionHistory.lock +0 -0
- package/android/.gradle/7.0-rc-1/fileChanges/last-build.bin +0 -0
- package/android/.gradle/7.0-rc-1/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/7.0-rc-1/gc.properties +0 -0
- package/android/.gradle/7.1.1/dependencies-accessors/dependencies-accessors.lock +0 -0
- package/android/.gradle/7.1.1/executionHistory/executionHistory.lock +0 -0
- package/android/.gradle/7.1.1/fileHashes/fileHashes.lock +0 -0
- package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
- package/android/.gradle/buildOutputCleanup/cache.properties +1 -1
- package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
- package/android/.gradle/checksums/checksums.lock +0 -0
- package/android/.gradle/checksums/md5-checksums.bin +0 -0
- package/android/.gradle/checksums/sha1-checksums.bin +0 -0
- package/android/.idea/jarRepositories.xml +8 -3
- package/android/.idea/libraries/Gradle__androidx_annotation_annotation_1_0_0.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_appcompat_appcompat_1_0_2_aar.xml +4 -4
- package/android/.idea/libraries/Gradle__androidx_arch_core_core_runtime_2_0_0_aar.xml +3 -3
- package/android/.idea/libraries/Gradle__androidx_asynclayoutinflater_asynclayoutinflater_1_0_0_aar.xml +3 -3
- package/android/.idea/libraries/Gradle__androidx_coordinatorlayout_coordinatorlayout_1_0_0_aar.xml +4 -4
- package/android/.idea/libraries/Gradle__androidx_core_core_1_0_1_aar.xml +16 -0
- package/android/.idea/libraries/Gradle__androidx_cursoradapter_cursoradapter_1_0_0_aar.xml +3 -3
- package/android/.idea/libraries/Gradle__androidx_customview_customview_1_0_0_aar.xml +3 -3
- package/android/.idea/libraries/Gradle__androidx_documentfile_documentfile_1_0_0_aar.xml +3 -3
- package/android/.idea/libraries/Gradle__androidx_drawerlayout_drawerlayout_1_0_0_aar.xml +4 -4
- package/android/.idea/libraries/Gradle__androidx_fragment_fragment_1_0_0_aar.xml +4 -4
- package/android/.idea/libraries/Gradle__androidx_interpolator_interpolator_1_0_0_aar.xml +3 -3
- package/android/.idea/libraries/Gradle__androidx_legacy_legacy_support_core_ui_1_0_0_aar.xml +3 -3
- package/android/.idea/libraries/Gradle__androidx_legacy_legacy_support_core_utils_1_0_0_aar.xml +3 -3
- package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_2_0_0_aar.xml +3 -3
- package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_core_2_0_0_aar.xml +3 -3
- package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_2_0_0_aar.xml +3 -3
- package/android/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_2_0_0_aar.xml +3 -3
- package/android/.idea/libraries/Gradle__androidx_loader_loader_1_0_0_aar.xml +3 -3
- package/android/.idea/libraries/Gradle__androidx_localbroadcastmanager_localbroadcastmanager_1_0_0_aar.xml +3 -3
- package/android/.idea/libraries/Gradle__androidx_print_print_1_0_0_aar.xml +4 -4
- package/android/.idea/libraries/Gradle__androidx_slidingpanelayout_slidingpanelayout_1_0_0_aar.xml +3 -3
- package/android/.idea/libraries/Gradle__androidx_swiperefreshlayout_swiperefreshlayout_1_0_0_aar.xml +4 -4
- package/android/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_1_0_1_aar.xml +3 -3
- package/android/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_animated_1_0_0_aar.xml +3 -3
- package/android/.idea/libraries/Gradle__androidx_versionedparcelable_versionedparcelable_1_0_0_aar.xml +13 -0
- package/android/.idea/libraries/Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml +3 -3
- package/android/.idea/libraries/Gradle__com_facebook_fbjni_fbjni_java_only_0_0_3.xml +13 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_drawee_2_0_0_aar.xml +15 -0
- package/android/.idea/libraries/{Gradle__com_facebook_fresco_fbcore_2_5_0_aar.xml → Gradle__com_facebook_fresco_fbcore_2_0_0_aar.xml} +7 -7
- package/android/.idea/libraries/Gradle__com_facebook_fresco_fresco_2_0_0_aar.xml +18 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_2_0_0_aar.xml +18 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_base_2_0_0_aar.xml +18 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_okhttp3_2_0_0_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_nativeimagefilters_2_0_0_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_fresco_nativeimagetranscoder_2_0_0_aar.xml +15 -0
- package/android/.idea/libraries/{Gradle__com_facebook_infer_annotation_infer_annotation_0_18_0.xml → Gradle__com_facebook_infer_annotation_infer_annotation_0_11_2.xml} +4 -4
- package/android/.idea/libraries/Gradle__com_facebook_react_react_native_0_62_2_aar.xml +18 -0
- package/android/.idea/libraries/Gradle__com_facebook_soloader_annotation_0_8_0_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_soloader_nativeloader_0_8_0.xml +13 -0
- package/android/.idea/libraries/Gradle__com_facebook_soloader_soloader_0_8_0_aar.xml +15 -0
- package/android/.idea/libraries/Gradle__com_facebook_yoga_proguard_annotations_1_14_1.xml +13 -0
- package/android/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_3_12_1.xml +13 -0
- package/android/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_urlconnection_3_12_1.xml +13 -0
- package/android/.idea/libraries/Gradle__com_squareup_okio_okio_1_15_0.xml +13 -0
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_3_50.xml +13 -0
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_3_50.xml +13 -0
- package/android/.idea/modules/android.iml +33 -42
- package/android/.project +34 -0
- package/android/.settings/org.eclipse.buildship.core.prefs +13 -0
- package/android/build/.transforms/{cef19407ab645b1b4c01cb89efaec997 → 4e87ba7f47baac309fba5367e008cf44}/results.bin +0 -0
- package/android/build/.transforms/4e87ba7f47baac309fba5367e008cf44/transformed/classes/classes.dex +0 -0
- package/android/build/.transforms/d5207f219c4292752e7af446f7cc2789/classes/classes.dex +0 -0
- package/android/build/.transforms/d5207f219c4292752e7af446f7cc2789.bin +1 -0
- package/android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/AndroidManifest.xml +79 -0
- package/android/build/intermediates/compile_library_classes_jar/debug/classes.jar +0 -0
- package/android/build/intermediates/compiled_local_resources/debug/out/xml_file_provider_paths.xml.flat +0 -0
- package/android/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml +1 -1
- package/android/build/intermediates/incremental/mergeDebugShaders/merger.xml +1 -1
- package/android/build/intermediates/incremental/packageDebugAssets/merger.xml +1 -1
- package/android/build/intermediates/incremental/packageDebugResources/compile-file-map.properties +2 -2
- package/android/build/intermediates/incremental/packageDebugResources/merger.xml +1 -1
- 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/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.class +0 -0
- package/android/build/intermediates/library_java_res/debug/res.jar +0 -0
- package/android/build/intermediates/library_manifest/debug/AndroidManifest.xml +102 -0
- package/android/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt +192 -24
- package/android/build/intermediates/merged_manifest/debug/AndroidManifest.xml +79 -0
- package/android/build/intermediates/runtime_library_classes_jar/debug/classes.jar +0 -0
- package/android/build/kotlin/compileDebugKotlin/build-history.bin +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/inputs/source-to-output.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/inputs/source-to-output.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/inputs/source-to-output.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/inputs/source-to-output.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/inputs/source-to-output.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/proto.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/proto.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/lookups/file-to-id.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/lookups/file-to-id.tab.keystream +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/lookups/file-to-id.tab.keystream.len +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/lookups/file-to-id.tab_i +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/lookups/id-to-file.tab +0 -0
- package/android/build/kotlin/compileDebugKotlin/caches-jvm/lookups/id-to-file.tab.values.at +0 -0
- package/android/build/kotlin/compileDebugKotlin/last-build.bin +0 -0
- package/android/build/outputs/logs/manifest-merger-debug-report.txt +205 -27
- package/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin +0 -0
- package/android/build/tmp/compileDebugJavaWithJavac/source-classes-mapping.txt +29 -0
- package/android/build/tmp/kotlin-classes/debug/META-INF/{react-native-webview_debug.kotlin_module → 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/build.gradle +5 -5
- package/android/gradle.properties +6 -6
- package/android/local.properties +1 -1
- package/android/src/.DS_Store +0 -0
- package/android/src/main/.DS_Store +0 -0
- package/android/src/main/AndroidManifest.xml +75 -0
- package/android/src/main/java/.DS_Store +0 -0
- package/android/src/main/java/kr/.DS_Store +0 -0
- package/android/src/main/java/kr/co/.DS_Store +0 -0
- package/android/src/main/java/kr/co/bootpay/.DS_Store +0 -0
- package/android/src/main/java/kr/co/bootpay/webview/BPCWebChromeClient.java +120 -2
- package/android/src/main/java/kr/co/bootpay/webview/BPCWebView.java +11 -26
- package/android/src/main/java/kr/co/bootpay/webview/BPCWebViewClient.java +119 -134
- package/android/src/main/java/kr/co/bootpay/webview/BPCWebViewManager.java +49 -95
- package/apple/BPCWebView.m +64 -86
- package/ios/.DS_Store +0 -0
- package/ios/RNCWebView.xcodeproj/project.pbxproj +18 -18
- package/ios/RNCWebView.xcodeproj/project.xcworkspace/xcuserdata/bootpay.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/ios/RNCWebView.xcodeproj/xcuserdata/bootpay.xcuserdatad/xcschemes/xcschememanagement.plist +0 -8
- package/lib/WebViewNativeComponent.windows.js +2 -2
- package/package.json +6 -7
- package/react-native.config.js +1 -1
- package/android/.idea/libraries/Gradle__androidx_annotation_annotation_1_1_0.xml +0 -13
- package/android/.idea/libraries/Gradle__androidx_autofill_autofill_1_1_0_aar.xml +0 -16
- package/android/.idea/libraries/Gradle__androidx_core_core_1_1_0_aar.xml +0 -16
- package/android/.idea/libraries/Gradle__androidx_versionedparcelable_versionedparcelable_1_1_0_aar.xml +0 -13
- package/android/.idea/libraries/Gradle__androidx_webkit_webkit_1_4_0_aar.xml +0 -16
- package/android/.idea/libraries/Gradle__com_facebook_fbjni_fbjni_java_only_0_2_2.xml +0 -13
- package/android/.idea/libraries/Gradle__com_facebook_fresco_drawee_2_5_0_aar.xml +0 -15
- package/android/.idea/libraries/Gradle__com_facebook_fresco_fresco_2_5_0_aar.xml +0 -18
- package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_2_5_0_aar.xml +0 -18
- package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_base_2_5_0_aar.xml +0 -18
- package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_native_2_5_0_aar.xml +0 -15
- package/android/.idea/libraries/Gradle__com_facebook_fresco_imagepipeline_okhttp3_2_5_0_aar.xml +0 -15
- package/android/.idea/libraries/Gradle__com_facebook_fresco_memory_type_ashmem_2_5_0_aar.xml +0 -15
- package/android/.idea/libraries/Gradle__com_facebook_fresco_memory_type_java_2_5_0_aar.xml +0 -15
- package/android/.idea/libraries/Gradle__com_facebook_fresco_memory_type_native_2_5_0_aar.xml +0 -15
- package/android/.idea/libraries/Gradle__com_facebook_fresco_nativeimagefilters_2_5_0_aar.xml +0 -15
- package/android/.idea/libraries/Gradle__com_facebook_fresco_nativeimagetranscoder_2_5_0_aar.xml +0 -15
- package/android/.idea/libraries/Gradle__com_facebook_fresco_ui_common_2_5_0_aar.xml +0 -15
- package/android/.idea/libraries/Gradle__com_facebook_react_react_native_0_66_4_aar.xml +0 -14
- package/android/.idea/libraries/Gradle__com_facebook_soloader_annotation_0_10_1.xml +0 -13
- package/android/.idea/libraries/Gradle__com_facebook_soloader_nativeloader_0_10_1.xml +0 -13
- package/android/.idea/libraries/Gradle__com_facebook_soloader_soloader_0_10_1_aar.xml +0 -15
- package/android/.idea/libraries/Gradle__com_facebook_yoga_proguard_annotations_1_19_0.xml +0 -13
- package/android/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_4_9_1.xml +0 -13
- package/android/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_urlconnection_4_9_1.xml +0 -13
- package/android/.idea/libraries/Gradle__com_squareup_okio_okio_2_9_0.xml +0 -13
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_annotations_jvm_1_3_72.xml +0 -13
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_4_10.xml +0 -13
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_4_10.xml +0 -13
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_4_10.xml +0 -13
- package/android/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk8_1_4_10.xml +0 -13
- package/android/build/.transforms/cef19407ab645b1b4c01cb89efaec997/transformed/classes/classes.dex +0 -0
- package/android/build/intermediates/javac/debug/classes/kr/co/bootpay/webview/BasicAuthCredential.class +0 -0
- package/android/src/main/java/kr/co/bootpay/webview/BasicAuthCredential.java +0 -12
- package/ios/RNCWebView.xcodeproj/xcshareddata/xcschemes/RNCWebView.xcscheme +0 -68
|
@@ -3,6 +3,11 @@ package kr.co.bootpay.webview;
|
|
|
3
3
|
import android.Manifest;
|
|
4
4
|
import android.annotation.TargetApi;
|
|
5
5
|
import android.app.Activity;
|
|
6
|
+
import android.app.Dialog;
|
|
7
|
+
import android.content.ActivityNotFoundException;
|
|
8
|
+
import android.content.Context;
|
|
9
|
+
import android.content.DialogInterface;
|
|
10
|
+
import android.content.Intent;
|
|
6
11
|
import android.content.pm.PackageManager;
|
|
7
12
|
import android.net.Uri;
|
|
8
13
|
import android.os.Build;
|
|
@@ -10,13 +15,18 @@ import android.os.Message;
|
|
|
10
15
|
import android.view.Gravity;
|
|
11
16
|
import android.view.View;
|
|
12
17
|
import android.view.ViewGroup;
|
|
18
|
+
import android.view.WindowManager;
|
|
13
19
|
import android.webkit.ConsoleMessage;
|
|
14
20
|
import android.webkit.GeolocationPermissions;
|
|
15
21
|
import android.webkit.PermissionRequest;
|
|
16
22
|
import android.webkit.ValueCallback;
|
|
17
23
|
import android.webkit.WebChromeClient;
|
|
24
|
+
import android.webkit.WebResourceRequest;
|
|
18
25
|
import android.webkit.WebView;
|
|
26
|
+
import android.webkit.WebViewClient;
|
|
19
27
|
import android.widget.FrameLayout;
|
|
28
|
+
import android.widget.LinearLayout;
|
|
29
|
+
import android.widget.Toast;
|
|
20
30
|
|
|
21
31
|
import androidx.annotation.RequiresApi;
|
|
22
32
|
import androidx.core.content.ContextCompat;
|
|
@@ -28,7 +38,9 @@ import com.facebook.react.bridge.WritableMap;
|
|
|
28
38
|
import com.facebook.react.common.build.ReactBuildConfig;
|
|
29
39
|
import com.facebook.react.modules.core.PermissionAwareActivity;
|
|
30
40
|
import com.facebook.react.modules.core.PermissionListener;
|
|
41
|
+
import com.facebook.react.uimanager.ThemedReactContext;
|
|
31
42
|
|
|
43
|
+
import java.net.URISyntaxException;
|
|
32
44
|
import java.util.ArrayList;
|
|
33
45
|
import java.util.Collections;
|
|
34
46
|
import java.util.List;
|
|
@@ -84,10 +96,114 @@ class BPCWebChromeClient extends WebChromeClient implements LifecycleEventListen
|
|
|
84
96
|
this.mWebView = webView;
|
|
85
97
|
}
|
|
86
98
|
|
|
99
|
+
// Dialog popupDialog;
|
|
100
|
+
@Override
|
|
101
|
+
public void onCloseWindow(WebView window) {
|
|
102
|
+
super.onCloseWindow(window);
|
|
103
|
+
((BPCWebView) window).dissmissDialog();
|
|
104
|
+
window.setVisibility(View.GONE);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
void setWebSettingCopy(WebView view, WebView newWebView) {
|
|
108
|
+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
|
|
109
|
+
newWebView.getSettings().setMediaPlaybackRequiresUserGesture( view.getSettings().getMediaPlaybackRequiresUserGesture() );
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
newWebView.getSettings().setBuiltInZoomControls(view.getSettings().getBuiltInZoomControls());
|
|
113
|
+
newWebView.getSettings().setDisplayZoomControls(view.getSettings().getDisplayZoomControls());
|
|
114
|
+
newWebView.getSettings().setAllowFileAccess(view.getSettings().getAllowFileAccess());
|
|
115
|
+
newWebView.getSettings().setAllowContentAccess(view.getSettings().getAllowContentAccess());
|
|
116
|
+
newWebView.getSettings().setLoadWithOverviewMode(view.getSettings().getLoadWithOverviewMode());
|
|
117
|
+
// newWebView.getSettings().setEnableSmoothTransition(view.getSettings().);
|
|
118
|
+
newWebView.getSettings().setSaveFormData(view.getSettings().getSaveFormData());
|
|
119
|
+
newWebView.getSettings().setSavePassword(view.getSettings().getSavePassword());
|
|
120
|
+
newWebView.getSettings().setTextZoom(view.getSettings().getTextZoom());
|
|
121
|
+
|
|
122
|
+
newWebView.getSettings().setUseWideViewPort(view.getSettings().getUseWideViewPort());
|
|
123
|
+
newWebView.getSettings().setSupportMultipleWindows(true);
|
|
124
|
+
newWebView.getSettings().setLayoutAlgorithm(view.getSettings().getLayoutAlgorithm());
|
|
125
|
+
newWebView.getSettings().setStandardFontFamily(view.getSettings().getStandardFontFamily());
|
|
126
|
+
newWebView.getSettings().setFixedFontFamily(view.getSettings().getFixedFontFamily());
|
|
127
|
+
newWebView.getSettings().setSansSerifFontFamily(view.getSettings().getSansSerifFontFamily());
|
|
128
|
+
newWebView.getSettings().setSerifFontFamily(view.getSettings().getSerifFontFamily());
|
|
129
|
+
newWebView.getSettings().setCursiveFontFamily(view.getSettings().getCursiveFontFamily());
|
|
130
|
+
newWebView.getSettings().setFantasyFontFamily(view.getSettings().getFantasyFontFamily());
|
|
131
|
+
newWebView.getSettings().setMinimumFontSize(view.getSettings().getMinimumFontSize());
|
|
132
|
+
newWebView.getSettings().setMinimumLogicalFontSize(view.getSettings().getMinimumLogicalFontSize());
|
|
133
|
+
newWebView.getSettings().setDefaultFontSize(view.getSettings().getDefaultFontSize());
|
|
134
|
+
newWebView.getSettings().setDefaultFixedFontSize(view.getSettings().getDefaultFixedFontSize());
|
|
135
|
+
newWebView.getSettings().setLoadsImagesAutomatically(view.getSettings().getLoadsImagesAutomatically());
|
|
136
|
+
newWebView.getSettings().setBlockNetworkImage(view.getSettings().getBlockNetworkImage());
|
|
137
|
+
newWebView.getSettings().setJavaScriptEnabled(view.getSettings().getJavaScriptEnabled());
|
|
138
|
+
newWebView.getSettings().setDatabaseEnabled(view.getSettings().getDatabaseEnabled());
|
|
139
|
+
newWebView.getSettings().setDomStorageEnabled(view.getSettings().getDomStorageEnabled());
|
|
140
|
+
|
|
141
|
+
newWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(view.getSettings().getJavaScriptCanOpenWindowsAutomatically());
|
|
142
|
+
newWebView.getSettings().setDefaultTextEncodingName(view.getSettings().getDefaultTextEncodingName());
|
|
143
|
+
newWebView.getSettings().setUserAgentString(view.getSettings().getUserAgentString());
|
|
144
|
+
newWebView.getSettings().setCacheMode(view.getSettings().getCacheMode());
|
|
145
|
+
|
|
146
|
+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
|
147
|
+
newWebView.getSettings().setMixedContentMode(view.getSettings().getMixedContentMode());
|
|
148
|
+
}
|
|
149
|
+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
|
150
|
+
newWebView.getSettings().setSafeBrowsingEnabled(view.getSettings().getSafeBrowsingEnabled());
|
|
151
|
+
}
|
|
152
|
+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
|
153
|
+
newWebView.getSettings().setForceDark(view.getSettings().getForceDark());
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
|
157
|
+
newWebView.getSettings().setDisabledActionModeMenuItems(view.getSettings().getDisabledActionModeMenuItems());
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
87
161
|
@Override
|
|
88
162
|
public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
|
|
89
163
|
|
|
90
|
-
final
|
|
164
|
+
final BPCWebView newWebView = new BPCWebView((ThemedReactContext) view.getContext());
|
|
165
|
+
BPCWebChromeClient client = new BPCWebChromeClient(this.mReactContext, view);
|
|
166
|
+
// client.onCloseWindow();
|
|
167
|
+
client.setProgressChangedFilter(progressChangedFilter);
|
|
168
|
+
|
|
169
|
+
newWebView.setWebChromeClient(client);
|
|
170
|
+
|
|
171
|
+
setWebSettingCopy(view, newWebView);
|
|
172
|
+
|
|
173
|
+
newWebView.setWebViewClient(new BPCWebViewClient() {
|
|
174
|
+
|
|
175
|
+
@Override
|
|
176
|
+
public boolean shouldOverrideUrlLoading(WebView view, String url) {
|
|
177
|
+
Intent intent = getIntentWithPackage(url);
|
|
178
|
+
Context context = view.getContext();
|
|
179
|
+
|
|
180
|
+
if(isIntent(url)) {
|
|
181
|
+
if(isInstallApp(intent, context)) return startApp(intent, context);
|
|
182
|
+
else return startGooglePlay(intent, context);
|
|
183
|
+
} else if(isMarket(url)) {
|
|
184
|
+
if(isInstallApp(intent, context)) return startApp(intent, context);
|
|
185
|
+
else return startGooglePlay(intent, context);
|
|
186
|
+
} else if(isSpecialCase(url)) {
|
|
187
|
+
if(isInstallApp(intent, context)) return startApp(intent, context);
|
|
188
|
+
else return startGooglePlay(intent, context);
|
|
189
|
+
}
|
|
190
|
+
return url.contains("vguardend");
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
Dialog popupDialog = new Dialog(view.getContext(), android.R.style.Theme_Black_NoTitleBar_Fullscreen);
|
|
195
|
+
popupDialog.setContentView(newWebView);
|
|
196
|
+
ViewGroup.LayoutParams params = popupDialog.getWindow().getAttributes();
|
|
197
|
+
params.width = ViewGroup.LayoutParams.MATCH_PARENT;
|
|
198
|
+
params.height = ViewGroup.LayoutParams.MATCH_PARENT;
|
|
199
|
+
popupDialog.getWindow().setAttributes((WindowManager.LayoutParams) params);
|
|
200
|
+
popupDialog.setOnDismissListener(dialog -> {
|
|
201
|
+
// Toast.makeText(view.getContext(), "팝업취소", Toast.LENGTH_SHORT).show();
|
|
202
|
+
onCloseWindow(view); //rn에선 딱히 동작하지 않음
|
|
203
|
+
});
|
|
204
|
+
newWebView.setDialog(popupDialog);
|
|
205
|
+
popupDialog.show();
|
|
206
|
+
|
|
91
207
|
final WebView.WebViewTransport transport = (WebView.WebViewTransport) resultMsg.obj;
|
|
92
208
|
transport.setWebView(newWebView);
|
|
93
209
|
resultMsg.sendToTarget();
|
|
@@ -118,6 +234,8 @@ class BPCWebChromeClient extends WebChromeClient implements LifecycleEventListen
|
|
|
118
234
|
event.putBoolean("canGoBack", webView.canGoBack());
|
|
119
235
|
event.putBoolean("canGoForward", webView.canGoForward());
|
|
120
236
|
event.putDouble("progress", (float) newProgress / 100);
|
|
237
|
+
|
|
238
|
+
|
|
121
239
|
((BPCWebView) webView).dispatchEvent(
|
|
122
240
|
webView,
|
|
123
241
|
new TopLoadingProgressEvent(
|
|
@@ -332,4 +450,4 @@ class BPCWebChromeClient extends WebChromeClient implements LifecycleEventListen
|
|
|
332
450
|
public void setProgressChangedFilter(BPCWebView.ProgressChangedFilter filter) {
|
|
333
451
|
progressChangedFilter = filter;
|
|
334
452
|
}
|
|
335
|
-
}
|
|
453
|
+
}
|
|
@@ -4,7 +4,6 @@ import android.annotation.SuppressLint;
|
|
|
4
4
|
import android.app.Dialog;
|
|
5
5
|
import android.os.Build;
|
|
6
6
|
import android.text.TextUtils;
|
|
7
|
-
import android.view.MotionEvent;
|
|
8
7
|
import android.webkit.JavascriptInterface;
|
|
9
8
|
import android.webkit.WebChromeClient;
|
|
10
9
|
import android.webkit.WebView;
|
|
@@ -33,10 +32,13 @@ import java.net.URLEncoder;
|
|
|
33
32
|
|
|
34
33
|
import kr.co.bootpay.webview.events.TopMessageEvent;
|
|
35
34
|
|
|
35
|
+
|
|
36
|
+
|
|
36
37
|
/**
|
|
37
38
|
* Subclass of {@link WebView} that implements {@link LifecycleEventListener} interface in order
|
|
38
39
|
* to call {@link WebView#destroy} on activity destroy event and also to clear the client
|
|
39
40
|
*/
|
|
41
|
+
|
|
40
42
|
class BPCWebView extends WebView implements LifecycleEventListener {
|
|
41
43
|
Dialog dialog; //popup dialog
|
|
42
44
|
public void setDialog(Dialog dialog) {
|
|
@@ -64,13 +66,12 @@ class BPCWebView extends WebView implements LifecycleEventListener {
|
|
|
64
66
|
protected @Nullable
|
|
65
67
|
String messagingModuleName;
|
|
66
68
|
protected @Nullable
|
|
67
|
-
BPCWebViewClient
|
|
69
|
+
BPCWebViewClient mbpCWebViewlient;
|
|
68
70
|
protected @Nullable
|
|
69
71
|
CatalystInstance mCatalystInstance;
|
|
70
72
|
protected boolean sendContentSizeChangeEvents = false;
|
|
71
73
|
private OnScrollDispatchHelper mOnScrollDispatchHelper;
|
|
72
74
|
protected boolean hasScrollEvent = false;
|
|
73
|
-
protected boolean nestedScrollEnabled = false;
|
|
74
75
|
protected ProgressChangedFilter progressChangedFilter;
|
|
75
76
|
|
|
76
77
|
protected static final String JAVASCRIPT_INTERFACE = "BootpayRNWebView";
|
|
@@ -88,11 +89,7 @@ class BPCWebView extends WebView implements LifecycleEventListener {
|
|
|
88
89
|
}
|
|
89
90
|
|
|
90
91
|
public void setIgnoreErrFailedForThisURL(String url) {
|
|
91
|
-
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
public void setBasicAuthCredential(BasicAuthCredential credential) {
|
|
95
|
-
mbpCWebViewClient.setBasicAuthCredential(credential);
|
|
92
|
+
mbpCWebViewlient.setIgnoreErrFailedForThisURL(url);
|
|
96
93
|
}
|
|
97
94
|
|
|
98
95
|
public void setSendContentSizeChangeEvents(boolean sendContentSizeChangeEvents) {
|
|
@@ -103,10 +100,6 @@ class BPCWebView extends WebView implements LifecycleEventListener {
|
|
|
103
100
|
this.hasScrollEvent = hasScrollEvent;
|
|
104
101
|
}
|
|
105
102
|
|
|
106
|
-
public void setNestedScrollEnabled(boolean nestedScrollEnabled) {
|
|
107
|
-
this.nestedScrollEnabled = nestedScrollEnabled;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
103
|
@Override
|
|
111
104
|
public void onHostResume() {
|
|
112
105
|
// do nothing
|
|
@@ -122,14 +115,6 @@ class BPCWebView extends WebView implements LifecycleEventListener {
|
|
|
122
115
|
cleanupCallbacksAndDestroy();
|
|
123
116
|
}
|
|
124
117
|
|
|
125
|
-
@Override
|
|
126
|
-
public boolean onTouchEvent(MotionEvent event) {
|
|
127
|
-
if (this.nestedScrollEnabled) {
|
|
128
|
-
requestDisallowInterceptTouchEvent(true);
|
|
129
|
-
}
|
|
130
|
-
return super.onTouchEvent(event);
|
|
131
|
-
}
|
|
132
|
-
|
|
133
118
|
@Override
|
|
134
119
|
protected void onSizeChanged(int w, int h, int ow, int oh) {
|
|
135
120
|
super.onSizeChanged(w, h, ow, oh);
|
|
@@ -150,8 +135,8 @@ class BPCWebView extends WebView implements LifecycleEventListener {
|
|
|
150
135
|
public void setWebViewClient(WebViewClient client) {
|
|
151
136
|
super.setWebViewClient(client);
|
|
152
137
|
if (client instanceof BPCWebViewClient) {
|
|
153
|
-
|
|
154
|
-
|
|
138
|
+
mbpCWebViewlient = (BPCWebViewClient) client;
|
|
139
|
+
mbpCWebViewlient.setProgressChangedFilter(progressChangedFilter);
|
|
155
140
|
}
|
|
156
141
|
}
|
|
157
142
|
|
|
@@ -167,7 +152,7 @@ class BPCWebView extends WebView implements LifecycleEventListener {
|
|
|
167
152
|
|
|
168
153
|
public @Nullable
|
|
169
154
|
BPCWebViewClient getBPCWebViewClient() {
|
|
170
|
-
return
|
|
155
|
+
return mbpCWebViewlient;
|
|
171
156
|
}
|
|
172
157
|
|
|
173
158
|
public void setInjectedJavaScript(@Nullable String js) {
|
|
@@ -251,15 +236,15 @@ class BPCWebView extends WebView implements LifecycleEventListener {
|
|
|
251
236
|
ReactContext reactContext = (ReactContext) this.getContext();
|
|
252
237
|
BPCWebView mContext = this;
|
|
253
238
|
|
|
254
|
-
if (
|
|
239
|
+
if (mbpCWebViewlient != null) {
|
|
255
240
|
WebView webView = this;
|
|
256
241
|
webView.post(new Runnable() {
|
|
257
242
|
@Override
|
|
258
243
|
public void run() {
|
|
259
|
-
if (
|
|
244
|
+
if (mbpCWebViewlient == null) {
|
|
260
245
|
return;
|
|
261
246
|
}
|
|
262
|
-
WritableMap data =
|
|
247
|
+
WritableMap data = mbpCWebViewlient.createWebViewEvent(webView, webView.getUrl());
|
|
263
248
|
data.putString("data", message);
|
|
264
249
|
|
|
265
250
|
if (mCatalystInstance != null) {
|
|
@@ -10,7 +10,6 @@ import android.net.http.SslError;
|
|
|
10
10
|
import android.os.Build;
|
|
11
11
|
import android.os.SystemClock;
|
|
12
12
|
import android.util.Log;
|
|
13
|
-
import android.webkit.HttpAuthHandler;
|
|
14
13
|
import android.webkit.RenderProcessGoneDetail;
|
|
15
14
|
import android.webkit.SslErrorHandler;
|
|
16
15
|
import android.webkit.WebResourceRequest;
|
|
@@ -31,18 +30,15 @@ import com.facebook.react.bridge.WritableMap;
|
|
|
31
30
|
import java.net.URISyntaxException;
|
|
32
31
|
import java.util.concurrent.atomic.AtomicReference;
|
|
33
32
|
|
|
34
|
-
|
|
35
33
|
import kr.co.bootpay.webview.events.TopHttpErrorEvent;
|
|
36
34
|
import kr.co.bootpay.webview.events.TopLoadingErrorEvent;
|
|
37
35
|
import kr.co.bootpay.webview.events.TopLoadingFinishEvent;
|
|
38
36
|
import kr.co.bootpay.webview.events.TopLoadingStartEvent;
|
|
39
37
|
import kr.co.bootpay.webview.events.TopRenderProcessGoneEvent;
|
|
40
38
|
import kr.co.bootpay.webview.events.TopShouldStartLoadWithRequestEvent;
|
|
41
|
-
import kr.co.bootpay.webview.BPCWebViewModule.ShouldOverrideUrlLoadingLock.ShouldOverrideCallbackState;
|
|
42
|
-
|
|
43
39
|
|
|
44
|
-
class BPCWebViewClient extends WebViewClient {
|
|
45
|
-
private static final String TAG = "
|
|
40
|
+
public class BPCWebViewClient extends WebViewClient {
|
|
41
|
+
private static final String TAG = "BPCWebViewClient";
|
|
46
42
|
protected static final int SHOULD_OVERRIDE_URL_LOADING_TIMEOUT = 250;
|
|
47
43
|
|
|
48
44
|
protected boolean mLastLoadFailed = false;
|
|
@@ -50,16 +46,11 @@ class BPCWebViewClient extends WebViewClient {
|
|
|
50
46
|
ReadableArray mUrlPrefixesForDefaultIntent;
|
|
51
47
|
protected BPCWebView.ProgressChangedFilter progressChangedFilter = null;
|
|
52
48
|
protected @Nullable String ignoreErrFailedForThisURL = null;
|
|
53
|
-
protected @Nullable BasicAuthCredential basicAuthCredential = null;
|
|
54
49
|
|
|
55
50
|
public void setIgnoreErrFailedForThisURL(@Nullable String url) {
|
|
56
51
|
ignoreErrFailedForThisURL = url;
|
|
57
52
|
}
|
|
58
53
|
|
|
59
|
-
public void setBasicAuthCredential(@Nullable BasicAuthCredential credential) {
|
|
60
|
-
basicAuthCredential = credential;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
54
|
@Override
|
|
64
55
|
public void onPageFinished(WebView webView, String url) {
|
|
65
56
|
super.onPageFinished(webView, url);
|
|
@@ -103,17 +94,20 @@ class BPCWebViewClient extends WebViewClient {
|
|
|
103
94
|
if(isInstallApp(intent, context)) return startApp(intent, context);
|
|
104
95
|
else return startGooglePlay(intent, context);
|
|
105
96
|
}
|
|
97
|
+
// return url.contains("vguardend");
|
|
106
98
|
return shouldOverrideUrlLoadingRN(view, url);
|
|
107
99
|
}
|
|
108
100
|
|
|
109
|
-
|
|
101
|
+
|
|
102
|
+
private boolean shouldOverrideUrlLoadingRN(WebView view, String url) {
|
|
103
|
+
|
|
110
104
|
final BPCWebView bpcWebView = (BPCWebView) view;
|
|
111
105
|
final boolean isJsDebugging = ((ReactContext) view.getContext()).getJavaScriptContextHolder().get() == 0;
|
|
112
106
|
|
|
113
107
|
if (!isJsDebugging && bpcWebView.mCatalystInstance != null) {
|
|
114
|
-
final Pair<Integer, AtomicReference<ShouldOverrideCallbackState>> lock = BPCWebViewModule.shouldOverrideUrlLoadingLock.getNewLock();
|
|
108
|
+
final Pair<Integer, AtomicReference<BPCWebViewModule.ShouldOverrideUrlLoadingLock.ShouldOverrideCallbackState>> lock = BPCWebViewModule.shouldOverrideUrlLoadingLock.getNewLock();
|
|
115
109
|
final int lockIdentifier = lock.first;
|
|
116
|
-
final AtomicReference<ShouldOverrideCallbackState> lockObject = lock.second;
|
|
110
|
+
final AtomicReference<BPCWebViewModule.ShouldOverrideUrlLoadingLock.ShouldOverrideCallbackState> lockObject = lock.second;
|
|
117
111
|
|
|
118
112
|
final WritableMap event = createWebViewEvent(view, url);
|
|
119
113
|
event.putInt("lockIdentifier", lockIdentifier);
|
|
@@ -123,7 +117,7 @@ class BPCWebViewClient extends WebViewClient {
|
|
|
123
117
|
assert lockObject != null;
|
|
124
118
|
synchronized (lockObject) {
|
|
125
119
|
final long startTime = SystemClock.elapsedRealtime();
|
|
126
|
-
while (lockObject.get() == ShouldOverrideCallbackState.UNDECIDED) {
|
|
120
|
+
while (lockObject.get() == BPCWebViewModule.ShouldOverrideUrlLoadingLock.ShouldOverrideCallbackState.UNDECIDED) {
|
|
127
121
|
if (SystemClock.elapsedRealtime() - startTime > SHOULD_OVERRIDE_URL_LOADING_TIMEOUT) {
|
|
128
122
|
FLog.w(TAG, "Did not receive response to shouldOverrideUrlLoading in time, defaulting to allow loading.");
|
|
129
123
|
BPCWebViewModule.shouldOverrideUrlLoadingLock.removeLock(lockIdentifier);
|
|
@@ -138,7 +132,7 @@ class BPCWebViewClient extends WebViewClient {
|
|
|
138
132
|
return false;
|
|
139
133
|
}
|
|
140
134
|
|
|
141
|
-
final boolean shouldOverride = lockObject.get() == ShouldOverrideCallbackState.SHOULD_OVERRIDE;
|
|
135
|
+
final boolean shouldOverride = lockObject.get() == BPCWebViewModule.ShouldOverrideUrlLoadingLock.ShouldOverrideCallbackState.SHOULD_OVERRIDE;
|
|
142
136
|
BPCWebViewModule.shouldOverrideUrlLoadingLock.removeLock(lockIdentifier);
|
|
143
137
|
|
|
144
138
|
return shouldOverride;
|
|
@@ -154,6 +148,112 @@ class BPCWebViewClient extends WebViewClient {
|
|
|
154
148
|
}
|
|
155
149
|
}
|
|
156
150
|
|
|
151
|
+
|
|
152
|
+
protected Boolean isSpecialCase(String url) {
|
|
153
|
+
return url.matches("^shinhan\\S+$")
|
|
154
|
+
|| url.startsWith("kftc-bankpay://")
|
|
155
|
+
|| url.startsWith("v3mobileplusweb://")
|
|
156
|
+
|| url.startsWith("hdcardappcardansimclick://")
|
|
157
|
+
|| url.startsWith("nidlogin://")
|
|
158
|
+
|| url.startsWith("mpocket.online.ansimclick://")
|
|
159
|
+
|| url.startsWith("wooripay://")
|
|
160
|
+
|| url.startsWith("kakaotalk://");
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
protected Boolean isIntent(String url) {
|
|
164
|
+
return url.startsWith("intent:");
|
|
165
|
+
}
|
|
166
|
+
protected Boolean isMarket(String url) {
|
|
167
|
+
return url.startsWith("market://");
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
protected Intent getIntentWithPackage(String url) {
|
|
172
|
+
try {
|
|
173
|
+
Intent intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);
|
|
174
|
+
if(intent.getPackage() == null) {
|
|
175
|
+
if (url == null) return intent;
|
|
176
|
+
if (url.startsWith("shinhan-sr-ansimclick")) intent.setPackage("com.shcard.smartpay");
|
|
177
|
+
else if (url.startsWith("kftc-bankpay")) intent.setPackage("com.kftc.bankpay.android");
|
|
178
|
+
else if (url.startsWith("ispmobile")) intent.setPackage("kvp.jjy.MispAndroid320");
|
|
179
|
+
else if (url.startsWith("hdcardappcardansimclick")) intent.setPackage("com.hyundaicard.appcard");
|
|
180
|
+
else if (url.startsWith("kb-acp")) intent.setPackage("com.kbcard.kbkookmincard");
|
|
181
|
+
else if (url.startsWith("mpocket.online.ansimclick")) intent.setPackage("kr.co.samsungcard.mpocket");
|
|
182
|
+
else if (url.startsWith("lotteappcard")) intent.setPackage("com.lcacApp");
|
|
183
|
+
else if (url.startsWith("cloudpay")) intent.setPackage("com.hanaskcard.paycla");
|
|
184
|
+
else if (url.startsWith("nhappvardansimclick")) intent.setPackage("nh.smart.nhallonepay");
|
|
185
|
+
else if (url.startsWith("citispay")) intent.setPackage("kr.co.citibank.citimobile");
|
|
186
|
+
else if (url.startsWith("kakaotalk")) intent.setPackage("com.kakao.talk");
|
|
187
|
+
}
|
|
188
|
+
return intent;
|
|
189
|
+
} catch (URISyntaxException e) {
|
|
190
|
+
e.printStackTrace();
|
|
191
|
+
return null;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
protected boolean isInstallApp(Intent intent, Context context) {
|
|
196
|
+
return isExistPackageInfo(intent, context) || isExistLaunchedIntent(intent, context);
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
protected boolean isExistPackageInfo(Intent intent, Context context) {
|
|
201
|
+
try {
|
|
202
|
+
return intent != null && context.getPackageManager().getPackageInfo(intent.getPackage(), PackageManager.GET_ACTIVITIES) != null;
|
|
203
|
+
} catch (PackageManager.NameNotFoundException e) {
|
|
204
|
+
e.printStackTrace();
|
|
205
|
+
return false;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
protected boolean isExistLaunchedIntent(Intent intent, Context context) {
|
|
210
|
+
return intent != null && intent.getPackage() != null && context.getPackageManager().getLaunchIntentForPackage(intent.getPackage()) != null;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
protected boolean startApp(Intent intent, Context context) {
|
|
214
|
+
intent.addFlags(intent.FLAG_ACTIVITY_CLEAR_TASK);
|
|
215
|
+
intent.addFlags(intent.FLAG_ACTIVITY_NEW_TASK);
|
|
216
|
+
context.startActivity(intent);
|
|
217
|
+
return true;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
protected boolean startGooglePlay(Intent intent, Context context) {
|
|
221
|
+
final String appPackageName = intent.getPackage();
|
|
222
|
+
|
|
223
|
+
if(appPackageName == null) {
|
|
224
|
+
Uri dataUri = intent.getData();
|
|
225
|
+
|
|
226
|
+
try {
|
|
227
|
+
Intent addIntent = new Intent(Intent.ACTION_VIEW, intent.getData());
|
|
228
|
+
addIntent.addFlags(intent.FLAG_ACTIVITY_CLEAR_TASK);
|
|
229
|
+
addIntent.addFlags(intent.FLAG_ACTIVITY_NEW_TASK);
|
|
230
|
+
context.startActivity(addIntent);
|
|
231
|
+
} catch (Exception e) {
|
|
232
|
+
String packageName = "com.nhn.android.search"; //appPackageName이 비어있으면 네이버로 보내기(네이버 로그인)
|
|
233
|
+
if(dataUri != null && dataUri.toString().startsWith("wooripay://")) packageName = "com.wooricard.wpay"; //우리카드 예외처리
|
|
234
|
+
|
|
235
|
+
Intent addIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + packageName));
|
|
236
|
+
addIntent.addFlags(intent.FLAG_ACTIVITY_CLEAR_TASK);
|
|
237
|
+
addIntent.addFlags(intent.FLAG_ACTIVITY_NEW_TASK);
|
|
238
|
+
context.startActivity(addIntent);
|
|
239
|
+
// context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + packageName)));
|
|
240
|
+
}
|
|
241
|
+
return true;
|
|
242
|
+
}
|
|
243
|
+
try {
|
|
244
|
+
Intent addIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackageName));
|
|
245
|
+
addIntent.addFlags(intent.FLAG_ACTIVITY_CLEAR_TASK);
|
|
246
|
+
addIntent.addFlags(intent.FLAG_ACTIVITY_NEW_TASK);
|
|
247
|
+
context.startActivity(addIntent);
|
|
248
|
+
} catch (android.content.ActivityNotFoundException anfe) {
|
|
249
|
+
Intent addIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + appPackageName));
|
|
250
|
+
addIntent.addFlags(intent.FLAG_ACTIVITY_CLEAR_TASK);
|
|
251
|
+
addIntent.addFlags(intent.FLAG_ACTIVITY_NEW_TASK);
|
|
252
|
+
context.startActivity(addIntent);
|
|
253
|
+
}
|
|
254
|
+
return true;
|
|
255
|
+
}
|
|
256
|
+
|
|
157
257
|
@TargetApi(Build.VERSION_CODES.N)
|
|
158
258
|
@Override
|
|
159
259
|
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
|
|
@@ -161,15 +261,6 @@ class BPCWebViewClient extends WebViewClient {
|
|
|
161
261
|
return this.shouldOverrideUrlLoading(view, url);
|
|
162
262
|
}
|
|
163
263
|
|
|
164
|
-
@Override
|
|
165
|
-
public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) {
|
|
166
|
-
if (basicAuthCredential != null) {
|
|
167
|
-
handler.proceed(basicAuthCredential.username, basicAuthCredential.password);
|
|
168
|
-
return;
|
|
169
|
-
}
|
|
170
|
-
super.onReceivedHttpAuthRequest(view, handler, host, realm);
|
|
171
|
-
}
|
|
172
|
-
|
|
173
264
|
@Override
|
|
174
265
|
public void onReceivedSslError(final WebView webView, final SslErrorHandler handler, final SslError error) {
|
|
175
266
|
// onReceivedSslError is called for most requests, per Android docs: https://developer.android.com/reference/android/webkit/WebViewClient#onReceivedSslError(android.webkit.WebView,%2520android.webkit.SslErrorHandler,%2520android.net.http.SslError)
|
|
@@ -186,7 +277,7 @@ class BPCWebViewClient extends WebViewClient {
|
|
|
186
277
|
|
|
187
278
|
if (!topWindowUrl.equalsIgnoreCase(failingUrl)) {
|
|
188
279
|
// If error is not due to top-level navigation, then do not call onReceivedError()
|
|
189
|
-
Log.w(
|
|
280
|
+
Log.w("BPCWebViewManager", "Resource blocked from loading due to SSL error. Blocked URL: "+failingUrl);
|
|
190
281
|
return;
|
|
191
282
|
}
|
|
192
283
|
|
|
@@ -295,10 +386,10 @@ class BPCWebViewClient extends WebViewClient {
|
|
|
295
386
|
super.onRenderProcessGone(webView, detail);
|
|
296
387
|
|
|
297
388
|
if(detail.didCrash()){
|
|
298
|
-
Log.e(
|
|
389
|
+
Log.e("BPCWebViewManager", "The WebView rendering process crashed.");
|
|
299
390
|
}
|
|
300
391
|
else{
|
|
301
|
-
Log.w(
|
|
392
|
+
Log.w("BPCWebViewManager", "The WebView rendering process was killed by the system.");
|
|
302
393
|
}
|
|
303
394
|
|
|
304
395
|
// if webView is null, we cannot return any event
|
|
@@ -348,110 +439,4 @@ class BPCWebViewClient extends WebViewClient {
|
|
|
348
439
|
public void setProgressChangedFilter(BPCWebView.ProgressChangedFilter filter) {
|
|
349
440
|
progressChangedFilter = filter;
|
|
350
441
|
}
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
protected Boolean isSpecialCase(String url) {
|
|
354
|
-
return url.matches("^shinhan\\S+$")
|
|
355
|
-
|| url.startsWith("kftc-bankpay://")
|
|
356
|
-
|| url.startsWith("v3mobileplusweb://")
|
|
357
|
-
|| url.startsWith("hdcardappcardansimclick://")
|
|
358
|
-
|| url.startsWith("nidlogin://")
|
|
359
|
-
|| url.startsWith("mpocket.online.ansimclick://")
|
|
360
|
-
|| url.startsWith("wooripay://")
|
|
361
|
-
|| url.startsWith("kakaotalk://");
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
protected Boolean isIntent(String url) {
|
|
365
|
-
return url.startsWith("intent:");
|
|
366
|
-
}
|
|
367
|
-
protected Boolean isMarket(String url) {
|
|
368
|
-
return url.startsWith("market://");
|
|
369
|
-
}
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
protected Intent getIntentWithPackage(String url) {
|
|
373
|
-
try {
|
|
374
|
-
Intent intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);
|
|
375
|
-
if(intent.getPackage() == null) {
|
|
376
|
-
if (url == null) return intent;
|
|
377
|
-
if (url.startsWith("shinhan-sr-ansimclick")) intent.setPackage("com.shcard.smartpay");
|
|
378
|
-
else if (url.startsWith("kftc-bankpay")) intent.setPackage("com.kftc.bankpay.android");
|
|
379
|
-
else if (url.startsWith("ispmobile")) intent.setPackage("kvp.jjy.MispAndroid320");
|
|
380
|
-
else if (url.startsWith("hdcardappcardansimclick")) intent.setPackage("com.hyundaicard.appcard");
|
|
381
|
-
else if (url.startsWith("kb-acp")) intent.setPackage("com.kbcard.kbkookmincard");
|
|
382
|
-
else if (url.startsWith("mpocket.online.ansimclick")) intent.setPackage("kr.co.samsungcard.mpocket");
|
|
383
|
-
else if (url.startsWith("lotteappcard")) intent.setPackage("com.lcacApp");
|
|
384
|
-
else if (url.startsWith("cloudpay")) intent.setPackage("com.hanaskcard.paycla");
|
|
385
|
-
else if (url.startsWith("nhappvardansimclick")) intent.setPackage("nh.smart.nhallonepay");
|
|
386
|
-
else if (url.startsWith("citispay")) intent.setPackage("kr.co.citibank.citimobile");
|
|
387
|
-
else if (url.startsWith("kakaotalk")) intent.setPackage("com.kakao.talk");
|
|
388
|
-
}
|
|
389
|
-
return intent;
|
|
390
|
-
} catch (URISyntaxException e) {
|
|
391
|
-
e.printStackTrace();
|
|
392
|
-
return null;
|
|
393
|
-
}
|
|
394
|
-
}
|
|
395
|
-
|
|
396
|
-
protected boolean isInstallApp(Intent intent, Context context) {
|
|
397
|
-
return isExistPackageInfo(intent, context) || isExistLaunchedIntent(intent, context);
|
|
398
|
-
}
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
protected boolean isExistPackageInfo(Intent intent, Context context) {
|
|
402
|
-
try {
|
|
403
|
-
return intent != null && context.getPackageManager().getPackageInfo(intent.getPackage(), PackageManager.GET_ACTIVITIES) != null;
|
|
404
|
-
} catch (PackageManager.NameNotFoundException e) {
|
|
405
|
-
e.printStackTrace();
|
|
406
|
-
return false;
|
|
407
|
-
}
|
|
408
|
-
}
|
|
409
|
-
|
|
410
|
-
protected boolean isExistLaunchedIntent(Intent intent, Context context) {
|
|
411
|
-
return intent != null && intent.getPackage() != null && context.getPackageManager().getLaunchIntentForPackage(intent.getPackage()) != null;
|
|
412
|
-
}
|
|
413
|
-
|
|
414
|
-
protected boolean startApp(Intent intent, Context context) {
|
|
415
|
-
intent.addFlags(intent.FLAG_ACTIVITY_CLEAR_TASK);
|
|
416
|
-
intent.addFlags(intent.FLAG_ACTIVITY_NEW_TASK);
|
|
417
|
-
context.startActivity(intent);
|
|
418
|
-
return true;
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
protected boolean startGooglePlay(Intent intent, Context context) {
|
|
422
|
-
final String appPackageName = intent.getPackage();
|
|
423
|
-
|
|
424
|
-
if(appPackageName == null) {
|
|
425
|
-
Uri dataUri = intent.getData();
|
|
426
|
-
|
|
427
|
-
try {
|
|
428
|
-
Intent addIntent = new Intent(Intent.ACTION_VIEW, intent.getData());
|
|
429
|
-
addIntent.addFlags(intent.FLAG_ACTIVITY_CLEAR_TASK);
|
|
430
|
-
addIntent.addFlags(intent.FLAG_ACTIVITY_NEW_TASK);
|
|
431
|
-
context.startActivity(addIntent);
|
|
432
|
-
} catch (Exception e) {
|
|
433
|
-
String packageName = "com.nhn.android.search"; //appPackageName이 비어있으면 네이버로 보내기(네이버 로그인)
|
|
434
|
-
if(dataUri != null && dataUri.toString().startsWith("wooripay://")) packageName = "com.wooricard.wpay"; //우리카드 예외처리
|
|
435
|
-
|
|
436
|
-
Intent addIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + packageName));
|
|
437
|
-
addIntent.addFlags(intent.FLAG_ACTIVITY_CLEAR_TASK);
|
|
438
|
-
addIntent.addFlags(intent.FLAG_ACTIVITY_NEW_TASK);
|
|
439
|
-
context.startActivity(addIntent);
|
|
440
|
-
// context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + packageName)));
|
|
441
|
-
}
|
|
442
|
-
return true;
|
|
443
|
-
}
|
|
444
|
-
try {
|
|
445
|
-
Intent addIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackageName));
|
|
446
|
-
addIntent.addFlags(intent.FLAG_ACTIVITY_CLEAR_TASK);
|
|
447
|
-
addIntent.addFlags(intent.FLAG_ACTIVITY_NEW_TASK);
|
|
448
|
-
context.startActivity(addIntent);
|
|
449
|
-
} catch (android.content.ActivityNotFoundException anfe) {
|
|
450
|
-
Intent addIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + appPackageName));
|
|
451
|
-
addIntent.addFlags(intent.FLAG_ACTIVITY_CLEAR_TASK);
|
|
452
|
-
addIntent.addFlags(intent.FLAG_ACTIVITY_NEW_TASK);
|
|
453
|
-
context.startActivity(addIntent);
|
|
454
|
-
}
|
|
455
|
-
return true;
|
|
456
|
-
}
|
|
457
442
|
}
|