feat: unify battery icon logic

This commit is contained in:
2 * r + 2 * t 2026-04-26 14:06:04 +10:00
parent 10feabc5a7
commit 8f472f4a05
3 changed files with 10 additions and 29 deletions

View file

@ -249,15 +249,7 @@ StyledRect {
return "rocket_launch"; return "rocket_launch";
return "balance"; return "balance";
} }
return Icons.getBatteryIcon(UPower.displayDevice.percentage, [UPowerDeviceState.Charging, UPowerDeviceState.FullyCharged, UPowerDeviceState.PendingCharge].includes(UPower.displayDevice.state));
const perc = UPower.displayDevice.percentage;
const charging = [UPowerDeviceState.Charging, UPowerDeviceState.FullyCharged, UPowerDeviceState.PendingCharge].includes(UPower.displayDevice.state);
if (perc === 1)
return charging ? "battery_charging_full" : "battery_full";
let level = Math.floor(perc * 7);
if (charging && (level === 4 || level === 1))
level--;
return charging ? `battery_charging_${(level + 3) * 10}` : `battery_${level}_bar`;
} }
color: !UPower.onBattery || UPower.displayDevice.percentage > 0.2 ? root.colour : Colours.palette.m3error color: !UPower.onBattery || UPower.displayDevice.percentage > 0.2 ? root.colour : Colours.palette.m3error
fill: 1 fill: 1

View file

@ -107,8 +107,8 @@ ColumnLayout {
MaterialIcon { MaterialIcon {
visible: device.modelData.state === BluetoothDeviceState.Connected // qmllint disable unresolved-type visible: device.modelData.state === BluetoothDeviceState.Connected // qmllint disable unresolved-type
text: Icons.getBatteryIcon(device.modelData.batteryAvailable ? device.modelData.battery * 100 : -1) text: device.modelData.batteryAvailable ? Icons.getBatteryIcon(device.modelData.battery) : "battery_alert"
color: device.modelData.battery < 0.2 ? Colours.palette.m3error : Colours.palette.m3onSurfaceVariant color: device.modelData.batteryAvailable && device.modelData.battery < 0.2 ? Colours.palette.m3error : Colours.palette.m3onSurfaceVariant
} }
StyledRect { StyledRect {

View file

@ -241,23 +241,12 @@ Singleton {
return icon; return icon;
} }
function getBatteryIcon(charge: int): string { function getBatteryIcon(percentage: real, charging = false): string {
if (charge > 0 && charge < 5) if (percentage === 1)
return "battery_0_bar"; return charging ? "battery_charging_full" : "battery_full";
if (charge >= 5 && charge < 20) let level = Math.floor(percentage * 7);
return "battery_1_bar"; if (charging && (level === 4 || level === 1))
if (charge >= 20 && charge < 35) level--;
return "battery_2_bar"; return charging ? `battery_charging_${(level + 3) * 10}` : `battery_${level}_bar`;
if (charge >= 35 && charge < 50)
return "battery_3_bar";
if (charge >= 50 && charge < 65)
return "battery_4_bar";
if (charge >= 65 && charge < 80)
return "battery_5_bar";
if (charge >= 80 && charge < 95)
return "battery_6_bar";
if (charge >= 95)
return "battery_full";
return "battery_alert";
} }
} }