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
protocol AutocompleteViewControllerDelegate: class {
protocol AutocompleteViewControllerDelegate: AnyObject {
func autocompleteController(_: AutocompleteViewController, didSelectHistoryItem: HistoryItem)
}

View File

@@ -41,6 +41,14 @@ class BrowserViewController: UIViewController, WKNavigationDelegate, WKUIDelegat
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 }
init() {
@@ -124,8 +132,7 @@ class BrowserViewController: UIViewController, WKNavigationDelegate, WKUIDelegat
// Dark mode button
toolbarController.darkModeButton.addAction(UIAction(handler: { [unowned self] _ in
self.tab.bridge.darkModeEnabled = !self.tab.bridge.darkModeEnabled
self.toolbarController.darkModeEnabled = self.tab.bridge.darkModeEnabled
self.darkModeEnabled = !self.darkModeEnabled
}), for: .touchUpInside)
// Tabs button
@@ -192,7 +199,7 @@ class BrowserViewController: UIViewController, WKNavigationDelegate, WKUIDelegat
// Font size adjust
toolbarController.urlBar.documentButton.addAction(UIAction(handler: { [unowned self] _ in
let documentControls = DocumentControlViewController()
let documentControls = DocumentControlViewController(darkModeEnabled: tab.bridge.darkModeEnabled)
documentControls.modalPresentationStyle = .popover
documentControls.popoverPresentationController?.permittedArrowDirections = [ .down, .up ]
documentControls.popoverPresentationController?.sourceView = toolbarController.urlBar.documentButton
@@ -257,6 +264,12 @@ class BrowserViewController: UIViewController, WKNavigationDelegate, WKUIDelegat
}
}, 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)
}), for: .touchUpInside)

View File

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

View File

@@ -15,13 +15,14 @@ class DocumentControlViewController: UIViewController
let navigationControlView = NavigationControlsView()
let settingsView = DocumentControlView()
let readabilityView = DocumentControlView()
let darkModeView = DocumentControlView()
var observations: [NSKeyValueObservation] = []
static public let preferredWidth = CGFloat(200.0)
convenience init() {
self.init(nibName: nil, bundle: nil)
init(darkModeEnabled: Bool) {
super.init(nibName: nil, bundle: nil)
findOnPageControlView.label.text = "Find On Page"
findOnPageControlView.imageView.image = UIImage(systemName: "magnifyingglass")
@@ -32,10 +33,20 @@ class DocumentControlViewController: UIViewController
readabilityView.label.text = "Reader Mode"
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(fontSizeAdjustView)
documentControlView.addArrangedSubview(findOnPageControlView)
documentControlView.addArrangedSubview(darkModeView)
documentControlView.addArrangedSubview(readabilityView)
documentControlView.addArrangedSubview(settingsView)
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() {
self.view = documentControlView
}

View File

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

View File

@@ -23,11 +23,8 @@ class ReaderViewController: UIViewController
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 = {
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?) {
@@ -53,11 +50,7 @@ class ReaderViewController: UIViewController
}
private func updateDarkModeButton() {
if darkModeEnabled {
darkModeButton.image = darkModeEnabledImage
} else {
darkModeButton.image = darkModeDisabledImage
}
darkModeButton.image = DarkModeControls.buttonImage(forDarkModeState: darkModeEnabled)
}
@objc

View File

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

View File

@@ -7,6 +7,17 @@
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
{
let urlBar = URLBar()
@@ -24,16 +35,9 @@ class ToolbarViewController: UIViewController
var darkModeEnabled: Bool = false {
didSet {
if darkModeEnabled {
darkModeButton.setImage(darkModeEnabledImage, for: .normal)
} else {
darkModeButton.setImage(darkModeDisabledImage, for: .normal)
darkModeButton.setImage(DarkModeControls.buttonImage(forDarkModeState: darkModeEnabled), for: .normal)
}
}
}
private let darkModeDisabledImage = UIImage(systemName: "moon.circle")
private let darkModeEnabledImage = UIImage(systemName: "moon.circle.fill")
init() {
super.init(nibName: nil, bundle: nil)
@@ -41,7 +45,7 @@ class ToolbarViewController: UIViewController
toolbarView.urlBar = urlBar
// Dark mode button
darkModeButton.setImage(darkModeDisabledImage, for: .normal)
darkModeButton.setImage(DarkModeControls.buttonImage(forDarkModeState: darkModeEnabled), for: .normal)
// Share button
shareButton.setImage(UIImage(systemName: "square.and.arrow.up"), for: .normal)