Files
onyx/Packages/OnyxKit/Sources/MetricsProvider/ChargeActivity.swift
Scarriffle 504c518cfb 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>
2026-08-13 14:31:19 +02:00

38 lines
1.5 KiB
Swift

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
}
}