// // Copyright 2025 Signal Messenger, LLC // SPDX-License-Identifier: AGPL-3.0-only // import Foundation public import UIKit extension Notification.Name { public static let batteryLevelChanged: Notification.Name = UIDevice.batteryLevelDidChangeNotification public static let batteryLowPowerModeChanged: Notification.Name = .NSProcessInfoPowerStateDidChange } @MainActor public protocol DeviceBatteryLevelMonitor { /// A value from 0 to 1 var batteryLevel: Float { get } } @MainActor public protocol DeviceBatteryLevelManager { /// Setting `UIDevice.isBatteryMonitoringEnabled` incurs a cost and Apple would like we /// only do it as strictly needed. To manage this app wide, use a unique reason string. As long /// as some monitor is active, battery monitoring will be enabled (thus allowing checking the /// current battery level and getting battery level change notifications). func beginMonitoring(reason: String) -> DeviceBatteryLevelMonitor /// MUST call this before releasing the reference to the DeviceBatteryLevelMonitor from `beginMonitoring`. func endMonitoring(_ monitor: DeviceBatteryLevelMonitor) var isLowPowerModeEnabled: Bool { get } }