// // DeviceActivityMonitorExtension.swift // OpenAppLockMonitor // import DeviceActivity import Foundation /// Background half of limit-rule enforcement. The app schedules a daily /// activity per limit rule (with per-minute usage checkpoints for time /// limits); this extension reacts: it resets shields at midnight, records /// usage minutes, blocks at the budget, and ends granted open sessions. final class DeviceActivityMonitorExtension: DeviceActivityMonitor { private var enforcement: LimitEnforcement { LimitEnforcement( snapshots: RuleSnapshotStore(), ledger: UsageLedger(), shields: ManagedSettingsShieldController() ) } override func intervalDidStart(for activity: DeviceActivityName) { super.intervalDidStart(for: activity) if let ruleID = MonitoringPlan.ruleID(fromDailyActivityName: activity.rawValue) { enforcement.handleDayStart(ruleID: ruleID) } } override func intervalDidEnd(for activity: DeviceActivityName) { super.intervalDidEnd(for: activity) if let ruleID = MonitoringPlan.ruleID(fromSessionActivityName: activity.rawValue) { enforcement.handleOpenSessionEnded(ruleID: ruleID) DeviceActivityCenter().stopMonitoring([activity]) } } override func eventDidReachThreshold( _ event: DeviceActivityEvent.Name, activity: DeviceActivityName ) { super.eventDidReachThreshold(event, activity: activity) guard let ruleID = MonitoringPlan.ruleID(fromDailyActivityName: activity.rawValue), let minutes = MonitoringPlan.minutes(fromEventName: event.rawValue) else { return } enforcement.handleUsageMinutes(minutes, ruleID: ruleID) } }