Add notification action to copy OTP or just inform about the copied OTP (#513)
* Add notification action to copy OTP or just inform about the copied OTP The notification either shows the current OTP which can be copied by a notification action or it shows just a hint to inform about the copied OTP. This depends on the new option "autoCopyOTP". * Extract method * Set type and style one-time
This commit is contained in:
parent
63e7235978
commit
e1cbcb5d7a
11 changed files with 155 additions and 76 deletions
47
passKit/Helpers/NotificationCenterDispatcher.swift
Normal file
47
passKit/Helpers/NotificationCenterDispatcher.swift
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
//
|
||||
// NotificationCenterDispatcher.swift
|
||||
// passKit
|
||||
//
|
||||
// Created by Danny Moesch on 29.09.21.
|
||||
// Copyright © 2021 Bob Sun. All rights reserved.
|
||||
//
|
||||
|
||||
public class NotificationCenterDispatcher: NSObject, UNUserNotificationCenterDelegate {
|
||||
public static let shared = NotificationCenterDispatcher()
|
||||
|
||||
public func userNotificationCenter(_: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
|
||||
if response.actionIdentifier == Globals.otpNotificationCopyAction {
|
||||
if let otp = response.notification.request.content.userInfo["otp"] as? String {
|
||||
UIPasteboard.general.string = otp
|
||||
}
|
||||
}
|
||||
completionHandler()
|
||||
}
|
||||
|
||||
public static func showOTPNotification(password: Password) {
|
||||
guard let otp = password.currentOtp else {
|
||||
return
|
||||
}
|
||||
let notificationCenter = UNUserNotificationCenter.current()
|
||||
notificationCenter.getNotificationSettings { state in
|
||||
guard state.authorizationStatus == .authorized else {
|
||||
return
|
||||
}
|
||||
let content = UNMutableNotificationContent()
|
||||
if Defaults.autoCopyOTP {
|
||||
content.title = "OTPForPasswordCopied".localize(password.name)
|
||||
} else {
|
||||
content.title = "OTPForPassword".localize(password.name)
|
||||
content.body = otp
|
||||
content.categoryIdentifier = Globals.otpNotificationCategory
|
||||
content.userInfo = [
|
||||
"path": password.namePath,
|
||||
"otp": otp,
|
||||
]
|
||||
}
|
||||
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 1, repeats: false)
|
||||
let request = UNNotificationRequest(identifier: Globals.otpNotification, content: content, trigger: trigger)
|
||||
notificationCenter.add(request)
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue