react-native-webview-bootpay 13.8.42 → 13.13.4-6.alpha.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.
Files changed (101) hide show
  1. package/README.md +53 -69
  2. package/android/build.gradle +1 -11
  3. package/android/gradle.properties +0 -42
  4. package/android/src/main/AndroidManifest.xml +3 -1
  5. package/android/src/main/AndroidManifestNew.xml +97 -0
  6. package/android/src/main/java/kr/co/bootpay/webview/BPCWebChromeClient.java +54 -10
  7. package/android/src/main/java/kr/co/bootpay/webview/BPCWebView.java +101 -68
  8. package/android/src/main/java/kr/co/bootpay/webview/BPCWebViewClient.java +68 -60
  9. package/android/src/main/java/kr/co/bootpay/webview/BPCWebViewManagerImpl.kt +119 -65
  10. package/android/src/main/java/kr/co/bootpay/webview/BPCWebViewMessagingModule.kt +9 -0
  11. package/android/src/main/java/kr/co/bootpay/webview/BPCWebViewModuleImpl.java +1 -1
  12. package/android/src/main/java/kr/co/bootpay/webview/BootpayUrlHelper.java +4 -12
  13. package/android/src/newarch/{com/reactnativecommunity → kr/co/bootpay}/webview/BPCWebViewManager.java +118 -109
  14. package/android/src/newarch/{com/reactnativecommunity → kr/co/bootpay}/webview/BPCWebViewModule.java +1 -1
  15. package/android/src/{main/java → oldarch}/kr/co/bootpay/webview/BPCWebViewManager.java +63 -58
  16. package/android/src/{main/java → oldarch}/kr/co/bootpay/webview/BPCWebViewModule.java +1 -1
  17. package/apple/BPCWebView.mm +39 -30
  18. package/apple/BPCWebViewImpl.h +10 -0
  19. package/apple/BPCWebViewImpl.m +267 -205
  20. package/apple/BPCWebViewManager.mm +5 -24
  21. package/apple/BPCWebViewModule.h +23 -0
  22. package/apple/BPCWebViewModule.mm +34 -0
  23. package/apple/RCTConvert+WKDataDetectorTypes.h +11 -0
  24. package/apple/RCTConvert+WKDataDetectorTypes.m +27 -0
  25. package/index.d.ts +54 -48
  26. package/ios/RNCWebView.xcodeproj/project.pbxproj +24 -24
  27. package/ios/RNCWebView.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  28. package/ios/RNCWebView.xcodeproj/project.xcworkspace/xcuserdata/taesupyoon.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  29. package/ios/RNCWebView.xcodeproj/xcuserdata/taesupyoon.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
  30. package/lib/BPCWebViewNativeComponent.d.ts +24 -25
  31. package/lib/BPCWebViewNativeComponent.js +1 -1
  32. package/lib/{NativeBPCWebView.d.ts → NativeBPCWebViewModule.d.ts} +2 -5
  33. package/lib/{NativeBPCWebView.js → NativeBPCWebViewModule.js} +1 -1
  34. package/lib/WebView.android.d.ts +0 -1
  35. package/lib/WebView.android.js +1 -1
  36. package/lib/WebView.d.ts +0 -1
  37. package/lib/WebView.ios.d.ts +0 -1
  38. package/lib/WebView.ios.js +1 -1
  39. package/lib/WebView.js +1 -1
  40. package/lib/WebView.macos.d.ts +0 -1
  41. package/lib/WebView.macos.js +1 -1
  42. package/lib/WebView.styles.d.ts +37 -11
  43. package/lib/WebView.styles.js +1 -1
  44. package/lib/WebView.windows.d.ts +0 -1
  45. package/lib/WebView.windows.js +1 -1
  46. package/lib/WebViewNativeComponent.macos.d.ts +1 -2
  47. package/lib/WebViewNativeComponent.windows.d.ts +1 -2
  48. package/lib/WebViewShared.d.ts +0 -1
  49. package/lib/WebViewShared.js +1 -1
  50. package/lib/WebViewTypes.d.ts +51 -3
  51. package/lib/WebViewTypes.js +1 -1
  52. package/lib/index.d.ts +0 -1
  53. package/macos/RNCWebView.xcodeproj/project.pbxproj +36 -36
  54. package/package.json +12 -11
  55. package/react-native-webview-bootpay.podspec +2 -2
  56. package/react-native.config.js +1 -5
  57. package/src/BPCWebViewNativeComponent.ts +143 -79
  58. package/src/NativeBPCWebViewModule.ts +13 -0
  59. package/src/WebView.android.tsx +295 -190
  60. package/src/WebView.ios.tsx +253 -186
  61. package/src/WebView.macos.tsx +220 -152
  62. package/src/WebView.styles.ts +9 -12
  63. package/src/WebView.tsx +14 -7
  64. package/src/WebView.windows.tsx +180 -126
  65. package/src/WebViewNativeComponent.macos.ts +4 -5
  66. package/src/WebViewNativeComponent.windows.ts +6 -8
  67. package/src/WebViewShared.tsx +139 -91
  68. package/src/WebViewTypes.ts +80 -35
  69. package/src/__tests__/WebViewShared-test.js +170 -55
  70. package/windows/ReactNativeWebView/ReactNativeWebView.vcxproj +8 -17
  71. package/windows/ReactNativeWebView/ReactPackageProvider.cpp +5 -1
  72. package/windows/ReactNativeWebView/ReactWebView.cpp +73 -6
  73. package/windows/ReactNativeWebView/ReactWebView.h +11 -1
  74. package/windows/ReactNativeWebView/ReactWebView.idl +12 -3
  75. package/windows/ReactNativeWebView/ReactWebView2.cpp +294 -129
  76. package/windows/ReactNativeWebView/ReactWebView2.h +42 -5
  77. package/windows/ReactNativeWebView/ReactWebView2Manager.cpp +60 -34
  78. package/windows/ReactNativeWebView/ReactWebView2Manager.h +4 -4
  79. package/windows/ReactNativeWebView/ReactWebViewHelpers.cpp +70 -0
  80. package/windows/ReactNativeWebView/ReactWebViewHelpers.h +16 -0
  81. package/windows/ReactNativeWebView/ReactWebViewManager.cpp +22 -3
  82. package/windows/ReactNativeWebView/ReactWebViewManager.h +6 -1
  83. package/windows/ReactNativeWebView/pch.h +11 -7
  84. package/windows/ReactNativeWebView.sln +14 -14
  85. package/ios/main.jsbundle +0 -457
  86. package/lib/BPCWebViewNativeComponent.d.ts.map +0 -1
  87. package/lib/NativeBPCWebView.d.ts.map +0 -1
  88. package/lib/WebView.android.d.ts.map +0 -1
  89. package/lib/WebView.d.ts.map +0 -1
  90. package/lib/WebView.ios.d.ts.map +0 -1
  91. package/lib/WebView.macos.d.ts.map +0 -1
  92. package/lib/WebView.styles.d.ts.map +0 -1
  93. package/lib/WebView.windows.d.ts.map +0 -1
  94. package/lib/WebViewNativeComponent.macos.d.ts.map +0 -1
  95. package/lib/WebViewNativeComponent.windows.d.ts.map +0 -1
  96. package/lib/WebViewShared.d.ts.map +0 -1
  97. package/lib/WebViewTypes.d.ts.map +0 -1
  98. package/lib/index.d.ts.map +0 -1
  99. package/src/NativeBPCWebView.ts +0 -14
  100. package/windows/ReactNativeWebView/packages.config +0 -5
  101. /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): BPCWebView {
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): 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
- setAllowUniversalAccessFromFileURLs(webView, false)
83
- setMixedContentMode(webView, "never")
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.themedReactContext.getNativeModule(BPCWebViewModule::class.java) ?: return@DownloadListener
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(view: WebView, userAgent: String?) {
227
+ fun setUserAgent(viewWrapper: BPCWebViewWrapper, userAgent: String?) {
227
228
  mUserAgent = userAgent
228
- setUserAgentString(view)
229
+ setUserAgentString(viewWrapper)
229
230
  }
230
231
 
231
- fun setApplicationNameForUserAgent(view: WebView, applicationName: String?) {
232
+ fun setApplicationNameForUserAgent(viewWrapper: BPCWebViewWrapper, applicationName: String?) {
232
233
  when {
233
234
  applicationName != null -> {
234
- val defaultUserAgent = WebSettings.getDefaultUserAgent(view.context)
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(view)
242
+ setUserAgentString(viewWrapper)
242
243
  }
243
244
 
244
- private fun setUserAgentString(view: WebView) {
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(view: WebView, credential: ReadableMap?) {
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
- (view as BPCWebView).setBasicAuthCredential(basicAuthCredential)
269
+ viewWrapper.webView.setBasicAuthCredential(basicAuthCredential)
268
270
  }
269
271
 
270
- fun onDropViewInstance(webView: BPCWebView) {
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(webView: BPCWebView, commandId: String, args: ReadableArray) {
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
- if (args == null) {
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(args.getString(0))
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(view: WebView, mixedContentMode: String?) {
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(view: WebView, allow: Boolean) {
360
- view.settings.allowUniversalAccessFromFileURLs = allow
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(view: BPCWebView, source: ReadableMap?, newArch: Boolean = true) {
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(view: BPCWebView, value: String?) {
460
+ fun setMessagingModuleName(viewWrapper: BPCWebViewWrapper, value: String?) {
461
+ val view = viewWrapper.webView
446
462
  view.messagingModuleName = value
447
463
  }
448
464
 
449
- fun setCacheEnabled(view: BPCWebView, enabled: Boolean) {
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(view: BPCWebView, enabled: Boolean) {
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(view: BPCWebView, injectedJavaScript: String?) {
491
+ fun setInjectedJavaScript(viewWrapper: BPCWebViewWrapper, injectedJavaScript: String?) {
492
+ val view = viewWrapper.webView
474
493
  view.injectedJS = injectedJavaScript
475
494
  }
476
495
 
477
- fun setInjectedJavaScriptBeforeContentLoaded(view: BPCWebView, value: String?) {
496
+ fun setInjectedJavaScriptBeforeContentLoaded(viewWrapper: BPCWebViewWrapper, value: String?) {
497
+ val view = viewWrapper.webView
478
498
  view.injectedJSBeforeContentLoaded = value
479
499
  }
480
500
 
481
- fun setInjectedJavaScriptForMainFrameOnly(view: BPCWebView, value: Boolean) {
501
+ fun setInjectedJavaScriptForMainFrameOnly(viewWrapper: BPCWebViewWrapper, value: Boolean) {
502
+ val view = viewWrapper.webView
482
503
  view.injectedJavaScriptForMainFrameOnly = value
483
504
  }
484
505
 
485
- fun setInjectedJavaScriptBeforeContentLoadedForMainFrameOnly(view: BPCWebView, value: Boolean) {
506
+ fun setInjectedJavaScriptBeforeContentLoadedForMainFrameOnly(viewWrapper: BPCWebViewWrapper, value: Boolean) {
507
+ val view = viewWrapper.webView
486
508
  view.injectedJavaScriptBeforeContentLoadedForMainFrameOnly = value
487
509
  }
488
510
 
489
- fun setInjectedJavaScriptObject(view: BPCWebView, value: String?) {
511
+ fun setInjectedJavaScriptObject(viewWrapper: BPCWebViewWrapper, value: String?) {
512
+ val view = viewWrapper.webView
490
513
  view.setInjectedJavaScriptObject(value)
491
514
  }
492
515
 
493
- fun setJavaScriptCanOpenWindowsAutomatically(view: BPCWebView, value: Boolean) {
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(view: BPCWebView, value: Boolean) {
521
+ fun setShowsVerticalScrollIndicator(viewWrapper: BPCWebViewWrapper, value: Boolean) {
522
+ val view = viewWrapper.webView
498
523
  view.isVerticalScrollBarEnabled = value
499
524
  }
500
525
 
501
- fun setShowsHorizontalScrollIndicator(view: BPCWebView, value: Boolean) {
526
+ fun setShowsHorizontalScrollIndicator(viewWrapper: BPCWebViewWrapper, value: Boolean) {
527
+ val view = viewWrapper.webView
502
528
  view.isHorizontalScrollBarEnabled = value
503
529
  }
504
530
 
505
- fun setMessagingEnabled(view: BPCWebView, value: Boolean) {
531
+ fun setMessagingEnabled(viewWrapper: BPCWebViewWrapper, value: Boolean) {
532
+ val view = viewWrapper.webView
506
533
  view.setMessagingEnabled(value)
507
534
  }
508
535
 
509
- fun setMediaPlaybackRequiresUserAction(view: BPCWebView, value: Boolean) {
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(view: BPCWebView, value: Boolean) {
541
+ fun setHasOnScroll(viewWrapper: BPCWebViewWrapper, value: Boolean) {
542
+ val view = viewWrapper.webView
514
543
  view.setHasScrollEvent(value)
515
544
  }
516
545
 
517
- fun setJavaScriptEnabled(view: BPCWebView, enabled: Boolean) {
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(view: BPCWebView, allowFileAccess: Boolean) {
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(view: BPCWebView, value: Boolean) {
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(view: BPCWebView, value: Boolean) {
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(view: BPCWebView, layerTypeString: String?) {
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(view: BPCWebView, cacheModeString: String?) {
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(view: BPCWebView, value: Boolean) {
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(view: BPCWebView, enabled: Boolean) {
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(view: BPCWebView, value: Boolean) {
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(view: BPCWebView, value: Boolean) {
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(view: BPCWebView, value: Int) {
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(view: BPCWebView, enabled: Boolean) {
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(view: BPCWebView, value: ReadableArray) {
615
- view.setMenuCustomItems(value.toArrayList() as List<Map<String, String>>)
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(view: BPCWebView, value: Boolean) {
663
+ fun setNestedScrollEnabled(viewWrapper: BPCWebViewWrapper, value: Boolean) {
664
+ val view = viewWrapper.webView
619
665
  view.nestedScrollEnabled = value
620
666
  }
621
667
 
622
- fun setOverScrollMode(view: BPCWebView, overScrollModeString: String?) {
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(view: BPCWebView, disabled: Boolean) {
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(view: BPCWebView, value: Boolean) {
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(view: BPCWebView, value: Boolean) {
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(view: BPCWebView, value: Boolean) {
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(view: BPCWebView, value: Boolean) {
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(view: BPCWebView, value: Int) {
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(view: BPCWebView, enabled: Boolean) {
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(view: BPCWebView, enabled: Boolean) {
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 = "BPCWebView";
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.d("bootpay", "doDeepLinkIfPayUrl: " + url);
18
+ Log.i("bootpay", "doDeepLinkIfPayUrl: " + url);
19
19
 
20
20
  if(isIntent(url)) {
21
- Log.d("isIntent", "isInstallApp called");
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
- Log.d("isInstallApp", "Package name: " + packageName);
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