@capgo/inappbrowser 7.3.2 → 7.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +48 -42
- package/android/src/main/java/ee/forgr/capacitor_inappbrowser/InAppBrowserPlugin.java +149 -41
- package/android/src/main/java/ee/forgr/capacitor_inappbrowser/Options.java +65 -22
- package/android/src/main/java/ee/forgr/capacitor_inappbrowser/WebViewCallbacks.java +2 -0
- package/android/src/main/java/ee/forgr/capacitor_inappbrowser/WebViewDialog.java +647 -92
- package/android/src/main/res/drawable/ic_share.xml +10 -0
- package/android/src/main/res/layout/activity_browser.xml +8 -0
- package/android/src/main/res/layout/tool_bar.xml +19 -7
- package/android/src/main/res/values/strings.xml +2 -0
- package/dist/docs.json +171 -37
- package/dist/esm/definitions.d.ts +224 -31
- package/dist/esm/definitions.js +12 -1
- package/dist/esm/definitions.js.map +1 -1
- package/dist/plugin.cjs.js +12 -1
- package/dist/plugin.cjs.js.map +1 -1
- package/dist/plugin.js +12 -1
- package/dist/plugin.js.map +1 -1
- package/ios/Plugin/InAppBrowserPlugin.swift +339 -44
- package/ios/Plugin/WKWebViewController.swift +478 -45
- package/package.json +1 -1
- package/ios/Plugin/Assets.xcassets/Back.imageset/Back.png +0 -0
- package/ios/Plugin/Assets.xcassets/Back.imageset/Back@2x.png +0 -0
- package/ios/Plugin/Assets.xcassets/Back.imageset/Back@3x.png +0 -0
- package/ios/Plugin/Assets.xcassets/Back.imageset/Contents.json +0 -26
- package/ios/Plugin/Assets.xcassets/Contents.json +0 -6
- package/ios/Plugin/Assets.xcassets/Forward.imageset/Contents.json +0 -26
- package/ios/Plugin/Assets.xcassets/Forward.imageset/Forward.png +0 -0
- package/ios/Plugin/Assets.xcassets/Forward.imageset/Forward@2x.png +0 -0
- package/ios/Plugin/Assets.xcassets/Forward.imageset/Forward@3x.png +0 -0
|
@@ -161,10 +161,67 @@ open class WKWebViewController: UIViewController, WKScriptMessageHandler {
|
|
|
161
161
|
|
|
162
162
|
open var websiteTitleInNavigationBar = true
|
|
163
163
|
open var doneBarButtonItemPosition: NavigationBarPosition = .right
|
|
164
|
+
open var showArrowAsClose = false
|
|
164
165
|
open var preShowScript: String?
|
|
165
166
|
open var leftNavigationBarItemTypes: [BarButtonItemType] = []
|
|
166
167
|
open var rightNavigaionBarItemTypes: [BarButtonItemType] = []
|
|
167
|
-
open var toolbarItemTypes: [BarButtonItemType] = [.back, .forward, .
|
|
168
|
+
open var toolbarItemTypes: [BarButtonItemType] = [.back, .forward, .activity]
|
|
169
|
+
|
|
170
|
+
// Status bar style to be applied
|
|
171
|
+
open var statusBarStyle: UIStatusBarStyle = .default
|
|
172
|
+
|
|
173
|
+
// Status bar background view
|
|
174
|
+
private var statusBarBackgroundView: UIView?
|
|
175
|
+
|
|
176
|
+
// Status bar height
|
|
177
|
+
private var statusBarHeight: CGFloat {
|
|
178
|
+
return UIApplication.shared.windows.first?.windowScene?.statusBarManager?.statusBarFrame.height ?? 0
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
// Make status bar background with colored view underneath
|
|
182
|
+
open func setupStatusBarBackground(color: UIColor) {
|
|
183
|
+
// Remove any existing status bar view
|
|
184
|
+
statusBarBackgroundView?.removeFromSuperview()
|
|
185
|
+
|
|
186
|
+
// Create a new view to cover both status bar and navigation bar
|
|
187
|
+
statusBarBackgroundView = UIView()
|
|
188
|
+
|
|
189
|
+
if let navView = navigationController?.view {
|
|
190
|
+
// Add to back of view hierarchy
|
|
191
|
+
navView.insertSubview(statusBarBackgroundView!, at: 0)
|
|
192
|
+
statusBarBackgroundView?.translatesAutoresizingMaskIntoConstraints = false
|
|
193
|
+
|
|
194
|
+
// Calculate total height - status bar + navigation bar
|
|
195
|
+
let navBarHeight = navigationController?.navigationBar.frame.height ?? 44
|
|
196
|
+
let totalHeight = statusBarHeight + navBarHeight
|
|
197
|
+
|
|
198
|
+
// Position from top of screen to bottom of navigation bar
|
|
199
|
+
NSLayoutConstraint.activate([
|
|
200
|
+
statusBarBackgroundView!.topAnchor.constraint(equalTo: navView.topAnchor),
|
|
201
|
+
statusBarBackgroundView!.leadingAnchor.constraint(equalTo: navView.leadingAnchor),
|
|
202
|
+
statusBarBackgroundView!.trailingAnchor.constraint(equalTo: navView.trailingAnchor),
|
|
203
|
+
statusBarBackgroundView!.heightAnchor.constraint(equalToConstant: totalHeight)
|
|
204
|
+
])
|
|
205
|
+
|
|
206
|
+
// Set background color
|
|
207
|
+
statusBarBackgroundView?.backgroundColor = color
|
|
208
|
+
|
|
209
|
+
// Make navigation bar transparent to show our view underneath
|
|
210
|
+
navigationController?.navigationBar.setBackgroundImage(UIImage(), for: .default)
|
|
211
|
+
navigationController?.navigationBar.shadowImage = UIImage()
|
|
212
|
+
navigationController?.navigationBar.isTranslucent = true
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
// Override to use our custom status bar style
|
|
217
|
+
override open var preferredStatusBarStyle: UIStatusBarStyle {
|
|
218
|
+
return statusBarStyle
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
// Force status bar style update when needed
|
|
222
|
+
open func updateStatusBarStyle() {
|
|
223
|
+
setNeedsStatusBarAppearanceUpdate()
|
|
224
|
+
}
|
|
168
225
|
|
|
169
226
|
open var backBarButtonItemImage: UIImage?
|
|
170
227
|
open var forwardBarButtonItemImage: UIImage?
|
|
@@ -183,13 +240,21 @@ open class WKWebViewController: UIViewController, WKScriptMessageHandler {
|
|
|
183
240
|
fileprivate var originalUserAgent: String?
|
|
184
241
|
|
|
185
242
|
fileprivate lazy var backBarButtonItem: UIBarButtonItem = {
|
|
186
|
-
let
|
|
187
|
-
|
|
243
|
+
let navBackImage = UIImage(systemName: "chevron.backward")?.withRenderingMode(.alwaysTemplate)
|
|
244
|
+
let barButtonItem = UIBarButtonItem(image: navBackImage, style: .plain, target: self, action: #selector(backDidClick(sender:)))
|
|
245
|
+
if let tintColor = self.tintColor ?? self.navigationController?.navigationBar.tintColor {
|
|
246
|
+
barButtonItem.tintColor = tintColor
|
|
247
|
+
}
|
|
248
|
+
return barButtonItem
|
|
188
249
|
}()
|
|
189
250
|
|
|
190
251
|
fileprivate lazy var forwardBarButtonItem: UIBarButtonItem = {
|
|
191
|
-
let
|
|
192
|
-
|
|
252
|
+
let forwardImage = UIImage(systemName: "chevron.forward")?.withRenderingMode(.alwaysTemplate)
|
|
253
|
+
let barButtonItem = UIBarButtonItem(image: forwardImage, style: .plain, target: self, action: #selector(forwardDidClick(sender:)))
|
|
254
|
+
if let tintColor = self.tintColor ?? self.navigationController?.navigationBar.tintColor {
|
|
255
|
+
barButtonItem.tintColor = tintColor
|
|
256
|
+
}
|
|
257
|
+
return barButtonItem
|
|
193
258
|
}()
|
|
194
259
|
|
|
195
260
|
fileprivate lazy var reloadBarButtonItem: UIBarButtonItem = {
|
|
@@ -209,15 +274,54 @@ open class WKWebViewController: UIViewController, WKScriptMessageHandler {
|
|
|
209
274
|
}()
|
|
210
275
|
|
|
211
276
|
fileprivate lazy var activityBarButtonItem: UIBarButtonItem = {
|
|
277
|
+
// Check if custom image is provided
|
|
212
278
|
if let image = activityBarButtonItemImage {
|
|
213
|
-
|
|
279
|
+
let button = UIBarButtonItem(image: image.withRenderingMode(.alwaysTemplate),
|
|
280
|
+
style: .plain,
|
|
281
|
+
target: self,
|
|
282
|
+
action: #selector(activityDidClick(sender:)))
|
|
283
|
+
|
|
284
|
+
// Apply tint from navigation bar or from tintColor property
|
|
285
|
+
if let tintColor = self.tintColor ?? self.navigationController?.navigationBar.tintColor {
|
|
286
|
+
button.tintColor = tintColor
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
print("[DEBUG] Created activity button with custom image")
|
|
290
|
+
return button
|
|
214
291
|
} else {
|
|
215
|
-
|
|
292
|
+
// Use system share icon
|
|
293
|
+
let button = UIBarButtonItem(barButtonSystemItem: .action,
|
|
294
|
+
target: self,
|
|
295
|
+
action: #selector(activityDidClick(sender:)))
|
|
296
|
+
|
|
297
|
+
// Apply tint from navigation bar or from tintColor property
|
|
298
|
+
if let tintColor = self.tintColor ?? self.navigationController?.navigationBar.tintColor {
|
|
299
|
+
button.tintColor = tintColor
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
print("[DEBUG] Created activity button with system action icon")
|
|
303
|
+
return button
|
|
216
304
|
}
|
|
217
305
|
}()
|
|
218
306
|
|
|
219
307
|
fileprivate lazy var doneBarButtonItem: UIBarButtonItem = {
|
|
220
|
-
|
|
308
|
+
if showArrowAsClose {
|
|
309
|
+
// Show chevron icon when showArrowAsClose is true (originally was arrow.left)
|
|
310
|
+
let chevronImage = UIImage(systemName: "chevron.left")?.withRenderingMode(.alwaysTemplate)
|
|
311
|
+
let barButtonItem = UIBarButtonItem(image: chevronImage, style: .plain, target: self, action: #selector(doneDidClick(sender:)))
|
|
312
|
+
if let tintColor = self.tintColor ?? self.navigationController?.navigationBar.tintColor {
|
|
313
|
+
barButtonItem.tintColor = tintColor
|
|
314
|
+
}
|
|
315
|
+
return barButtonItem
|
|
316
|
+
} else {
|
|
317
|
+
// Show X icon by default
|
|
318
|
+
let xImage = UIImage(systemName: "xmark")?.withRenderingMode(.alwaysTemplate)
|
|
319
|
+
let barButtonItem = UIBarButtonItem(image: xImage, style: .plain, target: self, action: #selector(doneDidClick(sender:)))
|
|
320
|
+
if let tintColor = self.tintColor ?? self.navigationController?.navigationBar.tintColor {
|
|
321
|
+
barButtonItem.tintColor = tintColor
|
|
322
|
+
}
|
|
323
|
+
return barButtonItem
|
|
324
|
+
}
|
|
221
325
|
}()
|
|
222
326
|
|
|
223
327
|
fileprivate lazy var flexibleSpaceBarButtonItem: UIBarButtonItem = {
|
|
@@ -239,6 +343,98 @@ open class WKWebViewController: UIViewController, WKScriptMessageHandler {
|
|
|
239
343
|
if self.webView == nil {
|
|
240
344
|
self.initWebview()
|
|
241
345
|
}
|
|
346
|
+
|
|
347
|
+
// Force all buttons to use tint color
|
|
348
|
+
updateButtonTintColors()
|
|
349
|
+
|
|
350
|
+
// Extra call to ensure buttonNearDone is visible
|
|
351
|
+
if buttonNearDoneIcon != nil {
|
|
352
|
+
// Delay slightly to ensure navigation items are set up
|
|
353
|
+
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { [weak self] in
|
|
354
|
+
self?.updateButtonTintColors()
|
|
355
|
+
|
|
356
|
+
// Force update UI if needed
|
|
357
|
+
self?.navigationController?.navigationBar.setNeedsLayout()
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
func updateButtonTintColors() {
|
|
363
|
+
// Ensure all button items use the navigation bar's tint color
|
|
364
|
+
if let tintColor = navigationController?.navigationBar.tintColor {
|
|
365
|
+
backBarButtonItem.tintColor = tintColor
|
|
366
|
+
forwardBarButtonItem.tintColor = tintColor
|
|
367
|
+
reloadBarButtonItem.tintColor = tintColor
|
|
368
|
+
stopBarButtonItem.tintColor = tintColor
|
|
369
|
+
activityBarButtonItem.tintColor = tintColor
|
|
370
|
+
doneBarButtonItem.tintColor = tintColor
|
|
371
|
+
flexibleSpaceBarButtonItem.tintColor = tintColor
|
|
372
|
+
|
|
373
|
+
// Update toolbar items
|
|
374
|
+
if let items = toolbarItems {
|
|
375
|
+
for item in items {
|
|
376
|
+
item.tintColor = tintColor
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
// Update navigation items
|
|
381
|
+
if let leftItems = navigationItem.leftBarButtonItems {
|
|
382
|
+
for item in leftItems {
|
|
383
|
+
item.tintColor = tintColor
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
if let rightItems = navigationItem.rightBarButtonItems {
|
|
388
|
+
for item in rightItems {
|
|
389
|
+
item.tintColor = tintColor
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
// Create buttonNearDone button with the correct tint color if it doesn't already exist
|
|
394
|
+
if buttonNearDoneIcon != nil &&
|
|
395
|
+
navigationItem.rightBarButtonItems?.count == 1 &&
|
|
396
|
+
navigationItem.rightBarButtonItems?.first == doneBarButtonItem {
|
|
397
|
+
|
|
398
|
+
// Create a properly tinted button
|
|
399
|
+
let buttonItem = UIBarButtonItem(image: buttonNearDoneIcon?.withRenderingMode(.alwaysTemplate),
|
|
400
|
+
style: .plain,
|
|
401
|
+
target: self,
|
|
402
|
+
action: #selector(buttonNearDoneDidClick))
|
|
403
|
+
buttonItem.tintColor = tintColor
|
|
404
|
+
|
|
405
|
+
// Add it to right items
|
|
406
|
+
navigationItem.rightBarButtonItems?.append(buttonItem)
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
override open func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) {
|
|
412
|
+
super.traitCollectionDidChange(previousTraitCollection)
|
|
413
|
+
|
|
414
|
+
// Update colors when appearance changes
|
|
415
|
+
if traitCollection.hasDifferentColorAppearance(comparedTo: previousTraitCollection) {
|
|
416
|
+
// Update tint colors
|
|
417
|
+
let isDarkMode = traitCollection.userInterfaceStyle == .dark
|
|
418
|
+
let textColor = isDarkMode ? UIColor.white : UIColor.black
|
|
419
|
+
|
|
420
|
+
if let navBar = navigationController?.navigationBar {
|
|
421
|
+
if navBar.backgroundColor == UIColor.black || navBar.backgroundColor == UIColor.white {
|
|
422
|
+
navBar.backgroundColor = isDarkMode ? UIColor.black : UIColor.white
|
|
423
|
+
navBar.tintColor = textColor
|
|
424
|
+
navBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: textColor]
|
|
425
|
+
|
|
426
|
+
// Update all buttons
|
|
427
|
+
updateButtonTintColors()
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
|
|
431
|
+
if let toolbar = navigationController?.toolbar {
|
|
432
|
+
if toolbar.backgroundColor == UIColor.black || toolbar.backgroundColor == UIColor.white {
|
|
433
|
+
toolbar.backgroundColor = isDarkMode ? UIColor.black : UIColor.white
|
|
434
|
+
toolbar.tintColor = textColor
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
}
|
|
242
438
|
}
|
|
243
439
|
|
|
244
440
|
open func setCredentials(credentials: WKWebViewCredentials?) {
|
|
@@ -376,7 +572,9 @@ open class WKWebViewController: UIViewController, WKScriptMessageHandler {
|
|
|
376
572
|
open func setupViewElements() {
|
|
377
573
|
self.setUpProgressView()
|
|
378
574
|
self.setUpConstraints()
|
|
575
|
+
self.setUpNavigationBarAppearance()
|
|
379
576
|
self.addBarButtonItems()
|
|
577
|
+
self.updateBarButtonItems()
|
|
380
578
|
}
|
|
381
579
|
|
|
382
580
|
@objc func restateViewHeight() {
|
|
@@ -388,7 +586,7 @@ open class WKWebViewController: UIViewController, WKScriptMessageHandler {
|
|
|
388
586
|
topPadding = window?.safeAreaInsets.top ?? 0.0
|
|
389
587
|
}
|
|
390
588
|
if UIDevice.current.orientation.isPortrait {
|
|
391
|
-
|
|
589
|
+
// Don't force toolbar visibility
|
|
392
590
|
if self.viewHeightPortrait == nil {
|
|
393
591
|
self.viewHeightPortrait = self.view.safeAreaLayoutGuide.layoutFrame.size.height
|
|
394
592
|
if toolbarItemTypes.count == 0 {
|
|
@@ -400,7 +598,7 @@ open class WKWebViewController: UIViewController, WKScriptMessageHandler {
|
|
|
400
598
|
}
|
|
401
599
|
self.currentViewHeight = self.viewHeightPortrait
|
|
402
600
|
} else if UIDevice.current.orientation.isLandscape {
|
|
403
|
-
|
|
601
|
+
// Don't force toolbar visibility
|
|
404
602
|
if self.viewHeightLandscape == nil {
|
|
405
603
|
self.viewHeightLandscape = self.view.safeAreaLayoutGuide.layoutFrame.size.height
|
|
406
604
|
if toolbarItemTypes.count == 0 {
|
|
@@ -432,6 +630,69 @@ open class WKWebViewController: UIViewController, WKScriptMessageHandler {
|
|
|
432
630
|
setUpState()
|
|
433
631
|
self.viewWasPresented = true
|
|
434
632
|
}
|
|
633
|
+
|
|
634
|
+
// Force update button appearances
|
|
635
|
+
updateButtonTintColors()
|
|
636
|
+
|
|
637
|
+
// Ensure status bar appearance is correct when view appears
|
|
638
|
+
// Make sure we have the latest tint color
|
|
639
|
+
if let tintColor = self.tintColor {
|
|
640
|
+
// Update the status bar background if needed
|
|
641
|
+
if let navController = navigationController, let backgroundColor = navController.navigationBar.backgroundColor ?? statusBarBackgroundView?.backgroundColor {
|
|
642
|
+
setupStatusBarBackground(color: backgroundColor)
|
|
643
|
+
} else {
|
|
644
|
+
setupStatusBarBackground(color: UIColor.white)
|
|
645
|
+
}
|
|
646
|
+
}
|
|
647
|
+
|
|
648
|
+
// Update status bar style
|
|
649
|
+
updateStatusBarStyle()
|
|
650
|
+
|
|
651
|
+
// Special handling for blank toolbar mode
|
|
652
|
+
if blankNavigationTab && statusBarBackgroundView != nil {
|
|
653
|
+
if let color = statusBarBackgroundView?.backgroundColor {
|
|
654
|
+
// Set view color to match status bar
|
|
655
|
+
view.backgroundColor = color
|
|
656
|
+
}
|
|
657
|
+
}
|
|
658
|
+
}
|
|
659
|
+
|
|
660
|
+
override open func viewDidAppear(_ animated: Bool) {
|
|
661
|
+
super.viewDidAppear(animated)
|
|
662
|
+
|
|
663
|
+
// Force add buttonNearDone if it's not visible yet
|
|
664
|
+
if buttonNearDoneIcon != nil {
|
|
665
|
+
// Check if button already exists in the navigation bar
|
|
666
|
+
let buttonExists = navigationItem.rightBarButtonItems?.contains { item in
|
|
667
|
+
return item.action == #selector(buttonNearDoneDidClick)
|
|
668
|
+
} ?? false
|
|
669
|
+
|
|
670
|
+
if !buttonExists {
|
|
671
|
+
// Create and add the button directly
|
|
672
|
+
let buttonItem = UIBarButtonItem(
|
|
673
|
+
image: buttonNearDoneIcon?.withRenderingMode(.alwaysTemplate),
|
|
674
|
+
style: .plain,
|
|
675
|
+
target: self,
|
|
676
|
+
action: #selector(buttonNearDoneDidClick)
|
|
677
|
+
)
|
|
678
|
+
|
|
679
|
+
// Apply tint color
|
|
680
|
+
if let tintColor = self.tintColor ?? self.navigationController?.navigationBar.tintColor {
|
|
681
|
+
buttonItem.tintColor = tintColor
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
// Add to right items
|
|
685
|
+
if navigationItem.rightBarButtonItems == nil {
|
|
686
|
+
navigationItem.rightBarButtonItems = [buttonItem]
|
|
687
|
+
} else {
|
|
688
|
+
var items = navigationItem.rightBarButtonItems ?? []
|
|
689
|
+
items.append(buttonItem)
|
|
690
|
+
navigationItem.rightBarButtonItems = items
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
print("[DEBUG] Force added buttonNearDone in viewDidAppear")
|
|
694
|
+
}
|
|
695
|
+
}
|
|
435
696
|
}
|
|
436
697
|
|
|
437
698
|
override open func viewWillDisappear(_ animated: Bool) {
|
|
@@ -595,7 +856,6 @@ fileprivate extension WKWebViewController {
|
|
|
595
856
|
}
|
|
596
857
|
}
|
|
597
858
|
|
|
598
|
-
// if presentingViewController != nil {
|
|
599
859
|
switch doneBarButtonItemPosition {
|
|
600
860
|
case .left:
|
|
601
861
|
if !leftNavigationBarItemTypes.contains(where: { type in
|
|
@@ -622,7 +882,6 @@ fileprivate extension WKWebViewController {
|
|
|
622
882
|
case .none:
|
|
623
883
|
break
|
|
624
884
|
}
|
|
625
|
-
// }
|
|
626
885
|
|
|
627
886
|
navigationItem.leftBarButtonItems = leftNavigationBarItemTypes.map {
|
|
628
887
|
barButtonItemType in
|
|
@@ -639,28 +898,128 @@ fileprivate extension WKWebViewController {
|
|
|
639
898
|
}
|
|
640
899
|
return UIBarButtonItem()
|
|
641
900
|
}
|
|
642
|
-
if rightBarButtons.count == 1 && buttonNearDoneIcon != nil && rightBarButtons[0] == doneBarButtonItem {
|
|
643
|
-
rightBarButtons.append(UIBarButtonItem(image: buttonNearDoneIcon, style: .plain, target: self, action: #selector(buttonNearDoneDidClick)))
|
|
644
|
-
}
|
|
645
|
-
navigationItem.rightBarButtonItems = rightBarButtons
|
|
646
901
|
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
902
|
+
// If we have buttonNearDoneIcon and the first (or only) right button is the done button
|
|
903
|
+
if buttonNearDoneIcon != nil &&
|
|
904
|
+
((rightBarButtons.count == 1 && rightBarButtons[0] == doneBarButtonItem) ||
|
|
905
|
+
(rightBarButtons.isEmpty && doneBarButtonItemPosition == .right) ||
|
|
906
|
+
rightBarButtons.contains(doneBarButtonItem)) {
|
|
907
|
+
|
|
908
|
+
// Check if button already exists to avoid duplicates
|
|
909
|
+
let buttonExists = rightBarButtons.contains { item in
|
|
910
|
+
let selector = #selector(buttonNearDoneDidClick)
|
|
911
|
+
return item.action == selector
|
|
912
|
+
}
|
|
913
|
+
|
|
914
|
+
if !buttonExists {
|
|
915
|
+
// Create button with proper tint and template rendering mode
|
|
916
|
+
let buttonItem = UIBarButtonItem(
|
|
917
|
+
image: buttonNearDoneIcon?.withRenderingMode(.alwaysTemplate),
|
|
918
|
+
style: .plain,
|
|
919
|
+
target: self,
|
|
920
|
+
action: #selector(buttonNearDoneDidClick)
|
|
921
|
+
)
|
|
922
|
+
|
|
923
|
+
// Apply tint from navigation bar or from tintColor property
|
|
924
|
+
if let tintColor = self.tintColor ?? self.navigationController?.navigationBar.tintColor {
|
|
925
|
+
buttonItem.tintColor = tintColor
|
|
926
|
+
}
|
|
927
|
+
|
|
928
|
+
// Make sure the done button is there before adding this one
|
|
929
|
+
if rightBarButtons.isEmpty && doneBarButtonItemPosition == .right {
|
|
930
|
+
rightBarButtons.append(doneBarButtonItem)
|
|
931
|
+
}
|
|
932
|
+
|
|
933
|
+
// Add the button
|
|
934
|
+
rightBarButtons.append(buttonItem)
|
|
935
|
+
|
|
936
|
+
print("[DEBUG] Added buttonNearDone to right bar buttons, icon: \(String(describing: buttonNearDoneIcon))")
|
|
937
|
+
} else {
|
|
938
|
+
print("[DEBUG] buttonNearDone already exists in right bar buttons")
|
|
650
939
|
}
|
|
651
940
|
}
|
|
652
941
|
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
942
|
+
navigationItem.rightBarButtonItems = rightBarButtons
|
|
943
|
+
|
|
944
|
+
// Create toolbar items
|
|
945
|
+
if !toolbarItemTypes.isEmpty {
|
|
946
|
+
// Check if toolbar has back and forward buttons
|
|
947
|
+
let hasBackButton = toolbarItemTypes.contains(where: {
|
|
948
|
+
if case .back = $0 { return true }
|
|
949
|
+
return false
|
|
950
|
+
})
|
|
951
|
+
|
|
952
|
+
let hasForwardButton = toolbarItemTypes.contains(where: {
|
|
953
|
+
if case .forward = $0 { return true }
|
|
954
|
+
return false
|
|
955
|
+
})
|
|
956
|
+
|
|
957
|
+
let hasReloadButton = toolbarItemTypes.contains(where: {
|
|
958
|
+
if case .reload = $0 { return true }
|
|
959
|
+
return false
|
|
960
|
+
})
|
|
961
|
+
|
|
962
|
+
if hasBackButton && hasForwardButton {
|
|
963
|
+
// Create Android-like toolbar with evenly spaced buttons
|
|
964
|
+
var items: [UIBarButtonItem] = []
|
|
965
|
+
let flexSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
|
|
966
|
+
|
|
967
|
+
// Add spacing before back button
|
|
968
|
+
items.append(flexSpace)
|
|
969
|
+
|
|
970
|
+
// Add back button
|
|
971
|
+
items.append(backBarButtonItem)
|
|
972
|
+
|
|
973
|
+
// Add spacing between buttons
|
|
974
|
+
items.append(flexSpace)
|
|
975
|
+
|
|
976
|
+
// Add forward button
|
|
977
|
+
items.append(forwardBarButtonItem)
|
|
978
|
+
|
|
979
|
+
// Add spacing between buttons
|
|
980
|
+
items.append(flexSpace)
|
|
981
|
+
|
|
982
|
+
// Add reload button if present
|
|
983
|
+
if hasReloadButton {
|
|
984
|
+
items.append(reloadBarButtonItem)
|
|
985
|
+
items.append(flexSpace)
|
|
986
|
+
}
|
|
987
|
+
|
|
988
|
+
setToolbarItems(items, animated: true)
|
|
989
|
+
} else {
|
|
990
|
+
// For other toolbar types, map the items directly
|
|
991
|
+
let items = toolbarItemTypes.map { type -> UIBarButtonItem in
|
|
992
|
+
switch type {
|
|
993
|
+
case .back:
|
|
994
|
+
return backBarButtonItem
|
|
995
|
+
case .forward:
|
|
996
|
+
return forwardBarButtonItem
|
|
997
|
+
case .reload:
|
|
998
|
+
return reloadBarButtonItem
|
|
999
|
+
case .stop:
|
|
1000
|
+
return stopBarButtonItem
|
|
1001
|
+
case .activity:
|
|
1002
|
+
return activityBarButtonItem
|
|
1003
|
+
case .done:
|
|
1004
|
+
return doneBarButtonItem
|
|
1005
|
+
case .flexibleSpace:
|
|
1006
|
+
return flexibleSpaceBarButtonItem
|
|
1007
|
+
case .custom:
|
|
1008
|
+
return UIBarButtonItem()
|
|
1009
|
+
}
|
|
1010
|
+
}
|
|
1011
|
+
setToolbarItems(items, animated: true)
|
|
657
1012
|
}
|
|
658
|
-
|
|
1013
|
+
} else {
|
|
1014
|
+
setToolbarItems([], animated: false)
|
|
659
1015
|
}
|
|
660
|
-
|
|
1016
|
+
|
|
1017
|
+
// After all buttons are set up, apply tint color
|
|
1018
|
+
updateButtonTintColors()
|
|
661
1019
|
}
|
|
662
1020
|
|
|
663
1021
|
func updateBarButtonItems() {
|
|
1022
|
+
// Update navigation buttons (completely separate from close button)
|
|
664
1023
|
backBarButtonItem.isEnabled = webView?.canGoBack ?? false
|
|
665
1024
|
forwardBarButtonItem.isEnabled = webView?.canGoForward ?? false
|
|
666
1025
|
|
|
@@ -696,9 +1055,21 @@ fileprivate extension WKWebViewController {
|
|
|
696
1055
|
|
|
697
1056
|
func setUpState() {
|
|
698
1057
|
navigationController?.setNavigationBarHidden(false, animated: true)
|
|
699
|
-
navigationController?.setToolbarHidden(toolbarItemTypes.count == 0, animated: true)
|
|
700
1058
|
|
|
701
|
-
if
|
|
1059
|
+
// Only show toolbar if there are toolbar items
|
|
1060
|
+
let hideToolbar = toolbarItemTypes.isEmpty
|
|
1061
|
+
navigationController?.setToolbarHidden(hideToolbar, animated: true)
|
|
1062
|
+
|
|
1063
|
+
// Set tint colors but don't override specific colors
|
|
1064
|
+
if tintColor == nil {
|
|
1065
|
+
// Use system appearance if no specific tint color is set
|
|
1066
|
+
let isDarkMode = traitCollection.userInterfaceStyle == .dark
|
|
1067
|
+
let textColor = isDarkMode ? UIColor.white : UIColor.black
|
|
1068
|
+
|
|
1069
|
+
navigationController?.navigationBar.tintColor = textColor
|
|
1070
|
+
navigationController?.toolbar.tintColor = textColor
|
|
1071
|
+
progressView?.progressTintColor = textColor
|
|
1072
|
+
} else {
|
|
702
1073
|
progressView?.progressTintColor = tintColor
|
|
703
1074
|
navigationController?.navigationBar.tintColor = tintColor
|
|
704
1075
|
navigationController?.toolbar.tintColor = tintColor
|
|
@@ -769,7 +1140,10 @@ fileprivate extension WKWebViewController {
|
|
|
769
1140
|
}
|
|
770
1141
|
|
|
771
1142
|
@objc func backDidClick(sender: AnyObject) {
|
|
772
|
-
|
|
1143
|
+
// Only handle back navigation, not closing
|
|
1144
|
+
if webView?.canGoBack ?? false {
|
|
1145
|
+
webView?.goBack()
|
|
1146
|
+
}
|
|
773
1147
|
}
|
|
774
1148
|
|
|
775
1149
|
@objc func forwardDidClick(sender: AnyObject) {
|
|
@@ -794,7 +1168,10 @@ fileprivate extension WKWebViewController {
|
|
|
794
1168
|
}
|
|
795
1169
|
|
|
796
1170
|
@objc func activityDidClick(sender: AnyObject) {
|
|
1171
|
+
print("[DEBUG] Activity button clicked, shareSubject: \(self.shareSubject ?? "nil")")
|
|
1172
|
+
|
|
797
1173
|
guard let s = self.source else {
|
|
1174
|
+
print("[DEBUG] Activity button: No source available")
|
|
798
1175
|
return
|
|
799
1176
|
}
|
|
800
1177
|
|
|
@@ -811,30 +1188,50 @@ fileprivate extension WKWebViewController {
|
|
|
811
1188
|
}
|
|
812
1189
|
|
|
813
1190
|
func showDisclaimer(items: [Any], sender: AnyObject) {
|
|
814
|
-
|
|
815
|
-
if
|
|
1191
|
+
// Show disclaimer dialog before sharing if shareDisclaimer is set
|
|
1192
|
+
if let disclaimer = self.shareDisclaimer, !disclaimer.isEmpty {
|
|
1193
|
+
// Create and show the alert
|
|
816
1194
|
let alert = UIAlertController(
|
|
817
|
-
title:
|
|
818
|
-
message:
|
|
1195
|
+
title: disclaimer["title"] as? String ?? "Title",
|
|
1196
|
+
message: disclaimer["message"] as? String ?? "Message",
|
|
819
1197
|
preferredStyle: UIAlertController.Style.alert)
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
1198
|
+
|
|
1199
|
+
// Add confirm button that continues with sharing
|
|
1200
|
+
alert.addAction(UIAlertAction(
|
|
1201
|
+
title: disclaimer["confirmBtn"] as? String ?? "Confirm",
|
|
1202
|
+
style: UIAlertAction.Style.default,
|
|
1203
|
+
handler: { _ in
|
|
1204
|
+
// Notify that confirm was clicked
|
|
1205
|
+
self.capBrowserPlugin?.notifyListeners("confirmBtnClicked", data: nil)
|
|
1206
|
+
|
|
1207
|
+
// Show the share dialog
|
|
1208
|
+
self.showShareSheet(items: items, sender: sender)
|
|
1209
|
+
}
|
|
1210
|
+
))
|
|
1211
|
+
|
|
1212
|
+
// Add cancel button
|
|
1213
|
+
alert.addAction(UIAlertAction(
|
|
1214
|
+
title: disclaimer["cancelBtn"] as? String ?? "Cancel",
|
|
1215
|
+
style: UIAlertAction.Style.cancel,
|
|
1216
|
+
handler: nil
|
|
1217
|
+
))
|
|
1218
|
+
|
|
1219
|
+
// Present the alert
|
|
829
1220
|
self.present(alert, animated: true, completion: nil)
|
|
830
1221
|
} else {
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
activityViewController.popoverPresentationController?.barButtonItem = (sender as! UIBarButtonItem)
|
|
834
|
-
self.present(activityViewController, animated: true, completion: nil)
|
|
1222
|
+
// No disclaimer, directly show share sheet
|
|
1223
|
+
showShareSheet(items: items, sender: sender)
|
|
835
1224
|
}
|
|
836
1225
|
}
|
|
837
1226
|
|
|
1227
|
+
// Separated the actual sharing functionality
|
|
1228
|
+
private func showShareSheet(items: [Any], sender: AnyObject) {
|
|
1229
|
+
let activityViewController = UIActivityViewController(activityItems: items, applicationActivities: nil)
|
|
1230
|
+
activityViewController.setValue(self.shareSubject ?? self.title, forKey: "subject")
|
|
1231
|
+
activityViewController.popoverPresentationController?.barButtonItem = (sender as! UIBarButtonItem)
|
|
1232
|
+
self.present(activityViewController, animated: true, completion: nil)
|
|
1233
|
+
}
|
|
1234
|
+
|
|
838
1235
|
func closeView () {
|
|
839
1236
|
var canDismiss = true
|
|
840
1237
|
if let url = self.source?.url {
|
|
@@ -880,6 +1277,42 @@ fileprivate extension WKWebViewController {
|
|
|
880
1277
|
}
|
|
881
1278
|
|
|
882
1279
|
func canRotate() {}
|
|
1280
|
+
|
|
1281
|
+
func close() {
|
|
1282
|
+
let currentUrl = webView?.url?.absoluteString ?? ""
|
|
1283
|
+
dismiss(animated: true, completion: nil)
|
|
1284
|
+
capBrowserPlugin?.notifyListeners("closeEvent", data: ["url": currentUrl])
|
|
1285
|
+
}
|
|
1286
|
+
|
|
1287
|
+
open func setUpNavigationBarAppearance() {
|
|
1288
|
+
// Set up basic bar appearance
|
|
1289
|
+
if let navBar = navigationController?.navigationBar {
|
|
1290
|
+
// Make navigation bar transparent
|
|
1291
|
+
navBar.setBackgroundImage(UIImage(), for: .default)
|
|
1292
|
+
navBar.shadowImage = UIImage()
|
|
1293
|
+
navBar.isTranslucent = true
|
|
1294
|
+
|
|
1295
|
+
// Ensure tint colors are applied properly
|
|
1296
|
+
if navBar.tintColor == nil {
|
|
1297
|
+
navBar.tintColor = tintColor ?? .black
|
|
1298
|
+
}
|
|
1299
|
+
|
|
1300
|
+
// Ensure text colors are set
|
|
1301
|
+
if navBar.titleTextAttributes == nil {
|
|
1302
|
+
navBar.titleTextAttributes = [NSAttributedString.Key.foregroundColor: tintColor ?? .black]
|
|
1303
|
+
}
|
|
1304
|
+
|
|
1305
|
+
// Ensure the navigation bar buttons are properly visible
|
|
1306
|
+
for item in navBar.items ?? [] {
|
|
1307
|
+
for barButton in (item.leftBarButtonItems ?? []) + (item.rightBarButtonItems ?? []) {
|
|
1308
|
+
barButton.tintColor = tintColor ?? navBar.tintColor ?? .black
|
|
1309
|
+
}
|
|
1310
|
+
}
|
|
1311
|
+
}
|
|
1312
|
+
|
|
1313
|
+
// Force button colors to update
|
|
1314
|
+
updateButtonTintColors()
|
|
1315
|
+
}
|
|
883
1316
|
}
|
|
884
1317
|
|
|
885
1318
|
// MARK: - WKUIDelegate
|
package/package.json
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|