react-native-webview-bootpay 13.8.41 → 13.13.4-4.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 +5 -47
  4. package/android/src/main/AndroidManifest.xml +9 -5
  5. package/android/src/main/AndroidManifestNew.xml +97 -0
  6. package/android/src/main/java/kr/co/bootpay/webview/BPCWebChromeClient.java +57 -11
  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 +70 -56
  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 +91 -75
  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 +21 -12
  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
@@ -6,13 +6,10 @@ import androidx.annotation.Nullable;
6
6
  import com.facebook.react.bridge.ReadableArray;
7
7
  import com.facebook.react.bridge.ReadableMap;
8
8
  import com.facebook.react.common.MapBuilder;
9
- import com.facebook.react.uimanager.SimpleViewManager;
10
9
  import com.facebook.react.uimanager.ThemedReactContext;
10
+ import com.facebook.react.uimanager.ViewGroupManager;
11
11
  import com.facebook.react.uimanager.annotations.ReactProp;
12
12
  import com.facebook.react.views.scroll.ScrollEventType;
13
-
14
- import java.util.Map;
15
-
16
13
  import kr.co.bootpay.webview.events.TopCustomMenuSelectionEvent;
17
14
  import kr.co.bootpay.webview.events.TopHttpErrorEvent;
18
15
  import kr.co.bootpay.webview.events.TopLoadingErrorEvent;
@@ -24,7 +21,9 @@ import kr.co.bootpay.webview.events.TopOpenWindowEvent;
24
21
  import kr.co.bootpay.webview.events.TopRenderProcessGoneEvent;
25
22
  import kr.co.bootpay.webview.events.TopShouldStartLoadWithRequestEvent;
26
23
 
