From 95b2daac6cd4867ead5fb84defa6673410421039 Mon Sep 17 00:00:00 2001 From: Ojas Kavathe Date: Wed, 27 Nov 2024 15:24:57 +0530 Subject: [PATCH] bluetooth: percentage notify on change --- lib/bluetooth/bluetooth.vala | 2 +- lib/bluetooth/device.vala | 22 ++++++++++++++++++---- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/lib/bluetooth/bluetooth.vala b/lib/bluetooth/bluetooth.vala index 68431e57..02005c32 100644 --- a/lib/bluetooth/bluetooth.vala +++ b/lib/bluetooth/bluetooth.vala @@ -170,7 +170,7 @@ public class AstalBluetooth.Bluetooth : Object { var battery = new Battery((IBattery)iface); var device = _devices.lookup(iface.g_object_path); if (device != null) { - device.battery = battery; + device.set_battery(battery); } sync(); } diff --git a/lib/bluetooth/device.vala b/lib/bluetooth/device.vala index e4df5281..74f8d83e 100644 --- a/lib/bluetooth/device.vala +++ b/lib/bluetooth/device.vala @@ -3,7 +3,7 @@ */ public class AstalBluetooth.Device : Object { private IDevice proxy; - public Battery battery; + private Battery battery; internal ObjectPath object_path { owned get; private set; } @@ -21,6 +21,15 @@ public class AstalBluetooth.Device : Object { }); } + internal void set_battery(Battery battery) { + this.battery = battery; + + notify_property("battery_percentage"); + battery.notify["percentage"].connect((obj, pspec) => { + notify_property("battery_percentage"); + }); + } + /** * List of 128-bit UUIDs that represents the available remote services. */ @@ -105,10 +114,14 @@ public class AstalBluetooth.Device : Object { } /** - * The percentage of battery left as an unsigned 8-bit integer. + * The percentage of battery left on the device if it has one, else 0. */ - public uint battery_percentage { get { return battery.percentage; } } - + public uint battery_percentage { + get { + if (battery != null) return battery.percentage; + else return 0; + } + } /** * The name alias for the remote device. @@ -144,6 +157,7 @@ public class AstalBluetooth.Device : Object { yield proxy.disconnect(); } + /** * This method connects a specific profile of this device. * The UUID provided is the remote service UUID for the profile.