Support selects a credential identity from the QuickType bar

This commit is contained in:
Mingshen Sun 2021-01-03 15:08:15 -08:00
parent d4669bbfcb
commit 29d74c48e5
No known key found for this signature in database
GPG key ID: 1F86BA2052FED3B4
6 changed files with 125 additions and 30 deletions

View file

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

View file

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