Autocomplete UI

This commit is contained in:
James Magahern
2020-09-21 17:56:22 -07:00
parent 7f2cd23889
commit e2d5dbee59
5 changed files with 155 additions and 5 deletions

View File

@@ -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
}
}