feat(bluetooth): add battery indicator to devices with battery status

This commit is contained in:
Luca Biendl 2024-08-15 10:17:37 +02:00 committed by GitHub
parent e51ca81f7d
commit 8973374a80
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 30 additions and 2 deletions

View file

@ -1,10 +1,11 @@
// Copyright 2023 System76 <info@system76.com>
// SPDX-License-Identifier: GPL-3.0-only
use crate::bluetooth::{BluerDeviceStatus, BluerRequest, BluerState};
use crate::bluetooth::{BluerDeviceStatus, BluerRequest, BluerState, DeviceProperty};
use cosmic::{
applet::token::subscription::{activation_token_subscription, TokenRequest, TokenUpdate},
cctk::sctk::reexports::calloop,
widget::text::body,
};
use cosmic::{
@ -367,6 +368,31 @@ impl cosmic::Application for CosmicBluetoothApplet {
.align_items(Alignment::Center)
.spacing(12);
if let Some(DeviceProperty::BatteryPercentage(battery)) = dev
.properties
.iter()
.find(|p| matches!(p, DeviceProperty::BatteryPercentage(_)))
{
let icon = match *battery {
b if b >= 20 && b < 40 => "battery-low",
b if b < 20 => "battery-caution",
_ => "battery",
};
let status = row!(
icon::from_name(icon).symbolic(true).size(14),
body(format!("{}%", battery))
)
.align_items(Alignment::Center)
.spacing(2)
.width(Length::Shrink);
let content = container(status)
.align_x(Horizontal::Right)
.align_y(Vertical::Center);
row = row.push(content);
}
match &dev.status {
BluerDeviceStatus::Connected => {
row = row.push(

View file

@ -3,10 +3,12 @@
use std::{collections::HashMap, fmt::Debug, hash::Hash, mem, sync::Arc, time::Duration};
pub use bluer::DeviceProperty;
use bluer::{
agent::{Agent, AgentHandle},
Adapter, Address, DeviceProperty, Session, Uuid,
Adapter, Address, Session, Uuid,
};
use cosmic::iced::{
self,
futures::{SinkExt, StreamExt},