Support selects a credential identity from the QuickType bar
This commit is contained in:
parent
d4669bbfcb
commit
29d74c48e5
6 changed files with 125 additions and 30 deletions
|
|
@ -22,6 +22,8 @@ class CredentialProviderViewController: ASCredentialProviderViewController {
|
|||
embeddedNavigationController.viewControllers.first as! PasswordsViewController
|
||||
}
|
||||
|
||||
lazy var credentialProvider = CredentialProvider(viewController: self, extensionContext: self.extensionContext)
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
passcodelock.presentPasscodeLockIfNeeded(self)
|
||||
|
|
@ -33,23 +35,23 @@ class CredentialProviderViewController: ASCredentialProviderViewController {
|
|||
}
|
||||
|
||||
override func prepareCredentialList(for serviceIdentifiers: [ASCredentialServiceIdentifier]) {
|
||||
credentialProvider.identifier = serviceIdentifiers.first
|
||||
let url = serviceIdentifiers.first.flatMap { URL(string: $0.identifier) }
|
||||
passwordsViewController.navigationItem.prompt = url?.host
|
||||
let keywords = url?.host?.sanitizedDomain?.components(separatedBy: ".") ?? []
|
||||
passwordsViewController.showPasswordsWithSuggstion(keywords)
|
||||
}
|
||||
|
||||
override func provideCredentialWithoutUserInteraction(for credentialIdentity: ASPasswordCredentialIdentity) {
|
||||
credentialProvider.credentials(for: credentialIdentity)
|
||||
}
|
||||
}
|
||||
|
||||
extension CredentialProviderViewController: PasswordSelectionDelegate {
|
||||
func selected(password: PasswordTableEntry) {
|
||||
let passwordEntity = password.passwordEntity
|
||||
|
||||
decryptPassword(in: self, with: passwordEntity) { password in
|
||||
let username = password.getUsernameForCompletion()
|
||||
let password = password.password
|
||||
let passwordCredential = ASPasswordCredential(user: username, password: password)
|
||||
self.extensionContext.completeRequest(withSelectedCredential: passwordCredential)
|
||||
}
|
||||
credentialProvider.persistAndProvideCredentials(with: passwordEntity.getPath())
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -74,7 +74,16 @@ extension PasswordsViewController: UISearchBarDelegate {
|
|||
extension PasswordsViewController: UITableViewDelegate {
|
||||
func tableView(_: UITableView, didSelectRowAt indexPath: IndexPath) {
|
||||
tableView.deselectRow(at: indexPath, animated: true)
|
||||
let entry = dataSource.filteredPasswordsTableEntries[indexPath.row]
|
||||
var entry: PasswordTableEntry!
|
||||
if dataSource.showSuggestion {
|
||||
if indexPath.section == 0 {
|
||||
entry = dataSource.suggestedPasswordsTableEntries[indexPath.row]
|
||||
} else {
|
||||
entry = dataSource.filteredPasswordsTableEntries[indexPath.row]
|
||||
}
|
||||
} else {
|
||||
entry = dataSource.filteredPasswordsTableEntries[indexPath.row]
|
||||
}
|
||||
|
||||
UIImpactFeedbackGenerator(style: .medium).impactOccurred()
|
||||
self.selectionDelegate?.selected(password: entry)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue