Akku-Popover sagt, was gerade geschieht
„Am Netz" beantwortet die Frage nicht, die man hat, wenn der Ladestand stehen bleibt: lädt es gerade nicht, weil das Limit erreicht ist, oder stimmt etwas nicht? Jetzt steht es dort — lädt, angehalten wegen Ladelimit mit der Prozentzahl, am Netz ohne zu laden, oder Akkubetrieb. Der Vergleich mit dem Limit hat zwei Punkte Toleranz: der Ladestand pendelt um die Grenze, und auf das Prozent genau zu vergleichen hieße, den Grund die halbe Zeit zu verschweigen. Weit unter dem Limit wird dagegen kein Limit-Halt behauptet — dann steht das Laden aus einem anderen Grund, und einen falschen zu nennen wäre schlimmer als keinen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
import Foundation
|
||||
|
||||
/// Was mit dem Akku gerade geschieht — in Worten statt in Symbolen.
|
||||
///
|
||||
/// „Am Netz" allein beantwortet die Frage nicht, die man hat, wenn der
|
||||
/// Ladestand stehen bleibt: lädt es gerade nicht, weil das Limit erreicht ist,
|
||||
/// oder stimmt etwas nicht?
|
||||
public enum ChargeActivity: Equatable, Sendable {
|
||||
case charging
|
||||
/// Angehalten, weil das eingestellte Ladelimit erreicht ist.
|
||||
case pausedAtLimit(Int)
|
||||
/// Am Netz, lädt aber nicht — Grund unbekannt.
|
||||
case pluggedNotCharging
|
||||
case onBattery
|
||||
|
||||
/// Wie weit unter dem Limit noch als „am Limit" gilt.
|
||||
///
|
||||
/// Der Ladestand pendelt um die Grenze. Auf das Prozent genau zu
|
||||
/// vergleichen hieße, den Grund die halbe Zeit zu verschweigen.
|
||||
public static let limitTolerance = 2
|
||||
|
||||
public static func resolve(isCharging: Bool, isPluggedIn: Bool,
|
||||
charge: Double, limit: Int?) -> ChargeActivity {
|
||||
if isCharging { return .charging }
|
||||
guard isPluggedIn else { return .onBattery }
|
||||
|
||||
let percent = Int((min(max(charge, 0), 1) * 100).rounded())
|
||||
// Ein Limit von hundert ist keines.
|
||||
if let limit, limit < 100, percent >= limit - limitTolerance {
|
||||
return .pausedAtLimit(limit)
|
||||
}
|
||||
// Steht das Laden aus einem anderen Grund — etwa weil macOS den Akku
|
||||
// schont —, ist das der ehrliche Befund. Einen falschen Grund zu
|
||||
// nennen wäre schlimmer als keinen.
|
||||
return .pluggedNotCharging
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user