diff --git a/plugins/bluetooth/componments/adapter.cpp b/plugins/bluetooth/componments/adapter.cpp
index e850da72d..0b206531d 100644
--- a/plugins/bluetooth/componments/adapter.cpp
+++ b/plugins/bluetooth/componments/adapter.cpp
@@ -39,6 +39,7 @@ void Adapter::addDevice(const QJsonObject &deviceObj)
const Device::State state = Device::State(deviceObj["State"].toInt());
const bool connectState = deviceObj["ConnectState"].toBool();
const QString bluetoothDeviceType = deviceObj["Icon"].toString();
+ const int battery = deviceObj["Battery"].toInt();
removeDevice(id);
@@ -53,6 +54,7 @@ void Adapter::addDevice(const QJsonObject &deviceObj)
device->setRssi(rssi);
device->setAdapterId(m_id);
device->setDeviceType(bluetoothDeviceType);
+ device->setBattery(battery);
m_devices[id] = device;
@@ -80,6 +82,7 @@ void Adapter::updateDevice(const QJsonObject &dviceJson)
const Device::State state = Device::State(dviceJson["State"].toInt());
const bool connectState = dviceJson["ConnectState"].toBool();
const QString bluetoothDeviceType = dviceJson["Icon"].toString();
+ const int battery = dviceJson["Battery"].toInt();
// FIXME: Solve the problem that the device name in the Bluetooth list is blank
if (name.isEmpty() && alias.isEmpty())
@@ -97,6 +100,7 @@ void Adapter::updateDevice(const QJsonObject &dviceJson)
device->setConnectState(connectState);
device->setState(state);
device->setDeviceType(bluetoothDeviceType);
+ device->setBattery(battery);
emit deviceNameUpdated(device);
}
}
@@ -123,6 +127,7 @@ void Adapter::initDevicesList(const QJsonDocument &doc)
const Device::State state = Device::State(deviceObj["State"].toInt());
const bool connectState = deviceObj["ConnectState"].toBool();
const QString bluetoothDeviceType = deviceObj["Icon"].toString();
+ const int battery = deviceObj["Battery"].toInt();
auto device = new Device(this);
device->setId(id);
@@ -134,6 +139,7 @@ void Adapter::initDevicesList(const QJsonDocument &doc)
device->setRssi(rssi);
device->setAdapterId(adapterId);
device->setDeviceType(bluetoothDeviceType);
+ device->setBattery(battery);
m_devices[id] = device;
}
diff --git a/plugins/bluetooth/componments/bluetoothadapteritem.cpp b/plugins/bluetooth/componments/bluetoothadapteritem.cpp
index c03d70740..f1ec4daf1 100644
--- a/plugins/bluetooth/componments/bluetoothadapteritem.cpp
+++ b/plugins/bluetooth/componments/bluetoothadapteritem.cpp
@@ -27,6 +27,7 @@ BluetoothDeviceItem::BluetoothDeviceItem(QStyle *style, const Device *device, DL
, m_labelAction(nullptr)
, m_stateAction(nullptr)
, m_connAction(nullptr)
+ , m_batteryAction(nullptr)
, m_loading(new DSpinner(parent))
, m_iconWidget(new QWidget(parent->viewport()))
, m_connButton(new StateButton(m_iconWidget))
@@ -53,6 +54,7 @@ void BluetoothDeviceItem::initActionList()
m_labelAction = new DViewItemAction(Qt::AlignLeft | Qt::AlignVCenter, QSize(), QSize(), false);
m_stateAction = new DViewItemAction(Qt::AlignLeft | Qt::AlignVCenter, QSize(), QSize(), true);
m_connAction = new DViewItemAction(Qt::AlignRight | Qt::AlignVCenter, QSize(16, 16), QSize(16, 16), false);
+ m_batteryAction = new DViewItemAction(Qt::AlignLeft | Qt::AlignVCenter, QSize(20, 20), QSize(20, 20), false);
m_connButton->setType(StateButton::Check);
m_connButton->setSwitchFork(true);
@@ -69,16 +71,54 @@ void BluetoothDeviceItem::initActionList()
m_connAction->setWidget(m_iconWidget);
m_standarditem->setAccessibleText(m_device->alias());
- m_standarditem->setActionList(Qt::RightEdge, { m_stateAction, m_connAction });
+ m_standarditem->setActionList(Qt::RightEdge, { m_batteryAction, m_stateAction, m_connAction });
m_standarditem->setActionList(Qt::LeftEdge, { m_labelAction });
//蓝牙列表可用蓝牙设备信息文字显示高亮
m_labelAction->setTextColorRole(DPalette::BrightText);
m_labelAction->setText(m_device->alias());
updateDeviceState(m_device->state());
+
+ m_batteryAction->setIcon(getBatteryIcon(m_device->battery()));
+ m_batteryAction->setVisible(m_device->battery() > 0);
+
updateIconTheme(DGuiApplicationHelper::instance()->themeType());
}
+QIcon BluetoothDeviceItem::getBatteryIcon(int percentage)
+{
+ /* 0-5%、6-10%、11%-20%、21-30%、31-40%、41-50%、51-60%、61%-70%、71-80%、81-90%、91-100% */
+ QString percentageStr;
+ if (percentage <= 5) {
+ percentageStr = "000";
+ } else if (percentage <= 10) {
+ percentageStr = "010";
+ } else if (percentage <= 20) {
+ percentageStr = "020";
+ } else if (percentage <= 30) {
+ percentageStr = "030";
+ } else if (percentage <= 40) {
+ percentageStr = "040";
+ } else if (percentage <= 50) {
+ percentageStr = "050";
+ } else if (percentage <= 60) {
+ percentageStr = "060";
+ } else if (percentage <= 70) {
+ percentageStr = "070";
+ } else if (percentage <= 80) {
+ percentageStr = "080";
+ } else if (percentage <= 90) {
+ percentageStr = "090";
+ } else if (percentage <= 100) {
+ percentageStr = "100";
+ } else {
+ percentageStr = "unknow";
+ }
+
+ return QIcon::fromTheme(QString("battery-%1-symbolic").arg(percentageStr));
+
+}
+
void BluetoothDeviceItem::initConnect()
{
connect(DGuiApplicationHelper::instance(), &DGuiApplicationHelper::themeTypeChanged, this, &BluetoothDeviceItem::updateIconTheme);
@@ -95,11 +135,17 @@ void BluetoothDeviceItem::updateIconTheme(DGuiApplicationHelper::ColorType type)
}
m_deviceIcon = type == DGuiApplicationHelper::LightType ? LightString.arg("other") : DarkString.arg("other");
m_labelAction->setIcon(QIcon::fromTheme(m_deviceIcon));
+
+ m_batteryAction->setIcon(getBatteryIcon(m_device->battery()));
}
void BluetoothDeviceItem::updateDeviceState(Device::State state)
{
m_labelAction->setText(m_device->alias());
+
+ m_batteryAction->setIcon(getBatteryIcon(m_device->battery()));
+ m_batteryAction->setVisible(m_device->battery() > 0);
+
if (state == Device::StateAvailable) {
m_loading->start();
m_stateAction->setVisible(true);
diff --git a/plugins/bluetooth/componments/bluetoothadapteritem.h b/plugins/bluetooth/componments/bluetoothadapteritem.h
index 57aadc36f..544b303e1 100644
--- a/plugins/bluetooth/componments/bluetoothadapteritem.h
+++ b/plugins/bluetooth/componments/bluetoothadapteritem.h
@@ -62,6 +62,7 @@ signals:
private:
void initActionList();
void initConnect();
+ QIcon getBatteryIcon(int percentage);
DStyleHelper m_style;
QString m_deviceIcon;
@@ -71,6 +72,7 @@ private:
DViewItemAction *m_labelAction;
DViewItemAction *m_stateAction;
DViewItemAction *m_connAction;
+ DViewItemAction *m_batteryAction;
DSpinner *m_loading;
QWidget *m_iconWidget;
diff --git a/plugins/bluetooth/componments/device.cpp b/plugins/bluetooth/componments/device.cpp
index 6fb3006cd..d3fdf5e62 100644
--- a/plugins/bluetooth/componments/device.cpp
+++ b/plugins/bluetooth/componments/device.cpp
@@ -16,6 +16,7 @@ Device::Device(QObject *parent)
, m_rssi(0)
, m_state(StateUnavailable)
, m_connectState(false)
+ , m_battery(0)
{
}
@@ -81,6 +82,14 @@ void Device::setDeviceType(const QString &deviceType)
m_deviceType = deviceType;
}
+void Device::setBattery(int battery)
+{
+ if (m_battery != battery) {
+ m_battery = battery;
+ Q_EMIT batteryChanged(battery);
+ }
+}
+
QDebug &operator<<(QDebug &stream, const Device *device)
{
stream << "Device name:" << device->name()
diff --git a/plugins/bluetooth/componments/device.h b/plugins/bluetooth/componments/device.h
index dcfded829..820ad0c93 100644
--- a/plugins/bluetooth/componments/device.h
+++ b/plugins/bluetooth/componments/device.h
@@ -56,6 +56,9 @@ public:
inline QString deviceType() const { return m_deviceType; }
void setDeviceType(const QString &deviceType);
+ inline int battery() const { return m_battery; }
+ void setBattery(int battery);
+
Q_SIGNALS:
void nameChanged(const QString &name) const;
void aliasChanged(const QString &alias) const;
@@ -63,6 +66,7 @@ Q_SIGNALS:
void stateChanged(const State state) const;
void connectStateChanged(const bool connectState) const;
void rssiChanged(const int rssi) const;
+ void batteryChanged(const int battery) const;
private:
QString m_id;
@@ -76,6 +80,7 @@ private:
bool m_connectState;
QString m_adapterId;
QString m_deviceType;
+ int m_battery;
};
QDebug &operator<<(QDebug &stream, const Device *device);
diff --git a/plugins/bluetooth/resources/bluetooth.qrc b/plugins/bluetooth/resources/bluetooth.qrc
index 4abc2b2ea..4af4c396f 100644
--- a/plugins/bluetooth/resources/bluetooth.qrc
+++ b/plugins/bluetooth/resources/bluetooth.qrc
@@ -21,4 +21,30 @@
dark/buletooth_other_dark.svg
light/buletooth_other_light.svg
+
+ dark/icons/battery-000-symbolic_20px.svg
+ dark/icons/battery-010-symbolic_20px.svg
+ dark/icons/battery-020-symbolic_20px.svg
+ dark/icons/battery-030-symbolic_20px.svg
+ dark/icons/battery-040-symbolic_20px.svg
+ dark/icons/battery-050-symbolic_20px.svg
+ dark/icons/battery-060-symbolic_20px.svg
+ dark/icons/battery-070-symbolic_20px.svg
+ dark/icons/battery-080-symbolic_20px.svg
+ dark/icons/battery-090-symbolic_20px.svg
+ dark/icons/battery-100-symbolic_20px.svg
+ dark/icons/battery-unknow-symbolic_20px.svg
+ light/icons/battery-000-symbolic_20px.svg
+ light/icons/battery-010-symbolic_20px.svg
+ light/icons/battery-020-symbolic_20px.svg
+ light/icons/battery-030-symbolic_20px.svg
+ light/icons/battery-040-symbolic_20px.svg
+ light/icons/battery-050-symbolic_20px.svg
+ light/icons/battery-060-symbolic_20px.svg
+ light/icons/battery-070-symbolic_20px.svg
+ light/icons/battery-080-symbolic_20px.svg
+ light/icons/battery-090-symbolic_20px.svg
+ light/icons/battery-100-symbolic_20px.svg
+ light/icons/battery-unknow-symbolic_20px.svg
+
diff --git a/plugins/bluetooth/resources/dark/icons/battery-000-symbolic_20px.svg b/plugins/bluetooth/resources/dark/icons/battery-000-symbolic_20px.svg
new file mode 100644
index 000000000..5e86fa7ee
--- /dev/null
+++ b/plugins/bluetooth/resources/dark/icons/battery-000-symbolic_20px.svg
@@ -0,0 +1,3 @@
+
diff --git a/plugins/bluetooth/resources/dark/icons/battery-010-symbolic_20px.svg b/plugins/bluetooth/resources/dark/icons/battery-010-symbolic_20px.svg
new file mode 100644
index 000000000..e56e848da
--- /dev/null
+++ b/plugins/bluetooth/resources/dark/icons/battery-010-symbolic_20px.svg
@@ -0,0 +1,6 @@
+
diff --git a/plugins/bluetooth/resources/dark/icons/battery-020-symbolic_20px.svg b/plugins/bluetooth/resources/dark/icons/battery-020-symbolic_20px.svg
new file mode 100644
index 000000000..212281ebb
--- /dev/null
+++ b/plugins/bluetooth/resources/dark/icons/battery-020-symbolic_20px.svg
@@ -0,0 +1,6 @@
+
diff --git a/plugins/bluetooth/resources/dark/icons/battery-030-symbolic_20px.svg b/plugins/bluetooth/resources/dark/icons/battery-030-symbolic_20px.svg
new file mode 100644
index 000000000..d264f8dff
--- /dev/null
+++ b/plugins/bluetooth/resources/dark/icons/battery-030-symbolic_20px.svg
@@ -0,0 +1,6 @@
+
diff --git a/plugins/bluetooth/resources/dark/icons/battery-040-symbolic_20px.svg b/plugins/bluetooth/resources/dark/icons/battery-040-symbolic_20px.svg
new file mode 100644
index 000000000..3491ab422
--- /dev/null
+++ b/plugins/bluetooth/resources/dark/icons/battery-040-symbolic_20px.svg
@@ -0,0 +1,6 @@
+
diff --git a/plugins/bluetooth/resources/dark/icons/battery-050-symbolic_20px.svg b/plugins/bluetooth/resources/dark/icons/battery-050-symbolic_20px.svg
new file mode 100644
index 000000000..e215c8b7d
--- /dev/null
+++ b/plugins/bluetooth/resources/dark/icons/battery-050-symbolic_20px.svg
@@ -0,0 +1,6 @@
+
diff --git a/plugins/bluetooth/resources/dark/icons/battery-060-symbolic_20px.svg b/plugins/bluetooth/resources/dark/icons/battery-060-symbolic_20px.svg
new file mode 100644
index 000000000..986c30c28
--- /dev/null
+++ b/plugins/bluetooth/resources/dark/icons/battery-060-symbolic_20px.svg
@@ -0,0 +1,6 @@
+
diff --git a/plugins/bluetooth/resources/dark/icons/battery-070-symbolic_20px.svg b/plugins/bluetooth/resources/dark/icons/battery-070-symbolic_20px.svg
new file mode 100644
index 000000000..fef261474
--- /dev/null
+++ b/plugins/bluetooth/resources/dark/icons/battery-070-symbolic_20px.svg
@@ -0,0 +1,6 @@
+
diff --git a/plugins/bluetooth/resources/dark/icons/battery-080-symbolic_20px.svg b/plugins/bluetooth/resources/dark/icons/battery-080-symbolic_20px.svg
new file mode 100644
index 000000000..c51847a02
--- /dev/null
+++ b/plugins/bluetooth/resources/dark/icons/battery-080-symbolic_20px.svg
@@ -0,0 +1,6 @@
+
diff --git a/plugins/bluetooth/resources/dark/icons/battery-090-symbolic_20px.svg b/plugins/bluetooth/resources/dark/icons/battery-090-symbolic_20px.svg
new file mode 100644
index 000000000..1aad3eaa1
--- /dev/null
+++ b/plugins/bluetooth/resources/dark/icons/battery-090-symbolic_20px.svg
@@ -0,0 +1,6 @@
+
diff --git a/plugins/bluetooth/resources/dark/icons/battery-100-symbolic_20px.svg b/plugins/bluetooth/resources/dark/icons/battery-100-symbolic_20px.svg
new file mode 100644
index 000000000..3126488bb
--- /dev/null
+++ b/plugins/bluetooth/resources/dark/icons/battery-100-symbolic_20px.svg
@@ -0,0 +1,6 @@
+
diff --git a/plugins/bluetooth/resources/dark/icons/battery-unknow-symbolic_20px.svg b/plugins/bluetooth/resources/dark/icons/battery-unknow-symbolic_20px.svg
new file mode 100644
index 000000000..0737573fb
--- /dev/null
+++ b/plugins/bluetooth/resources/dark/icons/battery-unknow-symbolic_20px.svg
@@ -0,0 +1,6 @@
+
diff --git a/plugins/bluetooth/resources/light/icons/battery-000-symbolic_20px.svg b/plugins/bluetooth/resources/light/icons/battery-000-symbolic_20px.svg
new file mode 100644
index 000000000..7200009d1
--- /dev/null
+++ b/plugins/bluetooth/resources/light/icons/battery-000-symbolic_20px.svg
@@ -0,0 +1,3 @@
+
diff --git a/plugins/bluetooth/resources/light/icons/battery-010-symbolic_20px.svg b/plugins/bluetooth/resources/light/icons/battery-010-symbolic_20px.svg
new file mode 100644
index 000000000..570ea60c6
--- /dev/null
+++ b/plugins/bluetooth/resources/light/icons/battery-010-symbolic_20px.svg
@@ -0,0 +1,6 @@
+
diff --git a/plugins/bluetooth/resources/light/icons/battery-020-symbolic_20px.svg b/plugins/bluetooth/resources/light/icons/battery-020-symbolic_20px.svg
new file mode 100644
index 000000000..e5b1672b2
--- /dev/null
+++ b/plugins/bluetooth/resources/light/icons/battery-020-symbolic_20px.svg
@@ -0,0 +1,6 @@
+
diff --git a/plugins/bluetooth/resources/light/icons/battery-030-symbolic_20px.svg b/plugins/bluetooth/resources/light/icons/battery-030-symbolic_20px.svg
new file mode 100644
index 000000000..2652a707a
--- /dev/null
+++ b/plugins/bluetooth/resources/light/icons/battery-030-symbolic_20px.svg
@@ -0,0 +1,6 @@
+
diff --git a/plugins/bluetooth/resources/light/icons/battery-040-symbolic_20px.svg b/plugins/bluetooth/resources/light/icons/battery-040-symbolic_20px.svg
new file mode 100644
index 000000000..f6601f2a3
--- /dev/null
+++ b/plugins/bluetooth/resources/light/icons/battery-040-symbolic_20px.svg
@@ -0,0 +1,6 @@
+
diff --git a/plugins/bluetooth/resources/light/icons/battery-050-symbolic_20px.svg b/plugins/bluetooth/resources/light/icons/battery-050-symbolic_20px.svg
new file mode 100644
index 000000000..f4158de82
--- /dev/null
+++ b/plugins/bluetooth/resources/light/icons/battery-050-symbolic_20px.svg
@@ -0,0 +1,6 @@
+
diff --git a/plugins/bluetooth/resources/light/icons/battery-060-symbolic_20px.svg b/plugins/bluetooth/resources/light/icons/battery-060-symbolic_20px.svg
new file mode 100644
index 000000000..b4df905b4
--- /dev/null
+++ b/plugins/bluetooth/resources/light/icons/battery-060-symbolic_20px.svg
@@ -0,0 +1,6 @@
+
diff --git a/plugins/bluetooth/resources/light/icons/battery-070-symbolic_20px.svg b/plugins/bluetooth/resources/light/icons/battery-070-symbolic_20px.svg
new file mode 100644
index 000000000..2cd4ad427
--- /dev/null
+++ b/plugins/bluetooth/resources/light/icons/battery-070-symbolic_20px.svg
@@ -0,0 +1,6 @@
+
diff --git a/plugins/bluetooth/resources/light/icons/battery-080-symbolic_20px.svg b/plugins/bluetooth/resources/light/icons/battery-080-symbolic_20px.svg
new file mode 100644
index 000000000..c604bc725
--- /dev/null
+++ b/plugins/bluetooth/resources/light/icons/battery-080-symbolic_20px.svg
@@ -0,0 +1,6 @@
+
diff --git a/plugins/bluetooth/resources/light/icons/battery-090-symbolic_20px.svg b/plugins/bluetooth/resources/light/icons/battery-090-symbolic_20px.svg
new file mode 100644
index 000000000..386b99462
--- /dev/null
+++ b/plugins/bluetooth/resources/light/icons/battery-090-symbolic_20px.svg
@@ -0,0 +1,6 @@
+
diff --git a/plugins/bluetooth/resources/light/icons/battery-100-symbolic_20px.svg b/plugins/bluetooth/resources/light/icons/battery-100-symbolic_20px.svg
new file mode 100644
index 000000000..6ac5c44f6
--- /dev/null
+++ b/plugins/bluetooth/resources/light/icons/battery-100-symbolic_20px.svg
@@ -0,0 +1,6 @@
+
diff --git a/plugins/bluetooth/resources/light/icons/battery-unknow-symbolic_20px.svg b/plugins/bluetooth/resources/light/icons/battery-unknow-symbolic_20px.svg
new file mode 100644
index 000000000..dd9536d31
--- /dev/null
+++ b/plugins/bluetooth/resources/light/icons/battery-unknow-symbolic_20px.svg
@@ -0,0 +1,6 @@
+