27 lines
1.1 KiB
Swift
27 lines
1.1 KiB
Swift
import DeviceActivity
|
|
import OSLog
|
|
|
|
final class ActivityMonitor: DeviceActivityMonitor {
|
|
private let logger = Logger(subsystem: "APC", category: "DeviceActivity")
|
|
override func intervalDidStart(for activity: DeviceActivityName) {
|
|
super.intervalDidStart(for: activity)
|
|
handle(activity)
|
|
}
|
|
override func intervalDidEnd(for activity: DeviceActivityName) {
|
|
super.intervalDidEnd(for: activity)
|
|
handle(activity, ended: true)
|
|
}
|
|
override func eventDidReachThreshold(_ event: DeviceActivityEvent.Name, activity: DeviceActivityName) {
|
|
super.eventDidReachThreshold(event, activity: activity)
|
|
handle(activity, event: event)
|
|
}
|
|
private func handle(_ activity: DeviceActivityName, event: DeviceActivityEvent.Name? = nil,
|
|
ended: Bool = false) {
|
|
do { try Enforcement.callback(activity: activity, event: event, ended: ended) }
|
|
catch {
|
|
// Never clear existing restrictions because storage is temporarily unavailable.
|
|
logger.error("Screen Time callback could not reconcile state: \(String(describing: error), privacy: .public)")
|
|
}
|
|
}
|
|
}
|