mirror of
https://github.com/noctalia-dev/noctalia-shell.git
synced 2026-05-11 17:08:27 +08:00
LockScreen: move battery logic to BatteryService, prioritize laptop over bt
This commit is contained in:
@@ -91,21 +91,9 @@ Loader {
|
||||
onTriggered: batteryIndicator.initializationComplete = true
|
||||
}
|
||||
|
||||
readonly property var bluetoothDevice: BatteryService.findBluetoothBatteryDevice()
|
||||
readonly property bool hasBluetoothBattery: bluetoothDevice && bluetoothDevice.batteryAvailable && bluetoothDevice.battery !== undefined
|
||||
readonly property var battery: BatteryService.findLaptopBattery()
|
||||
readonly property bool isDevicePresent: {
|
||||
if (hasBluetoothBattery) {
|
||||
return bluetoothDevice.connected === true;
|
||||
}
|
||||
if (battery) {
|
||||
return (battery.type === UPowerDeviceType.Battery && battery.isPresent !== undefined) ? battery.isPresent : (battery.ready && battery.percentage !== undefined);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
property bool isReady: initializationComplete && isDevicePresent && (hasBluetoothBattery || (battery && battery.ready && battery.percentage !== undefined))
|
||||
property real percent: isReady ? (hasBluetoothBattery ? (bluetoothDevice.battery * 100) : (battery.percentage * 100)) : 0
|
||||
property bool charging: isReady ? (hasBluetoothBattery ? false : (battery ? battery.state === UPowerDeviceState.Charging : false)) : false
|
||||
property bool isReady: initializationComplete && BatteryService.batteryReady
|
||||
property real percent: BatteryService.batteryPercentage
|
||||
property bool charging: BatteryService.batteryCharging
|
||||
property bool batteryVisible: isReady && percent > 0 && BatteryService.hasAnyBattery()
|
||||
}
|
||||
|
||||
|
||||
@@ -10,7 +10,64 @@ import qs.Services.UI
|
||||
Singleton {
|
||||
id: root
|
||||
|
||||
// Choose icon based on charge and charging state
|
||||
// Primary battery device (prioritizes laptop over Bluetooth)
|
||||
readonly property var primaryDevice: {
|
||||
var laptopBattery = findLaptopBattery();
|
||||
if (laptopBattery !== null) {
|
||||
return laptopBattery;
|
||||
}
|
||||
|
||||
var bluetoothDevice = findBluetoothBatteryDevice();
|
||||
if (bluetoothDevice !== null) {
|
||||
return bluetoothDevice;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
readonly property string primaryBatteryType: {
|
||||
if (findLaptopBattery() !== null) {
|
||||
return "laptop";
|
||||
} else if (findBluetoothBatteryDevice() !== null) {
|
||||
return "bluetooth";
|
||||
}
|
||||
return "none";
|
||||
}
|
||||
|
||||
readonly property real batteryPercentage: {
|
||||
if (primaryBatteryType === "laptop" && primaryDevice) {
|
||||
return (primaryDevice.percentage || 0) * 100;
|
||||
} else if (primaryBatteryType === "bluetooth" && primaryDevice) {
|
||||
return (primaryDevice.battery || 0) * 100;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
readonly property bool batteryCharging: {
|
||||
if (primaryBatteryType === "laptop" && primaryDevice) {
|
||||
return primaryDevice.state === UPowerDeviceState.Charging;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
readonly property bool batteryReady: {
|
||||
if (primaryBatteryType === "laptop" && primaryDevice) {
|
||||
return primaryDevice.ready && primaryDevice.percentage !== undefined;
|
||||
} else if (primaryBatteryType === "bluetooth" && primaryDevice) {
|
||||
return primaryDevice.connected && primaryDevice.batteryAvailable && primaryDevice.battery !== undefined;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
readonly property bool batteryPresent: {
|
||||
if (primaryBatteryType === "laptop" && primaryDevice) {
|
||||
return (primaryDevice.type === UPowerDeviceType.Battery && primaryDevice.isPresent !== undefined) ? primaryDevice.isPresent : (primaryDevice.ready && primaryDevice.percentage !== undefined);
|
||||
} else if (primaryBatteryType === "bluetooth" && primaryDevice) {
|
||||
return primaryDevice.connected === true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function getIcon(percent, charging, isReady) {
|
||||
if (!isReady) {
|
||||
return "battery-exclamation";
|
||||
@@ -31,7 +88,6 @@ Singleton {
|
||||
}
|
||||
}
|
||||
|
||||
// Find first connected Bluetooth device with battery (gamepad, etc.)
|
||||
function findBluetoothBatteryDevice() {
|
||||
if (!BluetoothService.devices) {
|
||||
return null;
|
||||
@@ -46,14 +102,10 @@ Singleton {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Find laptop battery device, only returns actual battery (not displayDevice as fallback)
|
||||
function findLaptopBattery() {
|
||||
// First check displayDevice if it's a laptop battery
|
||||
if (UPower.displayDevice && UPower.displayDevice.isLaptopBattery) {
|
||||
return UPower.displayDevice;
|
||||
}
|
||||
|
||||
// Then search through all devices
|
||||
if (!UPower.devices) {
|
||||
return null;
|
||||
}
|
||||
@@ -68,7 +120,6 @@ Singleton {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Check if any battery is available (laptop or Bluetooth/gamepad)
|
||||
function hasAnyBattery() {
|
||||
var laptopBattery = findLaptopBattery();
|
||||
var bluetoothDevice = findBluetoothBatteryDevice();
|
||||
|
||||
Reference in New Issue
Block a user