Document Controls: adds dark mode button

This commit is contained in:
James Magahern
2021-02-15 22:47:02 -08:00
parent 2b5475d7f8
commit 00e50b5bda
8 changed files with 52 additions and 27 deletions

View File

@@ -7,7 +7,7 @@
import UIKit import UIKit
protocol AutocompleteViewControllerDelegate: class { protocol AutocompleteViewControllerDelegate: AnyObject {
func autocompleteController(_: AutocompleteViewController, didSelectHistoryItem: HistoryItem) func autocompleteController(_: AutocompleteViewController, didSelectHistoryItem: HistoryItem)
} }

View File

@@ -41,6 +41,14 @@ class BrowserViewController: UIViewController, WKNavigationDelegate, WKUIDelegat
private var commandKeyHeld: Bool = false private var commandKeyHeld: Bool = false
private var darkModeEnabled: Bool {
get { tab.bridge.darkModeEnabled }
set {
tab.bridge.darkModeEnabled = newValue
toolbarController.darkModeEnabled = newValue
}
}
override var preferredStatusBarStyle: UIStatusBarStyle { .lightContent } override var preferredStatusBarStyle: UIStatusBarStyle { .lightContent }
init() { init() {
@@ -124,8 +132,7 @@ class BrowserViewController: UIViewController, WKNavigationDelegate, WKUIDelegat
// Dark mode button // Dark mode button
toolbarController.darkModeButton.addAction(UIAction(handler: { [unowned self] _ in toolbarController.darkModeButton.addAction(UIAction(handler: { [unowned self] _ in
self.tab.bridge.darkModeEnabled = !self.tab.bridge.darkModeEnabled self.darkModeEnabled = !self.darkModeEnabled
self.toolbarController.darkModeEnabled = self.tab.bridge.darkModeEnabled
}), for: .touchUpInside) }), for: .touchUpInside)
// Tabs button // Tabs button
@@ -192,7 +199,7 @@ class BrowserViewController: UIViewController, WKNavigationDelegate, WKUIDelegat
// Font size adjust // Font size adjust
toolbarController.urlBar.documentButton.addAction(UIAction(handler: { [unowned self] _ in toolbarController.urlBar.documentButton.addAction(UIAction(handler: { [unowned self] _ in
let documentControls = DocumentControlViewController() let documentControls = DocumentControlViewController(darkModeEnabled: tab.bridge.darkModeEnabled)
documentControls.modalPresentationStyle = .popover documentControls.modalPresentationStyle = .popover
documentControls.popoverPresentationController?.permittedArrowDirections = [ .down, .up ] documentControls.popoverPresentationController?.permittedArrowDirections = [ .down, .up ]
documentControls.popoverPresentationController?.sourceView = toolbarController.urlBar.documentButton documentControls.popoverPresentationController?.sourceView = toolbarController.urlBar.documentButton
@@ -257,6 +264,12 @@ class BrowserViewController: UIViewController, WKNavigationDelegate, WKUIDelegat
} }
}, for: .touchUpInside) }, for: .touchUpInside)
// Dark mode
documentControls.darkModeView.addAction(UIAction { [unowned self] _ in
self.darkModeEnabled = !self.darkModeEnabled
documentControls.dismiss(animated: true, completion: nil)
}, for: .touchUpInside)
present(documentControls, animated: true, completion: nil) present(documentControls, animated: true, completion: nil)
}), for: .touchUpInside) }), for: .touchUpInside)

View File

@@ -59,7 +59,7 @@ class DocumentControlView: UIControl
let imageSize: CGFloat = 24.0 let imageSize: CGFloat = 24.0
let bounds = self.bounds.inset(by: layoutMargins) let bounds = self.bounds.inset(by: layoutMargins)
imageView.frame = CGRect( imageView.frame = CGRect(
x: bounds.minX, y: 0.0, x: bounds.minX + 6.0, y: 0.0,
width: imageSize, height: imageSize width: imageSize, height: imageSize
).centeredY(inRect: self.bounds) ).centeredY(inRect: self.bounds)

View File

