react-native-webview-bootpay 13.8.42 → 13.13.4
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 +53 -69
- package/android/build.gradle +1 -11
- package/android/gradle.properties +0 -42
- package/android/src/main/AndroidManifest.xml +3 -1
- package/android/src/main/AndroidManifestNew.xml +13 -0
- package/android/src/main/java/kr/co/bootpay/webview/BPCWebChromeClient.java +54 -10
- package/android/src/main/java/kr/co/bootpay/webview/BPCWebView.java +101 -68
- package/android/src/main/java/kr/co/bootpay/webview/BPCWebViewClient.java +68 -60
- package/android/src/main/java/kr/co/bootpay/webview/BPCWebViewManagerImpl.kt +119 -65
- package/android/src/main/java/kr/co/bootpay/webview/BPCWebViewMessagingModule.kt +9 -0
- package/android/src/main/java/kr/co/bootpay/webview/BPCWebViewModuleImpl.java +1 -1
- package/android/src/main/java/kr/co/bootpay/webview/BootpayUrlHelper.java +4 -12
- package/android/src/newarch/{com/reactnativecommunity → kr/co/bootpay}/webview/BPCWebViewManager.java +118 -109
- package/android/src/newarch/{com/reactnativecommunity → kr/co/bootpay}/webview/BPCWebViewModule.java +1 -1
- package/android/src/{main/java → oldarch}/kr/co/bootpay/webview/BPCWebViewManager.java +63 -58
- package/android/src/{main/java → oldarch}/kr/co/bootpay/webview/BPCWebViewModule.java +1 -1
- package/apple/BPCWebView.mm +21 -12
- package/apple/BPCWebViewImpl.h +11 -1
- package/apple/BPCWebViewImpl.m +278 -216
- package/apple/BPCWebViewManager.mm +5 -24
- package/apple/BPCWebViewModule.h +23 -0
- package/apple/BPCWebViewModule.mm +34 -0
- package/apple/RCTConvert+WKDataDetectorTypes.h +11 -0
- package/apple/RCTConvert+WKDataDetectorTypes.m +27 -0
- package/ios/RNCWebView.xcodeproj/project.pbxproj +24 -24
- package/ios/RNCWebView.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
- package/ios/RNCWebView.xcodeproj/project.xcworkspace/xcuserdata/taesupyoon.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/ios/RNCWebView.xcodeproj/xcuserdata/taesupyoon.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
- package/lib/BPCWebViewNativeComponent.d.ts +24 -25
- package/lib/BPCWebViewNativeComponent.js +1 -1
- package/lib/{NativeBPCWebView.d.ts → NativeBPCWebViewModule.d.ts} +2 -5
- package/lib/{NativeBPCWebView.js → NativeBPCWebViewModule.js} +1 -1
- package/lib/WebView.android.d.ts +0 -1
- package/lib/WebView.android.js +1 -1
- package/lib/WebView.d.ts +0 -1
- package/lib/WebView.ios.d.ts +0 -1
- package/lib/WebView.ios.js +1 -1
- package/lib/WebView.js +1 -1
- package/lib/WebView.macos.d.ts +0 -1
- package/lib/WebView.macos.js +1 -1
- package/lib/WebView.styles.d.ts +37 -11
- package/lib/WebView.styles.js +1 -1
- package/lib/WebView.windows.d.ts +0 -1
- package/lib/WebView.windows.js +1 -1
- package/lib/WebViewNativeComponent.macos.d.ts +1 -2
- package/lib/WebViewNativeComponent.windows.d.ts +1 -2
- package/lib/WebViewShared.d.ts +0 -1
- package/lib/WebViewShared.js +1 -1
- package/lib/WebViewTypes.d.ts +51 -3
- package/lib/WebViewTypes.js +1 -1
- package/lib/index.d.ts +0 -1
- package/macos/RNCWebView.xcodeproj/project.pbxproj +36 -36
- package/package.json +13 -12
- package/react-native.config.js +1 -5
- package/src/BPCWebViewNativeComponent.ts +143 -79
- package/src/NativeBPCWebViewModule.ts +13 -0
- package/src/WebView.android.tsx +295 -190
- package/src/WebView.ios.tsx +253 -186
- package/src/WebView.macos.tsx +220 -152
- package/src/WebView.styles.ts +9 -12
- package/src/WebView.tsx +14 -7
- package/src/WebView.windows.tsx +180 -126
- package/src/WebViewNativeComponent.macos.ts +4 -5
- package/src/WebViewNativeComponent.windows.ts +6 -8
- package/src/WebViewShared.tsx +139 -91
- package/src/WebViewTypes.ts +80 -35
- package/src/__tests__/WebViewShared-test.js +170 -55
- package/windows/ReactNativeWebView/ReactNativeWebView.vcxproj +8 -17
- package/windows/ReactNativeWebView/ReactPackageProvider.cpp +5 -1
- package/windows/ReactNativeWebView/ReactWebView.cpp +73 -6
- package/windows/ReactNativeWebView/ReactWebView.h +11 -1
- package/windows/ReactNativeWebView/ReactWebView.idl +12 -3
- package/windows/ReactNativeWebView/ReactWebView2.cpp +294 -129
- package/windows/ReactNativeWebView/ReactWebView2.h +42 -5
- package/windows/ReactNativeWebView/ReactWebView2Manager.cpp +60 -34
- package/windows/ReactNativeWebView/ReactWebView2Manager.h +4 -4
- package/windows/ReactNativeWebView/ReactWebViewHelpers.cpp +70 -0
- package/windows/ReactNativeWebView/ReactWebViewHelpers.h +16 -0
- package/windows/ReactNativeWebView/ReactWebViewManager.cpp +22 -3
- package/windows/ReactNativeWebView/ReactWebViewManager.h +6 -1
- package/windows/ReactNativeWebView/pch.h +11 -7
- package/windows/ReactNativeWebView.sln +14 -14
- package/ios/main.jsbundle +0 -457
- package/lib/BPCWebViewNativeComponent.d.ts.map +0 -1
- package/lib/NativeBPCWebView.d.ts.map +0 -1
- package/lib/WebView.android.d.ts.map +0 -1
- package/lib/WebView.d.ts.map +0 -1
- package/lib/WebView.ios.d.ts.map +0 -1
- package/lib/WebView.macos.d.ts.map +0 -1
- package/lib/WebView.styles.d.ts.map +0 -1
- package/lib/WebView.windows.d.ts.map +0 -1
- package/lib/WebViewNativeComponent.macos.d.ts.map +0 -1
- package/lib/WebViewNativeComponent.windows.d.ts.map +0 -1
- package/lib/WebViewShared.d.ts.map +0 -1
- package/lib/WebViewTypes.d.ts.map +0 -1
- package/lib/index.d.ts.map +0 -1
- package/react-native-webview-bootpay.podspec +0 -46
- package/src/NativeBPCWebView.ts +0 -14
- package/windows/ReactNativeWebView/packages.config +0 -5
- /package/android/src/main/java/kr/co/bootpay/webview/{BPCWebviewWrapper.kt → BPCWebViewWrapper.kt} +0 -0
|
@@ -27,11 +27,11 @@ import org.json.JSONObject
|
|
|
27
27
|
import java.io.UnsupportedEncodingException
|
|
28
28
|
import java.net.MalformedURLException
|
|
29
29
|
import java.net.URL
|
|
30
|
-
import java.util
|
|
30
|
+
import java.util.Locale
|
|
31
31
|
|
|
32
32
|
val invalidCharRegex = "[\\\\/%\"]".toRegex()
|
|
33
33
|
|
|
34
|
-
class BPCWebViewManagerImpl {
|
|
34
|
+
class BPCWebViewManagerImpl(private val newArch: Boolean = false) {
|
|
35
35
|
companion object {
|
|
36
36
|
const val NAME = "BPCWebView"
|
|
37
37
|
}
|
|
@@ -43,6 +43,7 @@ class BPCWebViewManagerImpl {
|
|
|
43
43
|
private var mDownloadingMessage: String? = null
|
|
44
44
|
private var mLackPermissionToDownloadMessage: String? = null
|
|
45
45
|
private var mHasOnOpenWindowEvent = false
|
|
46
|
+
private var mPendingSource: ReadableMap? = null
|
|
46
47
|
|
|
47
48
|
private var mUserAgent: String? = null
|
|
48
49
|
private var mUserAgentWithApplicationName: String? = null
|
|
@@ -62,12 +63,12 @@ class BPCWebViewManagerImpl {
|
|
|
62
63
|
return BPCWebView(context)
|
|
63
64
|
}
|
|
64
65
|
|
|
65
|
-
fun createViewInstance(context: ThemedReactContext):
|
|
66
|
+
fun createViewInstance(context: ThemedReactContext): BPCWebViewWrapper {
|
|
66
67
|
val webView = createBPCWebViewInstance(context)
|
|
67
68
|
return createViewInstance(context, webView);
|
|
68
69
|
}
|
|
69
70
|
|
|
70
|
-
fun createViewInstance(context: ThemedReactContext, webView: BPCWebView):
|
|
71
|
+
fun createViewInstance(context: ThemedReactContext, webView: BPCWebView): BPCWebViewWrapper {
|
|
71
72
|
setupWebChromeClient(webView)
|
|
72
73
|
context.addLifecycleEventListener(webView)
|
|
73
74
|
mWebViewConfig.configWebView(webView)
|
|
@@ -79,8 +80,8 @@ class BPCWebViewManagerImpl {
|
|
|
79
80
|
settings.allowFileAccess = false
|
|
80
81
|
settings.allowContentAccess = false
|
|
81
82
|
settings.allowFileAccessFromFileURLs = false
|
|
82
|
-
|
|
83
|
-
|
|
83
|
+
settings.allowUniversalAccessFromFileURLs = false
|
|
84
|
+
settings.mixedContentMode = WebSettings.MIXED_CONTENT_NEVER_ALLOW
|
|
84
85
|
|
|
85
86
|
// Fixes broken full-screen modals/galleries due to body height being 0.
|
|
86
87
|
webView.layoutParams = ViewGroup.LayoutParams(
|
|
@@ -92,7 +93,7 @@ class BPCWebViewManagerImpl {
|
|
|
92
93
|
}
|
|
93
94
|
webView.setDownloadListener(DownloadListener { url, userAgent, contentDisposition, mimetype, contentLength ->
|
|
94
95
|
webView.setIgnoreErrFailedForThisURL(url)
|
|
95
|
-
val module = webView.
|
|
96
|
+
val module = webView.reactApplicationContext.getNativeModule(BPCWebViewModule::class.java) ?: return@DownloadListener
|
|
96
97
|
val request: DownloadManager.Request = try {
|
|
97
98
|
DownloadManager.Request(Uri.parse(url))
|
|
98
99
|
} catch (e: IllegalArgumentException) {
|
|
@@ -135,7 +136,7 @@ class BPCWebViewManagerImpl {
|
|
|
135
136
|
)
|
|
136
137
|
}
|
|
137
138
|
})
|
|
138
|
-
return webView
|
|
139
|
+
return BPCWebViewWrapper(context, webView)
|
|
139
140
|
}
|
|
140
141
|
|
|
141
142
|
private fun setupWebChromeClient(
|
|
@@ -223,25 +224,26 @@ class BPCWebViewManagerImpl {
|
|
|
223
224
|
}
|
|
224
225
|
}
|
|
225
226
|
|
|
226
|
-
fun setUserAgent(
|
|
227
|
+
fun setUserAgent(viewWrapper: BPCWebViewWrapper, userAgent: String?) {
|
|
227
228
|
mUserAgent = userAgent
|
|
228
|
-
setUserAgentString(
|
|
229
|
+
setUserAgentString(viewWrapper)
|
|
229
230
|
}
|
|
230
231
|
|
|
231
|
-
fun setApplicationNameForUserAgent(
|
|
232
|
+
fun setApplicationNameForUserAgent(viewWrapper: BPCWebViewWrapper, applicationName: String?) {
|
|
232
233
|
when {
|
|
233
234
|
applicationName != null -> {
|
|
234
|
-
val defaultUserAgent = WebSettings.getDefaultUserAgent(
|
|
235
|
+
val defaultUserAgent = WebSettings.getDefaultUserAgent(viewWrapper.webView.context)
|
|
235
236
|
mUserAgentWithApplicationName = "$defaultUserAgent $applicationName"
|
|
236
237
|
}
|
|
237
238
|
else -> {
|
|
238
239
|
mUserAgentWithApplicationName = null
|
|
239
240
|
}
|
|
240
241
|
}
|
|
241
|
-
setUserAgentString(
|
|
242
|
+
setUserAgentString(viewWrapper)
|
|
242
243
|
}
|
|
243
244
|
|
|
244
|
-
private fun setUserAgentString(
|
|
245
|
+
private fun setUserAgentString(viewWrapper: BPCWebViewWrapper) {
|
|
246
|
+
val view = viewWrapper.webView
|
|
245
247
|
when {
|
|
246
248
|
mUserAgent != null -> {
|
|
247
249
|
view.settings.userAgentString = mUserAgent
|
|
@@ -255,7 +257,7 @@ class BPCWebViewManagerImpl {
|
|
|
255
257
|
}
|
|
256
258
|
}
|
|
257
259
|
|
|
258
|
-
fun setBasicAuthCredential(
|
|
260
|
+
fun setBasicAuthCredential(viewWrapper: BPCWebViewWrapper, credential: ReadableMap?) {
|
|
259
261
|
var basicAuthCredential: BPCBasicAuthCredential? = null
|
|
260
262
|
if (credential != null) {
|
|
261
263
|
if (credential.hasKey("username") && credential.hasKey("password")) {
|
|
@@ -264,10 +266,18 @@ class BPCWebViewManagerImpl {
|
|
|
264
266
|
basicAuthCredential = BPCBasicAuthCredential(username, password)
|
|
265
267
|
}
|
|
266
268
|
}
|
|
267
|
-
|
|
269
|
+
viewWrapper.webView.setBasicAuthCredential(basicAuthCredential)
|
|
268
270
|
}
|
|
269
271
|
|
|
270
|
-
fun
|
|
272
|
+
fun onAfterUpdateTransaction(viewWrapper: BPCWebViewWrapper) {
|
|
273
|
+
mPendingSource?.let { source ->
|
|
274
|
+
loadSource(viewWrapper, source)
|
|
275
|
+
}
|
|
276
|
+
mPendingSource = null
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
fun onDropViewInstance(viewWrapper: BPCWebViewWrapper) {
|
|
280
|
+
val webView = viewWrapper.webView
|
|
271
281
|
webView.themedReactContext.removeLifecycleEventListener(webView)
|
|
272
282
|
webView.cleanupCallbacksAndDestroy()
|
|
273
283
|
webView.mWebChromeClient = null
|
|
@@ -303,7 +313,8 @@ class BPCWebViewManagerImpl {
|
|
|
303
313
|
.build()
|
|
304
314
|
}
|
|
305
315
|
|
|
306
|
-
fun receiveCommand(
|
|
316
|
+
fun receiveCommand(viewWrapper: BPCWebViewWrapper, commandId: String, args: ReadableArray) {
|
|
317
|
+
val webView = viewWrapper.webView
|
|
307
318
|
when (commandId) {
|
|
308
319
|
"goBack" -> webView.goBack()
|
|
309
320
|
"goForward" -> webView.goForward()
|
|
@@ -330,11 +341,9 @@ class BPCWebViewManagerImpl {
|
|
|
330
341
|
}
|
|
331
342
|
"injectJavaScript" -> webView.evaluateJavascriptWithFallback(args.getString(0))
|
|
332
343
|
"loadUrl" -> {
|
|
333
|
-
|
|
334
|
-
throw RuntimeException("Arguments for loading an url are null!")
|
|
335
|
-
}
|
|
344
|
+
val url = args?.getString(0) ?: throw RuntimeException("Arguments for loading an url are null!")
|
|
336
345
|
webView.progressChangedFilter.setWaitingForCommandLoadUrl(false)
|
|
337
|
-
webView.loadUrl(
|
|
346
|
+
webView.loadUrl(url)
|
|
338
347
|
}
|
|
339
348
|
"requestFocus" -> webView.requestFocus()
|
|
340
349
|
"clearFormData" -> webView.clearFormData()
|
|
@@ -346,7 +355,8 @@ class BPCWebViewManagerImpl {
|
|
|
346
355
|
}
|
|
347
356
|
}
|
|
348
357
|
|
|
349
|
-
fun setMixedContentMode(
|
|
358
|
+
fun setMixedContentMode(viewWrapper: BPCWebViewWrapper, mixedContentMode: String?) {
|
|
359
|
+
val view = viewWrapper.webView
|
|
350
360
|
if (mixedContentMode == null || "never" == mixedContentMode) {
|
|
351
361
|
view.settings.mixedContentMode = WebSettings.MIXED_CONTENT_NEVER_ALLOW
|
|
352
362
|
} else if ("always" == mixedContentMode) {
|
|
@@ -356,8 +366,8 @@ class BPCWebViewManagerImpl {
|
|
|
356
366
|
}
|
|
357
367
|
}
|
|
358
368
|
|
|
359
|
-
fun setAllowUniversalAccessFromFileURLs(
|
|
360
|
-
|
|
369
|
+
fun setAllowUniversalAccessFromFileURLs(viewWrapper: BPCWebViewWrapper, allow: Boolean) {
|
|
370
|
+
viewWrapper.webView.settings.allowUniversalAccessFromFileURLs = allow
|
|
361
371
|
}
|
|
362
372
|
|
|
363
373
|
private fun getDownloadingMessageOrDefault(): String? {
|
|
@@ -369,7 +379,12 @@ class BPCWebViewManagerImpl {
|
|
|
369
379
|
?: DEFAULT_LACK_PERMISSION_TO_DOWNLOAD_MESSAGE
|
|
370
380
|
}
|
|
371
381
|
|
|
372
|
-
fun setSource(
|
|
382
|
+
fun setSource(viewWrapper: BPCWebViewWrapper, source: ReadableMap?) {
|
|
383
|
+
mPendingSource = source
|
|
384
|
+
}
|
|
385
|
+
|
|
386
|
+
private fun loadSource(viewWrapper: BPCWebViewWrapper, source: ReadableMap?) {
|
|
387
|
+
val view = viewWrapper.webView
|
|
373
388
|
if (source != null) {
|
|
374
389
|
if (source.hasKey("html")) {
|
|
375
390
|
val html = source.getString("html")
|
|
@@ -442,15 +457,18 @@ class BPCWebViewManagerImpl {
|
|
|
442
457
|
view.loadUrl(BLANK_URL)
|
|
443
458
|
}
|
|
444
459
|
|
|
445
|
-
fun setMessagingModuleName(
|
|
460
|
+
fun setMessagingModuleName(viewWrapper: BPCWebViewWrapper, value: String?) {
|
|
461
|
+
val view = viewWrapper.webView
|
|
446
462
|
view.messagingModuleName = value
|
|
447
463
|
}
|
|
448
464
|
|
|
449
|
-
fun setCacheEnabled(
|
|
465
|
+
fun setCacheEnabled(viewWrapper: BPCWebViewWrapper, enabled: Boolean) {
|
|
466
|
+
val view = viewWrapper.webView
|
|
450
467
|
view.settings.cacheMode = if (enabled) WebSettings.LOAD_DEFAULT else WebSettings.LOAD_NO_CACHE
|
|
451
468
|
}
|
|
452
469
|
|
|
453
|
-
fun setIncognito(
|
|
470
|
+
fun setIncognito(viewWrapper: BPCWebViewWrapper, enabled: Boolean) {
|
|
471
|
+
val view = viewWrapper.webView
|
|
454
472
|
// Don't do anything when incognito is disabled
|
|
455
473
|
if (!enabled) {
|
|
456
474
|
return;
|
|
@@ -470,68 +488,84 @@ class BPCWebViewManagerImpl {
|
|
|
470
488
|
view.settings.saveFormData = false;
|
|
471
489
|
}
|
|
472
490
|
|
|
473
|
-
fun setInjectedJavaScript(
|
|
491
|
+
fun setInjectedJavaScript(viewWrapper: BPCWebViewWrapper, injectedJavaScript: String?) {
|
|
492
|
+
val view = viewWrapper.webView
|
|
474
493
|
view.injectedJS = injectedJavaScript
|
|
475
494
|
}
|
|
476
495
|
|
|
477
|
-
fun setInjectedJavaScriptBeforeContentLoaded(
|
|
496
|
+
fun setInjectedJavaScriptBeforeContentLoaded(viewWrapper: BPCWebViewWrapper, value: String?) {
|
|
497
|
+
val view = viewWrapper.webView
|
|
478
498
|
view.injectedJSBeforeContentLoaded = value
|
|
479
499
|
}
|
|
480
500
|
|
|
481
|
-
fun setInjectedJavaScriptForMainFrameOnly(
|
|
501
|
+
fun setInjectedJavaScriptForMainFrameOnly(viewWrapper: BPCWebViewWrapper, value: Boolean) {
|
|
502
|
+
val view = viewWrapper.webView
|
|
482
503
|
view.injectedJavaScriptForMainFrameOnly = value
|
|
483
504
|
}
|
|
484
505
|
|
|
485
|
-
fun setInjectedJavaScriptBeforeContentLoadedForMainFrameOnly(
|
|
506
|
+
fun setInjectedJavaScriptBeforeContentLoadedForMainFrameOnly(viewWrapper: BPCWebViewWrapper, value: Boolean) {
|
|
507
|
+
val view = viewWrapper.webView
|
|
486
508
|
view.injectedJavaScriptBeforeContentLoadedForMainFrameOnly = value
|
|
487
509
|
}
|
|
488
510
|
|
|
489
|
-
fun setInjectedJavaScriptObject(
|
|
511
|
+
fun setInjectedJavaScriptObject(viewWrapper: BPCWebViewWrapper, value: String?) {
|
|
512
|
+
val view = viewWrapper.webView
|
|
490
513
|
view.setInjectedJavaScriptObject(value)
|
|
491
514
|
}
|
|
492
515
|
|
|
493
|
-
fun setJavaScriptCanOpenWindowsAutomatically(
|
|
516
|
+
fun setJavaScriptCanOpenWindowsAutomatically(viewWrapper: BPCWebViewWrapper, value: Boolean) {
|
|
517
|
+
val view = viewWrapper.webView
|
|
494
518
|
view.settings.javaScriptCanOpenWindowsAutomatically = value
|
|
495
519
|
}
|
|
496
520
|
|
|
497
|
-
fun setShowsVerticalScrollIndicator(
|
|
521
|
+
fun setShowsVerticalScrollIndicator(viewWrapper: BPCWebViewWrapper, value: Boolean) {
|
|
522
|
+
val view = viewWrapper.webView
|
|
498
523
|
view.isVerticalScrollBarEnabled = value
|
|
499
524
|
}
|
|
500
525
|
|
|
501
|
-
fun setShowsHorizontalScrollIndicator(
|
|
526
|
+
fun setShowsHorizontalScrollIndicator(viewWrapper: BPCWebViewWrapper, value: Boolean) {
|
|
527
|
+
val view = viewWrapper.webView
|
|
502
528
|
view.isHorizontalScrollBarEnabled = value
|
|
503
529
|
}
|
|
504
530
|
|
|
505
|
-
fun setMessagingEnabled(
|
|
531
|
+
fun setMessagingEnabled(viewWrapper: BPCWebViewWrapper, value: Boolean) {
|
|
532
|
+
val view = viewWrapper.webView
|
|
506
533
|
view.setMessagingEnabled(value)
|
|
507
534
|
}
|
|
508
535
|
|
|
509
|
-
fun setMediaPlaybackRequiresUserAction(
|
|
536
|
+
fun setMediaPlaybackRequiresUserAction(viewWrapper: BPCWebViewWrapper, value: Boolean) {
|
|
537
|
+
val view = viewWrapper.webView
|
|
510
538
|
view.settings.mediaPlaybackRequiresUserGesture = value
|
|
511
539
|
}
|
|
512
540
|
|
|
513
|
-
fun setHasOnScroll(
|
|
541
|
+
fun setHasOnScroll(viewWrapper: BPCWebViewWrapper, value: Boolean) {
|
|
542
|
+
val view = viewWrapper.webView
|
|
514
543
|
view.setHasScrollEvent(value)
|
|
515
544
|
}
|
|
516
545
|
|
|
517
|
-
fun setJavaScriptEnabled(
|
|
546
|
+
fun setJavaScriptEnabled(viewWrapper: BPCWebViewWrapper, enabled: Boolean) {
|
|
547
|
+
val view = viewWrapper.webView
|
|
518
548
|
view.settings.javaScriptEnabled = enabled
|
|
519
549
|
}
|
|
520
550
|
|
|
521
|
-
fun setAllowFileAccess(
|
|
551
|
+
fun setAllowFileAccess(viewWrapper: BPCWebViewWrapper, allowFileAccess: Boolean) {
|
|
552
|
+
val view = viewWrapper.webView
|
|
522
553
|
view.settings.allowFileAccess = allowFileAccess;
|
|
523
554
|
}
|
|
524
555
|
|
|
525
|
-
fun setAllowFileAccessFromFileURLs(
|
|
556
|
+
fun setAllowFileAccessFromFileURLs(viewWrapper: BPCWebViewWrapper, value: Boolean) {
|
|
557
|
+
val view = viewWrapper.webView
|
|
526
558
|
view.settings.allowFileAccessFromFileURLs = value;
|
|
527
559
|
}
|
|
528
560
|
|
|
529
|
-
fun setAllowsFullscreenVideo(
|
|
561
|
+
fun setAllowsFullscreenVideo(viewWrapper: BPCWebViewWrapper, value: Boolean) {
|
|
562
|
+
val view = viewWrapper.webView
|
|
530
563
|
mAllowsFullscreenVideo = value
|
|
531
564
|
setupWebChromeClient(view)
|
|
532
565
|
}
|
|
533
566
|
|
|
534
|
-
fun setAndroidLayerType(
|
|
567
|
+
fun setAndroidLayerType(viewWrapper: BPCWebViewWrapper, layerTypeString: String?) {
|
|
568
|
+
val view = viewWrapper.webView
|
|
535
569
|
val layerType = when (layerTypeString) {
|
|
536
570
|
"hardware" -> View.LAYER_TYPE_HARDWARE
|
|
537
571
|
"software" -> View.LAYER_TYPE_SOFTWARE
|
|
@@ -540,7 +574,8 @@ class BPCWebViewManagerImpl {
|
|
|
540
574
|
view.setLayerType(layerType, null)
|
|
541
575
|
}
|
|
542
576
|
|
|
543
|
-
fun setCacheMode(
|
|
577
|
+
fun setCacheMode(viewWrapper: BPCWebViewWrapper, cacheModeString: String?) {
|
|
578
|
+
val view = viewWrapper.webView
|
|
544
579
|
view.settings.cacheMode = when (cacheModeString) {
|
|
545
580
|
"LOAD_CACHE_ONLY" -> WebSettings.LOAD_CACHE_ONLY
|
|
546
581
|
"LOAD_CACHE_ELSE_NETWORK" -> WebSettings.LOAD_CACHE_ELSE_NETWORK
|
|
@@ -550,7 +585,8 @@ class BPCWebViewManagerImpl {
|
|
|
550
585
|
}
|
|
551
586
|
}
|
|
552
587
|
|
|
553
|
-
fun setDomStorageEnabled(
|
|
588
|
+
fun setDomStorageEnabled(viewWrapper: BPCWebViewWrapper, value: Boolean) {
|
|
589
|
+
val view = viewWrapper.webView
|
|
554
590
|
view.settings.domStorageEnabled = value
|
|
555
591
|
}
|
|
556
592
|
|
|
@@ -558,7 +594,8 @@ class BPCWebViewManagerImpl {
|
|
|
558
594
|
mDownloadingMessage = value
|
|
559
595
|
}
|
|
560
596
|
|
|
561
|
-
fun setForceDarkOn(
|
|
597
|
+
fun setForceDarkOn(viewWrapper: BPCWebViewWrapper, enabled: Boolean) {
|
|
598
|
+
val view = viewWrapper.webView
|
|
562
599
|
// Only Android 10+ support dark mode
|
|
563
600
|
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.P) {
|
|
564
601
|
if (WebViewFeature.isFeatureSupported(WebViewFeature.FORCE_DARK)) {
|
|
@@ -581,7 +618,8 @@ class BPCWebViewManagerImpl {
|
|
|
581
618
|
}
|
|
582
619
|
}
|
|
583
620
|
|
|
584
|
-
fun setGeolocationEnabled(
|
|
621
|
+
fun setGeolocationEnabled(viewWrapper: BPCWebViewWrapper, value: Boolean) {
|
|
622
|
+
val view = viewWrapper.webView
|
|
585
623
|
view.settings.setGeolocationEnabled(value)
|
|
586
624
|
}
|
|
587
625
|
|
|
@@ -589,16 +627,19 @@ class BPCWebViewManagerImpl {
|
|
|
589
627
|
mLackPermissionToDownloadMessage = value
|
|
590
628
|
}
|
|
591
629
|
|
|
592
|
-
fun setHasOnOpenWindowEvent(
|
|
630
|
+
fun setHasOnOpenWindowEvent(viewWrapper: BPCWebViewWrapper, value: Boolean) {
|
|
631
|
+
val view = viewWrapper.webView
|
|
593
632
|
mHasOnOpenWindowEvent = value
|
|
594
633
|
setupWebChromeClient(view)
|
|
595
634
|
}
|
|
596
635
|
|
|
597
|
-
fun setMinimumFontSize(
|
|
636
|
+
fun setMinimumFontSize(viewWrapper: BPCWebViewWrapper, value: Int) {
|
|
637
|
+
val view = viewWrapper.webView
|
|
598
638
|
view.settings.minimumFontSize = value
|
|
599
639
|
}
|
|
600
640
|
|
|
601
|
-
fun setAllowsProtectedMedia(
|
|
641
|
+
fun setAllowsProtectedMedia(viewWrapper: BPCWebViewWrapper, enabled: Boolean) {
|
|
642
|
+
val view = viewWrapper.webView
|
|
602
643
|
// This variable is used to keep consistency
|
|
603
644
|
// in case a new WebChromeClient is created
|
|
604
645
|
// (eg. when mAllowsFullScreenVideo changes)
|
|
@@ -611,15 +652,21 @@ class BPCWebViewManagerImpl {
|
|
|
611
652
|
}
|
|
612
653
|
}
|
|
613
654
|
|
|
614
|
-
fun setMenuCustomItems(
|
|
615
|
-
view
|
|
655
|
+
fun setMenuCustomItems(viewWrapper: BPCWebViewWrapper, value: ReadableArray?) {
|
|
656
|
+
val view = viewWrapper.webView
|
|
657
|
+
when (value) {
|
|
658
|
+
null -> view.setMenuCustomItems(null)
|
|
659
|
+
else -> view.setMenuCustomItems(value.toArrayList() as List<Map<String, String>>)
|
|
660
|
+
}
|
|
616
661
|
}
|
|
617
662
|
|
|
618
|
-
fun setNestedScrollEnabled(
|
|
663
|
+
fun setNestedScrollEnabled(viewWrapper: BPCWebViewWrapper, value: Boolean) {
|
|
664
|
+
val view = viewWrapper.webView
|
|
619
665
|
view.nestedScrollEnabled = value
|
|
620
666
|
}
|
|
621
667
|
|
|
622
|
-
fun setOverScrollMode(
|
|
668
|
+
fun setOverScrollMode(viewWrapper: BPCWebViewWrapper, overScrollModeString: String?) {
|
|
669
|
+
val view = viewWrapper.webView
|
|
623
670
|
view.overScrollMode = when (overScrollModeString) {
|
|
624
671
|
"never" -> View.OVER_SCROLL_NEVER
|
|
625
672
|
"content" -> View.OVER_SCROLL_IF_CONTENT_SCROLLS
|
|
@@ -628,37 +675,44 @@ class BPCWebViewManagerImpl {
|
|
|
628
675
|
}
|
|
629
676
|
}
|
|
630
677
|
|
|
631
|
-
fun setSaveFormDataDisabled(
|
|
678
|
+
fun setSaveFormDataDisabled(viewWrapper: BPCWebViewWrapper, disabled: Boolean) {
|
|
679
|
+
val view = viewWrapper.webView
|
|
632
680
|
view.settings.saveFormData = !disabled
|
|
633
681
|
}
|
|
634
682
|
|
|
635
|
-
fun setScalesPageToFit(
|
|
683
|
+
fun setScalesPageToFit(viewWrapper: BPCWebViewWrapper, value: Boolean) {
|
|
684
|
+
val view = viewWrapper.webView
|
|
636
685
|
view.settings.loadWithOverviewMode = value
|
|
637
686
|
view.settings.useWideViewPort = value
|
|
638
687
|
}
|
|
639
688
|
|
|
640
|
-
fun setSetBuiltInZoomControls(
|
|
689
|
+
fun setSetBuiltInZoomControls(viewWrapper: BPCWebViewWrapper, value: Boolean) {
|
|
690
|
+
val view = viewWrapper.webView
|
|
641
691
|
view.settings.builtInZoomControls = value
|
|
642
692
|
}
|
|
643
693
|
|
|
644
|
-
fun setSetDisplayZoomControls(
|
|
694
|
+
fun setSetDisplayZoomControls(viewWrapper: BPCWebViewWrapper, value: Boolean) {
|
|
695
|
+
val view = viewWrapper.webView
|
|
645
696
|
view.settings.displayZoomControls = value
|
|
646
697
|
|
|
647
698
|
}
|
|
648
699
|
|
|
649
|
-
fun setSetSupportMultipleWindows(
|
|
700
|
+
fun setSetSupportMultipleWindows(viewWrapper: BPCWebViewWrapper, value: Boolean) {
|
|
701
|
+
val view = viewWrapper.webView
|
|
650
702
|
view.settings.setSupportMultipleWindows(value)
|
|
651
703
|
}
|
|
652
704
|
|
|
653
|
-
fun setTextZoom(
|
|
705
|
+
fun setTextZoom(viewWrapper: BPCWebViewWrapper, value: Int) {
|
|
706
|
+
val view = viewWrapper.webView
|
|
654
707
|
view.settings.textZoom = value
|
|
655
708
|
}
|
|
656
709
|
|
|
657
|
-
fun setThirdPartyCookiesEnabled(
|
|
710
|
+
fun setThirdPartyCookiesEnabled(viewWrapper: BPCWebViewWrapper, enabled: Boolean) {
|
|
711
|
+
val view = viewWrapper.webView
|
|
658
712
|
CookieManager.getInstance().setAcceptThirdPartyCookies(view, enabled)
|
|
659
713
|
}
|
|
660
714
|
|
|
661
|
-
fun setWebviewDebuggingEnabled(
|
|
715
|
+
fun setWebviewDebuggingEnabled(viewWrapper: BPCWebViewWrapper, enabled: Boolean) {
|
|
662
716
|
BPCWebView.setWebContentsDebuggingEnabled(enabled)
|
|
663
717
|
}
|
|
664
|
-
}
|
|
718
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
package kr.co.bootpay.webview
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.bridge.JavaScriptModule
|
|
4
|
+
import com.facebook.react.bridge.WritableMap
|
|
5
|
+
|
|
6
|
+
internal interface BPCWebViewMessagingModule : JavaScriptModule {
|
|
7
|
+
fun onShouldStartLoadWithRequest(event: WritableMap)
|
|
8
|
+
fun onMessage(event: WritableMap)
|
|
9
|
+
}
|
|
@@ -45,7 +45,7 @@ import java.util.concurrent.atomic.AtomicReference;
|
|
|
45
45
|
import static android.app.Activity.RESULT_OK;
|
|
46
46
|
|
|
47
47
|
public class BPCWebViewModuleImpl implements ActivityEventListener {
|
|
48
|
-
public static final String NAME = "
|
|
48
|
+
public static final String NAME = "BPCWebViewModule";
|
|
49
49
|
|
|
50
50
|
public static final int PICKER = 1;
|
|
51
51
|
public static final int PICKER_LEGACY = 3;
|
|
@@ -15,10 +15,10 @@ public class BootpayUrlHelper {
|
|
|
15
15
|
Intent intent = getIntentWithPackage(url);
|
|
16
16
|
Context context = view.getContext();
|
|
17
17
|
|
|
18
|
-
Log.
|
|
18
|
+
Log.i("bootpay", "doDeepLinkIfPayUrl: " + url);
|
|
19
19
|
|
|
20
20
|
if(isIntent(url)) {
|
|
21
|
-
Log.
|
|
21
|
+
Log.i("isIntent", "isInstallApp called");
|
|
22
22
|
if(isInstallApp(intent, context)) return startApp(intent, context);
|
|
23
23
|
else return startGooglePlay(intent, context);
|
|
24
24
|
} else if(isMarket(url)) {
|
|
@@ -84,26 +84,18 @@ public class BootpayUrlHelper {
|
|
|
84
84
|
}
|
|
85
85
|
}
|
|
86
86
|
|
|
87
|
-
public static boolean isInstallApp(Intent intent, Context context) {
|
|
88
|
-
// return isExistPackageInfo(intent, context) || isExistLaunchedIntent(intent, context);
|
|
89
|
-
// return intent != null && intent.getPackage() != null && context.getPackageManager().getLaunchIntentForPackage(intent.getPackage()) != null;
|
|
90
|
-
|
|
91
|
-
Log.d("isInstallApp", "isInstallApp called");
|
|
92
|
-
|
|
87
|
+
public static boolean isInstallApp(Intent intent, Context context) {
|
|
93
88
|
if (intent == null) {
|
|
94
|
-
Log.d("isInstallApp", "Intent is null");
|
|
95
89
|
return false;
|
|
96
90
|
}
|
|
97
91
|
String packageName = intent.getPackage();
|
|
98
92
|
if (packageName == null) {
|
|
99
|
-
Log.d("isInstallApp", "Package name is null");
|
|
100
93
|
return false;
|
|
101
94
|
}
|
|
102
|
-
|
|
95
|
+
|
|
103
96
|
PackageManager packageManager = context.getPackageManager();
|
|
104
97
|
Intent launchIntent = packageManager.getLaunchIntentForPackage(packageName);
|
|
105
98
|
boolean isInstalled = launchIntent != null;
|
|
106
|
-
Log.d("isInstallApp", "Is installed: " + isInstalled);
|
|
107
99
|
return isInstalled;
|
|
108
100
|
}
|
|
109
101
|
|