27
- public class BPCWebViewManager extends SimpleViewManager<BPCWebView> {
24
+ import java.util.Map;
25
+
26
+ public class BPCWebViewManager extends ViewGroupManager<BPCWebViewWrapper> {
28
27
 
29
28
  private final BPCWebViewManagerImpl mBPCWebViewManagerImpl;
30
29
 
@@ -38,246 +37,246 @@ public class BPCWebViewManager extends SimpleViewManager<BPCWebView> {
38
37
  }
39
38
 
40
39
  @Override
41
- public BPCWebView createViewInstance(ThemedReactContext context) {
40
+ public BPCWebViewWrapper createViewInstance(ThemedReactContext context) {
42
41
  return mBPCWebViewManagerImpl.createViewInstance(context);
43
42
  }
44
43
 
45
- public BPCWebView createViewInstance(ThemedReactContext context, BPCWebView webView) {
46
- return mBPCWebViewManagerImpl.createViewInstance(context, webView);
44
+ public BPCWebViewWrapper createViewInstance(ThemedReactContext context, BPCWebView view) {
45
+ return mBPCWebViewManagerImpl.createViewInstance(context, view);
47
46
  }
48
47
 
49
48
  @ReactProp(name = "allowFileAccess")
50
- public void setAllowFileAccess(BPCWebView view, boolean value) {
49
+ public void setAllowFileAccess(BPCWebViewWrapper view, boolean value) {
51
50
  mBPCWebViewManagerImpl.setAllowFileAccess(view, value);
52
51
  }
53
52
 
54
53
  @ReactProp(name = "allowFileAccessFromFileURLs")
55
- public void setAllowFileAccessFromFileURLs(BPCWebView view, boolean value) {
54
+ public void setAllowFileAccessFromFileURLs(BPCWebViewWrapper view, boolean value) {
56
55
  mBPCWebViewManagerImpl.setAllowFileAccessFromFileURLs(view, value);
57
56
 
58
57
  }
59
58
 
60
59
  @ReactProp(name = "allowUniversalAccessFromFileURLs")
61
- public void setAllowUniversalAccessFromFileURLs(BPCWebView view, boolean value) {
60
+ public void setAllowUniversalAccessFromFileURLs(BPCWebViewWrapper view, boolean value) {
62
61
  mBPCWebViewManagerImpl.setAllowUniversalAccessFromFileURLs(view, value);
63
62
  }
64
63
 
65
64
  @ReactProp(name = "allowsFullscreenVideo")
66
- public void setAllowsFullscreenVideo(BPCWebView view, boolean value) {
65
+ public void setAllowsFullscreenVideo(BPCWebViewWrapper view, boolean value) {
67
66
  mBPCWebViewManagerImpl.setAllowsFullscreenVideo(view, value);
68
67
  }
69
68
 
70
69
  @ReactProp(name = "allowsProtectedMedia")
71
- public void setAllowsProtectedMedia(BPCWebView view, boolean value) {
70
+ public void setAllowsProtectedMedia(BPCWebViewWrapper view, boolean value) {
72
71
  mBPCWebViewManagerImpl.setAllowsProtectedMedia(view, value);
73
72
  }
74
73
 
75
74
  @ReactProp(name = "androidLayerType")
76
- public void setAndroidLayerType(BPCWebView view, @Nullable String value) {
75
+ public void setAndroidLayerType(BPCWebViewWrapper view, @Nullable String value) {
77
76
  mBPCWebViewManagerImpl.setAndroidLayerType(view, value);
78
77
  }
79
78
 
80
79
  @ReactProp(name = "applicationNameForUserAgent")
81
- public void setApplicationNameForUserAgent(BPCWebView view, @Nullable String value) {
80
+ public void setApplicationNameForUserAgent(BPCWebViewWrapper view, @Nullable String value) {
82
81
  mBPCWebViewManagerImpl.setApplicationNameForUserAgent(view, value);
83
82
  }
84
83
 
85
84
  @ReactProp(name = "basicAuthCredential")
86
- public void setBasicAuthCredential(BPCWebView view, @Nullable ReadableMap value) {
85
+ public void setBasicAuthCredential(BPCWebViewWrapper view, @Nullable ReadableMap value) {
87
86
  mBPCWebViewManagerImpl.setBasicAuthCredential(view, value);
88
87
  }
89
88
 
90
89
  @ReactProp(name = "cacheEnabled")
91
- public void setCacheEnabled(BPCWebView view, boolean value) {
90
+ public void setCacheEnabled(BPCWebViewWrapper view, boolean value) {
92
91
  mBPCWebViewManagerImpl.setCacheEnabled(view, value);
93
92
  }
94
93
 
95
94
  @ReactProp(name = "cacheMode")
96
- public void setCacheMode(BPCWebView view, @Nullable String value) {
95
+ public void setCacheMode(BPCWebViewWrapper view, @Nullable String value) {
97
96
  mBPCWebViewManagerImpl.setCacheMode(view, value);
98
97
  }
99
98
 
100
99
  @ReactProp(name = "domStorageEnabled")
101
- public void setDomStorageEnabled(BPCWebView view, boolean value) {
100
+ public void setDomStorageEnabled(BPCWebViewWrapper view, boolean value) {
102
101
  mBPCWebViewManagerImpl.setDomStorageEnabled(view, value);
103
102
  }
104
103
 
105
104
  @ReactProp(name = "downloadingMessage")
106
- public void setDownloadingMessage(BPCWebView view, @Nullable String value) {
105
+ public void setDownloadingMessage(BPCWebViewWrapper view, @Nullable String value) {
107
106
  mBPCWebViewManagerImpl.setDownloadingMessage(value);
108
107
  }
109
108
 
110
109
  @ReactProp(name = "forceDarkOn")
111
- public void setForceDarkOn(BPCWebView view, boolean value) {
110
+ public void setForceDarkOn(BPCWebViewWrapper view, boolean value) {
112
111
  mBPCWebViewManagerImpl.setForceDarkOn(view, value);
113
112
  }
114
113
 
115
114
  @ReactProp(name = "geolocationEnabled")
116
- public void setGeolocationEnabled(BPCWebView view, boolean value) {
115
+ public void setGeolocationEnabled(BPCWebViewWrapper view, boolean value) {
117
116
  mBPCWebViewManagerImpl.setGeolocationEnabled(view, value);
118
117
  }
119
118
 
120
119
  @ReactProp(name = "hasOnScroll")
121
- public void setHasOnScroll(BPCWebView view, boolean hasScrollEvent) {
120
+ public void setHasOnScroll(BPCWebViewWrapper view, boolean hasScrollEvent) {
122
121
  mBPCWebViewManagerImpl.setHasOnScroll(view, hasScrollEvent);
123
122
  }
124
123
 
125
124
  @ReactProp(name = "incognito")
126
- public void setIncognito(BPCWebView view, boolean value) {
125
+ public void setIncognito(BPCWebViewWrapper view, boolean value) {
127
126
  mBPCWebViewManagerImpl.setIncognito(view, value);
128
127
  }
129
128
 
130
129
  @ReactProp(name = "injectedJavaScript")
131
- public void setInjectedJavaScript(BPCWebView view, @Nullable String value) {
130
+ public void setInjectedJavaScript(BPCWebViewWrapper view, @Nullable String value) {
132
131
  mBPCWebViewManagerImpl.setInjectedJavaScript(view, value);
133
132
  }
134
133
 
135
134
  @ReactProp(name = "injectedJavaScriptBeforeContentLoaded")
136
- public void setInjectedJavaScriptBeforeContentLoaded(BPCWebView view, @Nullable String value) {
135
+ public void setInjectedJavaScriptBeforeContentLoaded(BPCWebViewWrapper view, @Nullable String value) {
137
136
  mBPCWebViewManagerImpl.setInjectedJavaScriptBeforeContentLoaded(view, value);
138
137
  }
139
138
 
140
139
  @ReactProp(name = "injectedJavaScriptForMainFrameOnly")
141
- public void setInjectedJavaScriptForMainFrameOnly(BPCWebView view, boolean value) {
140
+ public void setInjectedJavaScriptForMainFrameOnly(BPCWebViewWrapper view, boolean value) {
142
141
  mBPCWebViewManagerImpl.setInjectedJavaScriptForMainFrameOnly(view, value);
143
142
 
144
143
  }
145
144
 
146
145
  @ReactProp(name = "injectedJavaScriptBeforeContentLoadedForMainFrameOnly")
147
- public void setInjectedJavaScriptBeforeContentLoadedForMainFrameOnly(BPCWebView view, boolean value) {
146
+ public void setInjectedJavaScriptBeforeContentLoadedForMainFrameOnly(BPCWebViewWrapper view, boolean value) {
148
147
  mBPCWebViewManagerImpl.setInjectedJavaScriptBeforeContentLoadedForMainFrameOnly(view, value);
149
148
 
150
149
  }
151
150
 
152
151
  @ReactProp(name = "injectedJavaScriptObject")
153
- public void setInjectedJavaScriptObject(BPCWebView view, @Nullable String value) {
152
+ public void setInjectedJavaScriptObject(BPCWebViewWrapper view, @Nullable String value) {
154
153
  mBPCWebViewManagerImpl.setInjectedJavaScriptObject(view, value);
155
154
  }
156
155
 
157
156
  @ReactProp(name = "javaScriptCanOpenWindowsAutomatically")
158
- public void setJavaScriptCanOpenWindowsAutomatically(BPCWebView view, boolean value) {
157
+ public void setJavaScriptCanOpenWindowsAutomatically(BPCWebViewWrapper view, boolean value) {
159
158
  mBPCWebViewManagerImpl.setJavaScriptCanOpenWindowsAutomatically(view, value);
160
159
  }
161
160
 
162
161
  @ReactProp(name = "javaScriptEnabled")
163
- public void setJavaScriptEnabled(BPCWebView view, boolean enabled) {
162
+ public void setJavaScriptEnabled(BPCWebViewWrapper view, boolean enabled) {
164
163
  mBPCWebViewManagerImpl.setJavaScriptEnabled(view, enabled);
165
164
  }
166
165
 
167
166
  @ReactProp(name = "lackPermissionToDownloadMessage")
168
- public void setLackPermissionToDownloadMessage(BPCWebView view, @Nullable String value) {
167
+ public void setLackPermissionToDownloadMessage(BPCWebViewWrapper view, @Nullable String value) {
169
168
  mBPCWebViewManagerImpl.setLackPermissionToDownloadMessage(value);
170
169
  }
171
170
 
172
171
  @ReactProp(name = "hasOnOpenWindowEvent")
173
- public void setHasOnOpenWindowEvent(BPCWebView view, boolean hasEvent) {
172
+ public void setHasOnOpenWindowEvent(BPCWebViewWrapper view, boolean hasEvent) {
174
173
  mBPCWebViewManagerImpl.setHasOnOpenWindowEvent(view, hasEvent);
175
174
  }
176
175
 
177
176
  @ReactProp(name = "mediaPlaybackRequiresUserAction")
178
- public void setMediaPlaybackRequiresUserAction(BPCWebView view, boolean value) {
177
+ public void setMediaPlaybackRequiresUserAction(BPCWebViewWrapper view, boolean value) {
179
178
  mBPCWebViewManagerImpl.setMediaPlaybackRequiresUserAction(view, value);
180
179
  }
181
180
 
182
181
  @ReactProp(name = "messagingEnabled")
183
- public void setMessagingEnabled(BPCWebView view, boolean value) {
182
+ public void setMessagingEnabled(BPCWebViewWrapper view, boolean value) {
184
183
  mBPCWebViewManagerImpl.setMessagingEnabled(view, value);
185
184
  }
186
185
 
187
186
  @ReactProp(name = "menuItems")
188
- public void setMenuCustomItems(BPCWebView view, @Nullable ReadableArray items) {
187
+ public void setMenuCustomItems(BPCWebViewWrapper view, @Nullable ReadableArray items) {
189
188
  mBPCWebViewManagerImpl.setMenuCustomItems(view, items);
190
189
  }
191
190
 
192
191
  @ReactProp(name = "messagingModuleName")
193
- public void setMessagingModuleName(BPCWebView view, @Nullable String value) {
192
+ public void setMessagingModuleName(BPCWebViewWrapper view, @Nullable String value) {
194
193
  mBPCWebViewManagerImpl.setMessagingModuleName(view, value);
195
194
  }
196
195
 
197
196
  @ReactProp(name = "minimumFontSize")
198
- public void setMinimumFontSize(BPCWebView view, int value) {
197
+ public void setMinimumFontSize(BPCWebViewWrapper view, int value) {
199
198
  mBPCWebViewManagerImpl.setMinimumFontSize(view, value);
200
199
  }
201
200
 
202
201
  @ReactProp(name = "mixedContentMode")
203
- public void setMixedContentMode(BPCWebView view, @Nullable String value) {
202
+ public void setMixedContentMode(BPCWebViewWrapper view, @Nullable String value) {
204
203
  mBPCWebViewManagerImpl.setMixedContentMode(view, value);
205
204
  }
206
205
 
207
206
  @ReactProp(name = "nestedScrollEnabled")
208
- public void setNestedScrollEnabled(BPCWebView view, boolean value) {
207
+ public void setNestedScrollEnabled(BPCWebViewWrapper view, boolean value) {
209
208
  mBPCWebViewManagerImpl.setNestedScrollEnabled(view, value);
210
209
  }
211
210
 
212
211
  @ReactProp(name = "overScrollMode")
213
- public void setOverScrollMode(BPCWebView view, @Nullable String value) {
212
+ public void setOverScrollMode(BPCWebViewWrapper view, @Nullable String value) {
214
213
  mBPCWebViewManagerImpl.setOverScrollMode(view, value);
215
214
  }
216
215
 
217
216
  @ReactProp(name = "saveFormDataDisabled")
218
- public void setSaveFormDataDisabled(BPCWebView view, boolean value) {
217
+ public void setSaveFormDataDisabled(BPCWebViewWrapper view, boolean value) {
219
218
  mBPCWebViewManagerImpl.setSaveFormDataDisabled(view, value);
220
219
  }
221
220
 
222
221
  @ReactProp(name = "scalesPageToFit")
223
- public void setScalesPageToFit(BPCWebView view, boolean value) {
222
+ public void setScalesPageToFit(BPCWebViewWrapper view, boolean value) {
224
223
  mBPCWebViewManagerImpl.setScalesPageToFit(view, value);
225
224
  }
226
225
 
227
226
  @ReactProp(name = "setBuiltInZoomControls")
228
- public void setSetBuiltInZoomControls(BPCWebView view, boolean value) {
227
+ public void setSetBuiltInZoomControls(BPCWebViewWrapper view, boolean value) {
229
228
  mBPCWebViewManagerImpl.setSetBuiltInZoomControls(view, value);
230
229
  }
231
230
 
232
231
  @ReactProp(name = "setDisplayZoomControls")
233
- public void setSetDisplayZoomControls(BPCWebView view, boolean value) {
232
+ public void setSetDisplayZoomControls(BPCWebViewWrapper view, boolean value) {
234
233
  mBPCWebViewManagerImpl.setSetDisplayZoomControls(view, value);
235
234
  }
236
235
 
237
236
  @ReactProp(name = "setSupportMultipleWindows")
238
- public void setSetSupportMultipleWindows(BPCWebView view, boolean value) {
237
+ public void setSetSupportMultipleWindows(BPCWebViewWrapper view, boolean value) {
239
238
  mBPCWebViewManagerImpl.setSetSupportMultipleWindows(view, value);
240
239
  }
241
240
 
242
241
  @ReactProp(name = "showsHorizontalScrollIndicator")
243
- public void setShowsHorizontalScrollIndicator(BPCWebView view, boolean value) {
242
+ public void setShowsHorizontalScrollIndicator(BPCWebViewWrapper view, boolean value) {
244
243
  mBPCWebViewManagerImpl.setShowsHorizontalScrollIndicator(view, value);
245
244
  }
246
245
 
247
246
  @ReactProp(name = "showsVerticalScrollIndicator")
248
- public void setShowsVerticalScrollIndicator(BPCWebView view, boolean value) {
247
+ public void setShowsVerticalScrollIndicator(BPCWebViewWrapper view, boolean value) {
249
248
  mBPCWebViewManagerImpl.setShowsVerticalScrollIndicator(view, value);
250
249
  }
251
250
 
252
251
  @ReactProp(name = "source")
253
- public void setSource(BPCWebView view, @Nullable ReadableMap value) {
254
- mBPCWebViewManagerImpl.setSource(view, value, false);
252
+ public void setSource(BPCWebViewWrapper view, @Nullable ReadableMap value) {
253
+ mBPCWebViewManagerImpl.setSource(view, value);
255
254
  }
256
255
 
257
256
  @ReactProp(name = "textZoom")
258
- public void setTextZoom(BPCWebView view, int value) {
257
+ public void setTextZoom(BPCWebViewWrapper view, int value) {
259
258
  mBPCWebViewManagerImpl.setTextZoom(view, value);
260
259
  }
261
260
 
262
261
  @ReactProp(name = "thirdPartyCookiesEnabled")
263
- public void setThirdPartyCookiesEnabled(BPCWebView view, boolean value) {
262
+ public void setThirdPartyCookiesEnabled(BPCWebViewWrapper view, boolean value) {
264
263
  mBPCWebViewManagerImpl.setThirdPartyCookiesEnabled(view, value);
265
264
  }
266
265
 
267
266
  @ReactProp(name = "webviewDebuggingEnabled")
268
- public void setWebviewDebuggingEnabled(BPCWebView view, boolean value) {
267
+ public void setWebviewDebuggingEnabled(BPCWebViewWrapper view, boolean value) {
269
268
  mBPCWebViewManagerImpl.setWebviewDebuggingEnabled(view, value);
270
269
  }
271
270
 
272
271
  @ReactProp(name = "userAgent")
273
- public void setUserAgent(BPCWebView view, @Nullable String value) {
272
+ public void setUserAgent(BPCWebViewWrapper view, @Nullable String value) {
274
273
  mBPCWebViewManagerImpl.setUserAgent(view, value);
275
274
  }
276
275
 
277
276
  @Override
278
- protected void addEventEmitters(@NonNull ThemedReactContext reactContext, BPCWebView view) {
277
+ protected void addEventEmitters(@NonNull ThemedReactContext reactContext, BPCWebViewWrapper viewWrapper) {
279
278
  // Do not register default touch emitter and let WebView implementation handle touches
280
- view.setWebViewClient(new BPCWebViewClient());
279
+ viewWrapper.getWebView().setWebViewClient(new BPCWebViewClient());
281
280
  }
282
281
 
283
282
  @Override
@@ -310,13 +309,19 @@ public class BPCWebViewManager extends SimpleViewManager<BPCWebView> {
310
309
  }
311
310
 
312
311
  @Override
313
- public void receiveCommand(@NonNull BPCWebView reactWebView, String commandId, @Nullable ReadableArray args) {
312
+ public void receiveCommand(@NonNull BPCWebViewWrapper reactWebView, String commandId, @Nullable ReadableArray args) {
314
313
  mBPCWebViewManagerImpl.receiveCommand(reactWebView, commandId, args);
315
314
  super.receiveCommand(reactWebView, commandId, args);
316
315
  }
317
316
 
318
317
  @Override
319
- public void onDropViewInstance(@NonNull BPCWebView view) {
318
+ protected void onAfterUpdateTransaction(@NonNull BPCWebViewWrapper view) {
319
+ super.onAfterUpdateTransaction(view);
320
+ mBPCWebViewManagerImpl.onAfterUpdateTransaction(view);
321
+ }
322
+
323
+ @Override
324
+ public void onDropViewInstance(@NonNull BPCWebViewWrapper view) {
320
325
  mBPCWebViewManagerImpl.onDropViewInstance(view);
321
326
  super.onDropViewInstance(view);
322
327
  }
@@ -2,9 +2,9 @@ package kr.co.bootpay.webview;
2
2
 
3
3
  import android.app.DownloadManager;
4
4
  import android.net.Uri;
5
- import android.webkit.ValueCallback;
6
5
 
7
6
  import androidx.annotation.NonNull;
7
+ import android.webkit.ValueCallback;
8
8
 
9
9
  import com.facebook.react.bridge.Promise;
10
10
  import com.facebook.react.bridge.ReactApplicationContext;
@@ -8,7 +8,7 @@
8
8
  #import <react/renderer/components/BPCWebViewSpec/Props.h>
9
9
  #import <react/renderer/components/BPCWebViewSpec/RCTComponentViewHelpers.h>
10
10
 
11
- #import "RCTFabricComponentsPlugins.h"
11
+ #import <React/RCTFabricComponentsPlugins.h>
12
12
 
13
13
  using namespace facebook::react;
14
14
 
@@ -52,11 +52,19 @@ auto stringToOnLoadingFinishNavigationTypeEnum(std::string value) {
52
52
  return concreteComponentDescriptorProvider<BPCWebViewComponentDescriptor>();
53
53
  }
54
54
 
55
+ #if !TARGET_OS_OSX
55
56
  // Reproduce the idea from here: https://github.com/facebook/react-native/blob/8bd3edec88148d0ab1f225d2119435681fbbba33/React/Fabric/Mounting/ComponentViews/InputAccessory/RCTInputAccessoryComponentView.mm#L142
56
57
  - (void)prepareForRecycle {
57
58
  [super prepareForRecycle];
58
59
  [_view destroyWebView];
59
60
  }
61
+ #endif // !TARGET_OS_OSX
62
+
63
+ // Needed because of this: https://github.com/facebook/react-native/pull/37274
64
+ + (void)load
65
+ {
66
+ [super load];
67
+ }
60
68
 
61
69
  - (instancetype)initWithFrame:(CGRect)frame
62
70
  {
@@ -75,7 +83,7 @@ auto stringToOnLoadingFinishNavigationTypeEnum(std::string value) {
75
83
  .title = std::string([[dictionary valueForKey:@"title"] UTF8String]),
76
84
  .navigationType = stringToOnShouldStartLoadWithRequestNavigationTypeEnum(std::string([[dictionary valueForKey:@"navigationType"] UTF8String])),
77
85
  .canGoBack = static_cast<bool>([[dictionary valueForKey:@"canGoBack"] boolValue]),
78
- .canGoForward = static_cast<bool>([[dictionary valueForKey:@"canGoBack"] boolValue]),
86
+ .canGoForward = static_cast<bool>([[dictionary valueForKey:@"canGoForward"] boolValue]),
79
87
  .isTopFrame = static_cast<bool>([[dictionary valueForKey:@"isTopFrame"] boolValue]),
80
88
  .loading = static_cast<bool>([[dictionary valueForKey:@"loading"] boolValue]),
81
89
  .mainDocumentURL = std::string([[dictionary valueForKey:@"mainDocumentURL"] UTF8String])
@@ -92,7 +100,7 @@ auto stringToOnLoadingFinishNavigationTypeEnum(std::string value) {
92
100
  .title = std::string([[dictionary valueForKey:@"title"] UTF8String]),
93
101
  .navigationType = stringToOnLoadingStartNavigationTypeEnum(std::string([[dictionary valueForKey:@"navigationType"] UTF8String])),
94
102
  .canGoBack = static_cast<bool>([[dictionary valueForKey:@"canGoBack"] boolValue]),
95
- .canGoForward = static_cast<bool>([[dictionary valueForKey:@"canGoBack"] boolValue]),
103
+ .canGoForward = static_cast<bool>([[dictionary valueForKey:@"canGoForward"] boolValue]),
96
104
  .loading = static_cast<bool>([[dictionary valueForKey:@"loading"] boolValue]),
97
105
  .mainDocumentURL = std::string([[dictionary valueForKey:@"mainDocumentURL"] UTF8String], [[dictionary valueForKey:@"mainDocumentURL"] lengthOfBytesUsingEncoding:NSUTF8StringEncoding])
98
106
  };
@@ -107,9 +115,9 @@ auto stringToOnLoadingFinishNavigationTypeEnum(std::string value) {
107
115
  .lockIdentifier = [[dictionary valueForKey:@"lockIdentifier"] doubleValue],
108
116
  .title = std::string([[dictionary valueForKey:@"title"] UTF8String]),
109
117
  .code = [[dictionary valueForKey:@"code"] intValue],
110
- .description = std::string([[dictionary valueForKey:@"description"] UTF8String]),
118
+ .description = std::string([[dictionary valueForKey:@"description"] UTF8String] ?: ""),
111
119
  .canGoBack = static_cast<bool>([[dictionary valueForKey:@"canGoBack"] boolValue]),
112
- .canGoForward = static_cast<bool>([[dictionary valueForKey:@"canGoBack"] boolValue]),
120
+ .canGoForward = static_cast<bool>([[dictionary valueForKey:@"canGoForward"] boolValue]),
113
121
  .loading = static_cast<bool>([[dictionary valueForKey:@"loading"] boolValue]),
114
122
  .domain = std::string([[dictionary valueForKey:@"domain"] UTF8String])
115
123
  };
@@ -124,7 +132,7 @@ auto stringToOnLoadingFinishNavigationTypeEnum(std::string value) {
124
132
  .lockIdentifier = [[dictionary valueForKey:@"lockIdentifier"] doubleValue],
125
133
  .title = std::string([[dictionary valueForKey:@"title"] UTF8String]),
126
134
  .canGoBack = static_cast<bool>([[dictionary valueForKey:@"canGoBack"] boolValue]),
127
- .canGoForward = static_cast<bool>([[dictionary valueForKey:@"canGoBack"] boolValue]),
135
+ .canGoForward = static_cast<bool>([[dictionary valueForKey:@"canGoForward"] boolValue]),
128
136
  .loading = static_cast<bool>([[dictionary valueForKey:@"loading"] boolValue]),
129
137
  .data = std::string([[dictionary valueForKey:@"data"] UTF8String])
130
138
  };
@@ -140,7 +148,7 @@ auto stringToOnLoadingFinishNavigationTypeEnum(std::string value) {
140
148
  .title = std::string([[dictionary valueForKey:@"title"] UTF8String]),
141
149
  .navigationType = stringToOnLoadingFinishNavigationTypeEnum(std::string([[dictionary valueForKey:@"navigationType"] UTF8String], [[dictionary valueForKey:@"navigationType"] lengthOfBytesUsingEncoding:NSUTF8StringEncoding])),
142
150
  .canGoBack = static_cast<bool>([[dictionary valueForKey:@"canGoBack"] boolValue]),
143
- .canGoForward = static_cast<bool>([[dictionary valueForKey:@"canGoBack"] boolValue]),
151
+ .canGoForward = static_cast<bool>([[dictionary valueForKey:@"canGoForward"] boolValue]),
144
152
  .loading = static_cast<bool>([[dictionary valueForKey:@"loading"] boolValue]),
145
153
  .mainDocumentURL = std::string([[dictionary valueForKey:@"mainDocumentURL"] UTF8String], [[dictionary valueForKey:@"mainDocumentURL"] lengthOfBytesUsingEncoding:NSUTF8StringEncoding])
146
154
  };
@@ -155,7 +163,7 @@ auto stringToOnLoadingFinishNavigationTypeEnum(std::string value) {
155
163
  .lockIdentifier = [[dictionary valueForKey:@"lockIdentifier"] doubleValue],
156
164
  .title = std::string([[dictionary valueForKey:@"title"] UTF8String]),
157
165
  .canGoBack = static_cast<bool>([[dictionary valueForKey:@"canGoBack"] boolValue]),
158
- .canGoForward = static_cast<bool>([[dictionary valueForKey:@"canGoBack"] boolValue]),
166
+ .canGoForward = static_cast<bool>([[dictionary valueForKey:@"canGoForward"] boolValue]),
159
167
  .loading = static_cast<bool>([[dictionary valueForKey:@"loading"] boolValue]),
160
168
  .progress = [[dictionary valueForKey:@"progress"] doubleValue]
161
169
  };
@@ -170,7 +178,7 @@ auto stringToOnLoadingFinishNavigationTypeEnum(std::string value) {
170
178
  .lockIdentifier = [[dictionary valueForKey:@"lockIdentifier"] doubleValue],
171
179
  .title = std::string([[dictionary valueForKey:@"title"] UTF8String]),
172
180
  .canGoBack = static_cast<bool>([[dictionary valueForKey:@"canGoBack"] boolValue]),
173
- .canGoForward = static_cast<bool>([[dictionary valueForKey:@"canGoBack"] boolValue]),
181
+ .canGoForward = static_cast<bool>([[dictionary valueForKey:@"canGoForward"] boolValue]),
174
182
  .loading = static_cast<bool>([[dictionary valueForKey:@"loading"] boolValue])
175
183
  };
176
184
  webViewEventEmitter->onContentProcessDidTerminate(data);
@@ -228,9 +236,9 @@ auto stringToOnLoadingFinishNavigationTypeEnum(std::string value) {
228
236
  .lockIdentifier = [[dictionary valueForKey:@"lockIdentifier"] doubleValue],
229
237
  .title = std::string([[dictionary valueForKey:@"title"] UTF8String]),
230
238
  .statusCode = [[dictionary valueForKey:@"statusCode"] intValue],
231
- .description = std::string([[dictionary valueForKey:@"description"] UTF8String]),
239
+ .description = std::string([[dictionary valueForKey:@"description"] UTF8String] ?: ""),
232
240
  .canGoBack = static_cast<bool>([[dictionary valueForKey:@"canGoBack"] boolValue]),
233
- .canGoForward = static_cast<bool>([[dictionary valueForKey:@"canGoBack"] boolValue]),
241
+ .canGoForward = static_cast<bool>([[dictionary valueForKey:@"canGoForward"] boolValue]),
234
242
  .loading = static_cast<bool>([[dictionary valueForKey:@"loading"] boolValue])
235
243
  };
236
244
  webViewEventEmitter->onHttpError(data);
@@ -272,6 +280,7 @@ auto stringToOnLoadingFinishNavigationTypeEnum(std::string value) {
272
280
  REMAP_WEBVIEW_PROP(allowFileAccessFromFileURLs)
273
281
  REMAP_WEBVIEW_PROP(allowUniversalAccessFromFileURLs)
274
282
  REMAP_WEBVIEW_PROP(allowsInlineMediaPlayback)
283
+ REMAP_WEBVIEW_PROP(allowsPictureInPictureMediaPlayback)
275
284
  REMAP_WEBVIEW_PROP(webviewDebuggingEnabled)
276
285
  REMAP_WEBVIEW_PROP(allowsAirPlayForMediaPlayback)
277
286
  REMAP_WEBVIEW_PROP(mediaPlaybackRequiresUserAction)
@@ -291,6 +300,7 @@ auto stringToOnLoadingFinishNavigationTypeEnum(std::string value) {
291
300
  #endif // !TARGET_OS_OSX
292
301
  REMAP_WEBVIEW_PROP(enableApplePay)
293
302
  REMAP_WEBVIEW_PROP(pullToRefreshEnabled)
303
+ REMAP_WEBVIEW_PROP(refreshControlLightMode)
294
304
  REMAP_WEBVIEW_PROP(bounces)
295
305
  REMAP_WEBVIEW_PROP(useSharedProcessPool)
296
306
  REMAP_WEBVIEW_STRING_PROP(userAgent)
@@ -534,4 +544,3 @@ Class<RCTComponentViewProtocol> BPCWebViewCls(void)
534
544
 
535
545
  @end
536
546
  #endif
537
-
@@ -44,7 +44,15 @@ shouldStartLoadForRequest:(NSMutableDictionary<NSString *, id> *)request
44
44
 
45
45
  @end
46
46
 
47
+ #if !TARGET_OS_OSX
48
+ @interface BPCWebViewImpl : RCTView <UIEditMenuInteractionDelegate, UIGestureRecognizerDelegate>
49
+
50
+ @property (nonatomic, nullable) UIEditMenuInteraction *editMenuInteraction API_AVAILABLE(ios(16.0));
51
+ #else
47
52
  @interface BPCWebViewImpl : RCTView
53
+ #endif // !TARGET_OS_OSX
54
+
55
+
48
56
  @property (nonatomic, copy) RCTDirectEventBlock onFileDownload;
49
57
  @property (nonatomic, copy) RCTDirectEventBlock onLoadingStart;
50
58
  @property (nonatomic, copy) RCTDirectEventBlock onLoadingFinish;
@@ -72,6 +80,7 @@ shouldStartLoadForRequest:(NSMutableDictionary<NSString *, id> *)request
72
80
  @property (nonatomic, assign) BOOL pagingEnabled;
73
81
  @property (nonatomic, assign) CGFloat decelerationRate;
74
82
  @property (nonatomic, assign) BOOL allowsInlineMediaPlayback;
83
+ @property (nonatomic, assign) BOOL allowsPictureInPictureMediaPlayback;
75
84
  @property (nonatomic, assign) BOOL webviewDebuggingEnabled;
76
85
  @property (nonatomic, assign) BOOL allowsAirPlayForMediaPlayback;
77
86
  @property (nonatomic, assign) BOOL bounces;
@@ -98,6 +107,7 @@ shouldStartLoadForRequest:(NSMutableDictionary<NSString *, id> *)request
98
107
  @property (nonatomic, copy) NSString * _Nullable allowingReadAccessToURL;
99
108
  @property (nonatomic, copy) NSDictionary * _Nullable basicAuthCredential;
100
109
  @property (nonatomic, assign) BOOL pullToRefreshEnabled;
110
+ @property (nonatomic, assign) BOOL refreshControlLightMode;
101
111
  @property (nonatomic, assign) BOOL enableApplePay;
102
112
  @property (nonatomic, copy) NSArray<NSDictionary *> * _Nullable menuItems;
103
113
  @property (nonatomic, copy) NSArray<NSString *> * _Nullable suppressMenuItems;