From 6d1aeae654604755e7f7b471c81cd9f858d3953e Mon Sep 17 00:00:00 2001 From: Yari Polla Date: Wed, 1 Mar 2023 01:17:59 +0100 Subject: [PATCH] quicksettings/bluetooth: set connected devices as status --- quicksettings/bluetooth/contents/ui/main.qml | 78 ++++++++++++++++++-- 1 file changed, 72 insertions(+), 6 deletions(-) diff --git a/quicksettings/bluetooth/contents/ui/main.qml b/quicksettings/bluetooth/contents/ui/main.qml index cb3f85de..747a30bf 100644 --- a/quicksettings/bluetooth/contents/ui/main.qml +++ b/quicksettings/bluetooth/contents/ui/main.qml @@ -7,17 +7,83 @@ import org.kde.bluezqt 1.0 as BluezQt import org.kde.plasma.private.mobileshell 1.0 as MobileShell MobileShell.QuickSetting { + property QtObject btManager: BluezQt.Manager + property var connectedDevices: [] + + id: root + text: i18n("Bluetooth") icon: "network-bluetooth" settingsCommand: "plasma-open-settings kcm_bluetooth" function toggle() { - var enable = !BluezQt.Manager.bluetoothOperational; - BluezQt.Manager.bluetoothBlocked = !enable; + const enable = !btManager.bluetoothOperational; + btManager.bluetoothBlocked = !enable; - for (var i = 0; i < BluezQt.Manager.adapters.length; ++i) { - var adapter = BluezQt.Manager.adapters[i]; - adapter.powered = enable; + for (var i = 0; i < btManager.adapters.length; ++i) { + btManager.adapters[i].powered = enable; } } - enabled: BluezQt.Manager.bluetoothOperational + enabled: btManager.bluetoothOperational + + Connections { + target: btManager + + function onDeviceAdded() { + updateConnectedDevices(); + } + function onDeviceRemoved() { + updateConnectedDevices(); + } + function onDeviceChanged() { + updateConnectedDevices(); + } + function onBluetoothBlockedChanged() { + updateConnectedDevices(); + } + function onBluetoothOperationalChanged() { + updateConnectedDevices(); + } + } + + function updateConnectedDevices() { + let _connectedDevices = []; + for (let i = 0; i < btManager.devices.length; ++i) { + const device = btManager.devices[i]; + if (device.connected) { + _connectedDevices.push(device); + } + } + + if (connectedDevices != _connectedDevices) { + connectedDevices = _connectedDevices; + + if (connectedDevices.length === 0) { + root.status = "" + } else if (connectedDevices.length === 1) { + root.status = formatDevice(0); + } else { + let text = ""; + for (let i = 0; i < connectedDevices.length; i++) { + const device = connectedDevices[i]; + const battery = device.battery; + text += formatDevice(i) + " \u2022 "; + } + + // trims until the last dot + text = text.substring(0, text.length - 2); + + root.status = text; + } + } + } + + function formatDevice(deviceIndex) { + const device = connectedDevices[deviceIndex]; + const battery = device.battery; + const name = device.name; + + return battery + ? "%1 ยท %2".arg(name).arg(battery.percentage) + : name; + } }