From 6c4d3a913e231fbe44dbae59a00315b5d50cf33c Mon Sep 17 00:00:00 2001 From: Serhiy Mytrovtsiy Date: Mon, 16 Jan 2023 22:37:26 +0100 Subject: [PATCH] feat: added an optimized charging state, it allows to hide additional information in the battery widget when enabled (#1213) --- Kit/Widgets/Battery.swift | 9 +++++++-- Modules/Battery/main.swift | 2 ++ Modules/Battery/readers.swift | 1 + 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/Kit/Widgets/Battery.swift b/Kit/Widgets/Battery.swift index bdfae05a..38e1da74 100644 --- a/Kit/Widgets/Battery.swift +++ b/Kit/Widgets/Battery.swift @@ -25,6 +25,7 @@ public class BatterykWidget: WidgetWrapper { private var charging: Bool = false private var ACStatus: Bool = false private var lowPowerMode: Bool = false + private var optimizedCharging: Bool = false public init(title: String, config: NSDictionary?, preview: Bool = false) { let widgetTitle: String = title @@ -68,7 +69,7 @@ public class BatterykWidget: WidgetWrapper { var x: CGFloat = 0 let isShortTimeFormat: Bool = self.timeFormat == "short" - if !self.hideAdditionalWhenFull || (self.hideAdditionalWhenFull && self.percentage != 1) { + if !self.hideAdditionalWhenFull || (self.hideAdditionalWhenFull && self.percentage != 1 && !self.optimizedCharging) { switch self.additional { case "percentage": var value = "n/a" @@ -334,7 +335,7 @@ public class BatterykWidget: WidgetWrapper { return rowWidth } - public func setValue(percentage: Double? = nil, ACStatus: Bool? = nil, isCharging: Bool? = nil, lowPowerMode: Bool? = nil, time: Int? = nil) { + public func setValue(percentage: Double? = nil, ACStatus: Bool? = nil, isCharging: Bool? = nil, lowPowerMode: Bool? = nil, optimizedCharging: Bool? = nil, time: Int? = nil) { var updated: Bool = false let timeFormat: String = Store.shared.string(key: "\(self.title)_timeFormat", defaultValue: self.timeFormat) @@ -362,6 +363,10 @@ public class BatterykWidget: WidgetWrapper { self.lowPowerMode = state updated = true } + if let state = optimizedCharging, self.optimizedCharging != state { + self.optimizedCharging = state + updated = true + } if updated { DispatchQueue.main.async(execute: { diff --git a/Modules/Battery/main.swift b/Modules/Battery/main.swift index 414209f1..7d6c5cc2 100644 --- a/Modules/Battery/main.swift +++ b/Modules/Battery/main.swift @@ -19,6 +19,7 @@ struct Battery_Usage: value_t { var isCharged: Bool = false var isCharging: Bool = false var isLowPowerMode: Bool? = false + var optimizedChargingEngaged: Bool = false var level: Double = 0 var cycles: Int = 0 var health: Int = 0 @@ -141,6 +142,7 @@ public class Battery: Module { ACStatus: value.powerSource != "Battery Power", isCharging: value.isCharging, lowPowerMode: value.isLowPowerMode, + optimizedCharging: value.optimizedChargingEngaged, time: value.timeToEmpty == 0 && value.timeToCharge != 0 ? value.timeToCharge : value.timeToEmpty ) default: break diff --git a/Modules/Battery/readers.swift b/Modules/Battery/readers.swift index 5d4cbe88..00715766 100644 --- a/Modules/Battery/readers.swift +++ b/Modules/Battery/readers.swift @@ -71,6 +71,7 @@ internal class UsageReader: Reader { self.usage.powerSource = list[kIOPSPowerSourceStateKey] as? String ?? "AC Power" self.usage.isCharged = list[kIOPSIsChargedKey] as? Bool ?? false self.usage.isCharging = self.getBoolValue("IsCharging" as CFString) ?? false + self.usage.optimizedChargingEngaged = list["Optimized Battery Charging Engaged"] as? Int == 1 if #available(macOS 12.0, *) { self.usage.isLowPowerMode = ProcessInfo.processInfo.isLowPowerModeEnabled }