mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
72 lines
2.2 KiB
Swift
72 lines
2.2 KiB
Swift
import Foundation
|
|
import SwiftSignalKit
|
|
import Postbox
|
|
import TelegramCore
|
|
|
|
public enum PermissionKind: Int32 {
|
|
case contacts
|
|
case notifications
|
|
case siri
|
|
case cellularData
|
|
}
|
|
|
|
public enum PermissionRequestStatus {
|
|
case requestable
|
|
case denied
|
|
case unreachable
|
|
case allowed
|
|
|
|
init(accessType: AccessType) {
|
|
switch accessType {
|
|
case .notDetermined:
|
|
self = .requestable
|
|
case .denied, .restricted:
|
|
self = .denied
|
|
case .unreachable:
|
|
self = .unreachable
|
|
case .allowed:
|
|
self = .allowed
|
|
}
|
|
}
|
|
}
|
|
|
|
public enum PermissionState: Equatable {
|
|
case contacts(status: PermissionRequestStatus)
|
|
case notifications(status: PermissionRequestStatus)
|
|
case siri(status: PermissionRequestStatus)
|
|
case cellularData
|
|
|
|
var kind: PermissionKind {
|
|
switch self {
|
|
case .contacts:
|
|
return .contacts
|
|
case .notifications:
|
|
return .notifications
|
|
case .siri:
|
|
return .siri
|
|
case .cellularData:
|
|
return .cellularData
|
|
}
|
|
}
|
|
|
|
public var status: PermissionRequestStatus {
|
|
switch self {
|
|
case let .contacts(status):
|
|
return status
|
|
case let .notifications(status):
|
|
return status
|
|
case let .siri(status):
|
|
return status
|
|
case .cellularData:
|
|
return .unreachable
|
|
}
|
|
}
|
|
}
|
|
|
|
public func requiredPermissions(context: AccountContext) -> Signal<(PermissionState, PermissionState, PermissionState), NoError> {
|
|
return combineLatest(DeviceAccess.authorizationStatus(context: context, subject: .contacts), DeviceAccess.authorizationStatus(context: context, subject: .notifications), DeviceAccess.authorizationStatus(context: context, subject: .siri))
|
|
|> map { contactsStatus, notificationsStatus, siriStatus in
|
|
return (.contacts(status: PermissionRequestStatus(accessType: contactsStatus)), .notifications(status: PermissionRequestStatus(accessType: notificationsStatus)), .siri(status: PermissionRequestStatus(accessType: siriStatus)))
|
|
}
|
|
}
|