mobile-ios/CovidSafe/Herald/Sensor/Data/BatteryLog.swift
2020-12-19 16:13:44 +11:00

50 lines
1.9 KiB
Swift

//
// BatteryLog.swift
//
// Copyright 2020 VMware, Inc.
// SPDX-License-Identifier: MIT
//
import UIKit
import NotificationCenter
import os
/// Battery log for monitoring battery level over time
class BatteryLog {
private let logger = ConcreteSensorLogger(subsystem: "Sensor", category: "BatteryLog")
private let textFile: TextFile
private let dateFormatter = DateFormatter()
private let updateInterval = TimeInterval(30)
init(filename: String) {
textFile = TextFile(filename: filename)
if textFile.empty() {
textFile.write("time,source,level")
}
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
UIDevice.current.isBatteryMonitoringEnabled = true
NotificationCenter.default.addObserver(self, selector: #selector(batteryLevelDidChange), name: UIDevice.batteryLevelDidChangeNotification, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(batteryStateDidChange), name: UIDevice.batteryStateDidChangeNotification, object: nil)
let _ = Timer.scheduledTimer(timeInterval: updateInterval, target: self, selector: #selector(update), userInfo: nil, repeats: true)
}
private func timestamp() -> String {
let timestamp = dateFormatter.string(from: Date())
return timestamp
}
@objc func update() {
let powerSource = (UIDevice.current.batteryState == .unplugged ? "battery" : "external")
let batteryLevel = Float(UIDevice.current.batteryLevel * 100).description
textFile.write(timestamp() + "," + powerSource + "," + batteryLevel)
logger.debug("update (powerSource=\(powerSource),batteryLevel=\(batteryLevel))");
}
@objc func batteryLevelDidChange(_ sender: NotificationCenter) {
update()
}
@objc func batteryStateDidChange(_ sender: NotificationCenter) {
update()
}
}