Autocomplete UI
This commit is contained in:
@@ -10,7 +10,8 @@ import UniformTypeIdentifiers
|
||||
|
||||
class BrowserViewController: UIViewController, WKNavigationDelegate, WKUIDelegate,
|
||||
UITextFieldDelegate, ScriptPolicyViewControllerDelegate,
|
||||
UIPopoverPresentationControllerDelegate, TabDelegate, TabPickerViewControllerDelegate
|
||||
UIPopoverPresentationControllerDelegate, TabDelegate, TabPickerViewControllerDelegate,
|
||||
AutocompleteViewControllerDelegate
|
||||
{
|
||||
let browserView = BrowserView()
|
||||
var tab: Tab { didSet { didChangeTab(tab) } }
|
||||
@@ -19,6 +20,8 @@ class BrowserViewController: UIViewController, WKNavigationDelegate, WKUIDelegat
|
||||
private let tabController = TabController()
|
||||
private let toolbarController = ToolbarViewController()
|
||||
|
||||
private let autocompleteViewController = AutocompleteViewController()
|
||||
|
||||
private var policyManager: ResourcePolicyManager { tabController.policyManager }
|
||||
|
||||
override var canBecomeFirstResponder: Bool { true }
|
||||
@@ -158,9 +161,18 @@ class BrowserViewController: UIViewController, WKNavigationDelegate, WKUIDelegat
|
||||
self.present(alert, animated: true, completion: nil)
|
||||
}), for: .touchUpInside)
|
||||
|
||||
// Cancel button: hide autocomplete if applicable
|
||||
toolbarController.toolbarView.cancelButton.addAction(UIAction(handler: { [unowned self] _ in
|
||||
self.autocompleteViewController.view.isHidden = true
|
||||
}), for: .touchUpInside)
|
||||
|
||||
// TextField delegate
|
||||
toolbarController.urlBar.textField.delegate = self
|
||||
|
||||
// Autocomplete controller
|
||||
autocompleteViewController.delegate = self
|
||||
autocompleteViewController.view.isHidden = true
|
||||
|
||||
self.view = browserView
|
||||
}
|
||||
|
||||
@@ -195,6 +207,9 @@ class BrowserViewController: UIViewController, WKNavigationDelegate, WKUIDelegat
|
||||
// Change webView
|
||||
browserView.webView = webView
|
||||
|
||||
// Autocomplete view
|
||||
browserView.autocompleteView = autocompleteViewController.collectionView
|
||||
|
||||
// Load progress
|
||||
updateLoadProgress(forWebView: webView)
|
||||
loadingObservation = webView.observe(\.estimatedProgress) { [unowned self] (webView, observedChange) in
|
||||
@@ -272,6 +287,9 @@ class BrowserViewController: UIViewController, WKNavigationDelegate, WKUIDelegat
|
||||
tab.blockedScriptOrigins.removeAll()
|
||||
updateScriptBlockerButton()
|
||||
|
||||
// Blur url bar if applicable
|
||||
toolbarController.urlBar.textField.resignFirstResponder()
|
||||
|
||||
updateTitleAndURL(forWebView: webView)
|
||||
|
||||
if let url = webView.url {
|
||||
@@ -327,7 +345,9 @@ class BrowserViewController: UIViewController, WKNavigationDelegate, WKUIDelegat
|
||||
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
|
||||
if let text = textField.text {
|
||||
let matches = BrowserHistory.shared.visitedToplevelHistoryItems(matching: text)
|
||||
print(matches)
|
||||
autocompleteViewController.historyItems = matches
|
||||
|
||||
autocompleteViewController.view.isHidden = matches.count == 0
|
||||
}
|
||||
|
||||
return true
|
||||
@@ -358,9 +378,14 @@ class BrowserViewController: UIViewController, WKNavigationDelegate, WKUIDelegat
|
||||
|
||||
textField.resignFirstResponder()
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
func textFieldDidEndEditing(_ textField: UITextField) {
|
||||
autocompleteViewController.view.isHidden = true
|
||||
}
|
||||
|
||||
// MARK: Tab Delegate
|
||||
|
||||
func didBlockScriptOrigin(_ origin: String, forTab: Tab) {
|
||||
@@ -396,4 +421,11 @@ class BrowserViewController: UIViewController, WKNavigationDelegate, WKUIDelegat
|
||||
tab.javaScriptEnabled = enabled
|
||||
toolbarController.scriptControllerIconView.shieldsDown = enabled
|
||||
}
|
||||
|
||||
// MARK: Autocomplete Controller Delegate
|
||||
|
||||
func autocompleteController(_: AutocompleteViewController, didSelectHistoryItem item: HistoryItem) {
|
||||
tab.beginLoadingURL(item.url)
|
||||
autocompleteViewController.view.isHidden = true
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user