@@ -15,13 +15,14 @@ class DocumentControlViewController: UIViewController
let navigationControlView = NavigationControlsView() let navigationControlView = NavigationControlsView()
let settingsView = DocumentControlView() let settingsView = DocumentControlView()
let readabilityView = DocumentControlView() let readabilityView = DocumentControlView()
let darkModeView = DocumentControlView()
var observations: [NSKeyValueObservation] = [] var observations: [NSKeyValueObservation] = []
static public let preferredWidth = CGFloat(200.0) static public let preferredWidth = CGFloat(200.0)
convenience init() { init(darkModeEnabled: Bool) {
self.init(nibName: nil, bundle: nil) super.init(nibName: nil, bundle: nil)
findOnPageControlView.label.text = "Find On Page" findOnPageControlView.label.text = "Find On Page"
findOnPageControlView.imageView.image = UIImage(systemName: "magnifyingglass") findOnPageControlView.imageView.image = UIImage(systemName: "magnifyingglass")
@@ -32,10 +33,20 @@ class DocumentControlViewController: UIViewController
readabilityView.label.text = "Reader Mode" readabilityView.label.text = "Reader Mode"
readabilityView.imageView.image = UIImage(systemName: "doc.richtext") readabilityView.imageView.image = UIImage(systemName: "doc.richtext")
if darkModeEnabled {
darkModeView.label.text = "Disable Dark Mode"
} else {
darkModeView.label.text = "Enable Dark Mode"
}
darkModeView.imageView.image = DarkModeControls.buttonImage(forDarkModeState: darkModeEnabled)
documentControlView.addArrangedSubview(navigationControlView) documentControlView.addArrangedSubview(navigationControlView)
documentControlView.addArrangedSubview(fontSizeAdjustView) documentControlView.addArrangedSubview(fontSizeAdjustView)
documentControlView.addArrangedSubview(findOnPageControlView) documentControlView.addArrangedSubview(findOnPageControlView)
documentControlView.addArrangedSubview(darkModeView)
documentControlView.addArrangedSubview(readabilityView) documentControlView.addArrangedSubview(readabilityView)
documentControlView.addArrangedSubview(settingsView) documentControlView.addArrangedSubview(settingsView)
for (i, view) in documentControlView.arrangedSubviews.enumerated() { for (i, view) in documentControlView.arrangedSubviews.enumerated() {
@@ -43,6 +54,10 @@ class DocumentControlViewController: UIViewController
} }
} }
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func loadView() { override func loadView() {
self.view = documentControlView self.view = documentControlView
} }

View File

@@ -8,7 +8,7 @@
import UIKit import UIKit
@objc @objc
protocol ShortcutResponder: class { protocol ShortcutResponder: AnyObject {
@objc @objc
optional func focusURLBar(_ sender: Any?) optional func focusURLBar(_ sender: Any?)

View File

@@ -23,11 +23,8 @@ class ReaderViewController: UIViewController
private let bridge = ProcessBundleBridge(webViewConfiguration: nil) private let bridge = ProcessBundleBridge(webViewConfiguration: nil)
private let darkModeDisabledImage = UIImage(systemName: "moon.circle")
private let darkModeEnabledImage = UIImage(systemName: "moon.circle.fill")
private lazy var darkModeButton: UIBarButtonItem = { private lazy var darkModeButton: UIBarButtonItem = {
UIBarButtonItem(image: darkModeEnabledImage, style: .plain, target: self, action: #selector(self.didTapDarkModeButton)) UIBarButtonItem(image: nil, style: .plain, target: self, action: #selector(self.didTapDarkModeButton))
}() }()
init(readableHTMLString: String, baseURL: URL?) { init(readableHTMLString: String, baseURL: URL?) {
@@ -53,11 +50,7 @@ class ReaderViewController: UIViewController
} }
private func updateDarkModeButton() { private func updateDarkModeButton() {
if darkModeEnabled { darkModeButton.image = DarkModeControls.buttonImage(forDarkModeState: darkModeEnabled)
darkModeButton.image = darkModeEnabledImage
} else {
darkModeButton.image = darkModeDisabledImage
}
} }
@objc @objc

View File

@@ -8,7 +8,7 @@
import UIKit import UIKit
import Combine import Combine
protocol TabDelegate: class protocol TabDelegate: AnyObject
{ {
func didBlockScriptOrigin(_ origin: String, forTab: Tab) func didBlockScriptOrigin(_ origin: String, forTab: Tab)
} }

View File

@@ -7,6 +7,17 @@
import UIKit import UIKit
public struct DarkModeControls
{
public static func buttonImage(forDarkModeState enabled: Bool) -> UIImage {
if enabled {
return UIImage(systemName: "moon.circle.fill")!
} else {
return UIImage(systemName: "moon.circle")!
}
}
}
class ToolbarViewController: UIViewController class ToolbarViewController: UIViewController
{ {
let urlBar = URLBar() let urlBar = URLBar()
@@ -24,24 +35,17 @@ class ToolbarViewController: UIViewController
var darkModeEnabled: Bool = false { var darkModeEnabled: Bool = false {
didSet { didSet {
if darkModeEnabled { darkModeButton.setImage(DarkModeControls.buttonImage(forDarkModeState: darkModeEnabled), for: .normal)
darkModeButton.setImage(darkModeEnabledImage, for: .normal)
} else {
darkModeButton.setImage(darkModeDisabledImage, for: .normal)
}
} }
} }
private let darkModeDisabledImage = UIImage(systemName: "moon.circle")
private let darkModeEnabledImage = UIImage(systemName: "moon.circle.fill")
init() { init() {
super.init(nibName: nil, bundle: nil) super.init(nibName: nil, bundle: nil)
toolbarView.urlBar = urlBar toolbarView.urlBar = urlBar
// Dark mode button // Dark mode button
darkModeButton.setImage(darkModeDisabledImage, for: .normal) darkModeButton.setImage(DarkModeControls.buttonImage(forDarkModeState: darkModeEnabled), for: .normal)
// Share button // Share button
shareButton.setImage(UIImage(systemName: "square.and.arrow.up"), for: .normal) shareButton.setImage(UIImage(systemName: "square.and.arrow.up"), for: .normal)