diff --git a/plugins/bluetooth/componments/adapter.cpp b/plugins/bluetooth/componments/adapter.cpp index bb5742e47..8cb8d266a 100644 --- a/plugins/bluetooth/componments/adapter.cpp +++ b/plugins/bluetooth/componments/adapter.cpp @@ -49,7 +49,8 @@ void Adapter::setName(const QString &name) void Adapter::addDevice(const QJsonObject &deviceObj) { const QString id = deviceObj["Path"].toString(); - const QString name = deviceObj["Alias"].toString(); + const QString name = deviceObj["Name"].toString(); + const QString alias = deviceObj["Alias"].toString(); const bool paired = deviceObj["Paired"].toBool(); const int rssi = deviceObj["RSSI"].toInt(); const Device::State state = Device::State(deviceObj["State"].toInt()); @@ -62,6 +63,7 @@ void Adapter::addDevice(const QJsonObject &deviceObj) device->setId(id); device->setName(name); + device->setAlias(alias); device->setPaired(paired); device->setState(state); device->setConnectState(connectState); @@ -90,7 +92,8 @@ void Adapter::removeDevice(const QString &deviceId) void Adapter::updateDevice(const QJsonObject &dviceJson) { const QString id = dviceJson["Path"].toString(); - const QString name = dviceJson["Alias"].toString(); + const QString name = dviceJson["Name"].toString(); + const QString alias = dviceJson["Alias"].toString(); const bool paired = dviceJson["Paired"].toBool(); const int rssi = dviceJson["RSSI"].toInt(); const Device::State state = Device::State(dviceJson["State"].toInt()); @@ -102,6 +105,7 @@ void Adapter::updateDevice(const QJsonObject &dviceJson) if (device) { device->setId(id); device->setName(name); + device->setAlias(alias); device->setPaired(paired); device->setRssi(rssi); //setState放后面,是因为用到了connectState,fix bug 55245 @@ -157,7 +161,8 @@ void Adapter::initDevicesList(const QJsonDocument &doc) QJsonObject deviceObj = val.toObject(); const QString adapterId = deviceObj["AdapterPath"].toString(); const QString id = deviceObj["Path"].toString(); - const QString name = deviceObj["Alias"].toString(); + const QString name = deviceObj["Name"].toString(); + const QString alias = deviceObj["Alias"].toString(); const bool paired = deviceObj["Paired"].toBool(); const int rssi = deviceObj["RSSI"].toInt(); const Device::State state = Device::State(deviceObj["State"].toInt()); @@ -167,6 +172,7 @@ void Adapter::initDevicesList(const QJsonDocument &doc) auto device = new Device(this); device->setId(id); device->setName(name); + device->setAlias(alias); device->setPaired(paired); device->setState(state); device->setConnectState(connectState); diff --git a/plugins/bluetooth/componments/adaptersmanager.cpp b/plugins/bluetooth/componments/adaptersmanager.cpp index 88235a960..53670b1ac 100644 --- a/plugins/bluetooth/componments/adaptersmanager.cpp +++ b/plugins/bluetooth/componments/adaptersmanager.cpp @@ -119,14 +119,14 @@ void AdaptersManager::connectDevice(const Device *device, Adapter *adapter) switch (device->state()) { case Device::StateUnavailable: { m_bluetoothInter->ConnectDevice(path, QDBusObjectPath(adapter->id())); - qDebug() << "connect to device: " << device->name(); + qDebug() << "connect to device: " << device->alias(); } break; case Device::StateAvailable: break; case Device::StateConnected: { m_bluetoothInter->DisconnectDevice(path); - qDebug() << "disconnect device: " << device->name(); + qDebug() << "disconnect device: " << device->alias(); } break; } diff --git a/plugins/bluetooth/componments/bluetoothadapteritem.cpp b/plugins/bluetooth/componments/bluetoothadapteritem.cpp index 58323d5c7..2b86ed04b 100644 --- a/plugins/bluetooth/componments/bluetoothadapteritem.cpp +++ b/plugins/bluetooth/componments/bluetoothadapteritem.cpp @@ -62,11 +62,11 @@ void BluetoothDeviceItem::initActionList() m_loading->setFixedSize(QSize(24, 24)); m_stateAction->setWidget(m_loading); - m_standarditem->setAccessibleText(m_device->name()); + m_standarditem->setAccessibleText(m_device->alias()); m_standarditem->setActionList(Qt::RightEdge, {m_stateAction}); m_standarditem->setActionList(Qt::LeftEdge, {m_labelAction}); - m_labelAction->setText(m_device->name()); + m_labelAction->setText(m_device->alias()); updateDeviceState(m_device->state()); updateIconTheme(DGuiApplicationHelper::instance()->themeType()); } @@ -97,7 +97,7 @@ void BluetoothDeviceItem::updateIconTheme(DGuiApplicationHelper::ColorType type) void BluetoothDeviceItem::updateDeviceState(Device::State state) { - m_labelAction->setText(m_device->name()); + m_labelAction->setText(m_device->alias()); if (state == Device::StateAvailable) { m_loading->start(); m_stateAction->setVisible(true); @@ -123,6 +123,11 @@ BluetoothAdapterItem::BluetoothAdapterItem(Adapter *adapter, QWidget *parent) , m_deviceListview(new DListView(this)) , m_deviceModel(new QStandardItemModel(m_deviceListview)) , m_refreshBtn(new RefreshButton(this)) + , m_bluetoothInter(new DBusBluetooth("com.deepin.daemon.Bluetooth", + "/com/deepin/daemon/Bluetooth", + QDBusConnection::sessionBus(), + this)) + , m_showUnnamedDevices(false) { initData(); initUi(); @@ -183,7 +188,7 @@ QStringList BluetoothAdapterItem::connectedDevicesName() QStringList devsName; for (BluetoothDeviceItem *devItem : m_deviceItems) { if (devItem && devItem->device()->state() == Device::StateConnected) { - devsName << devItem->device()->name(); + devsName << devItem->device()->alias(); } } @@ -192,6 +197,7 @@ QStringList BluetoothAdapterItem::connectedDevicesName() void BluetoothAdapterItem::initData() { + m_showUnnamedDevices = m_bluetoothInter->displaySwitch(); if (!m_adapter->powered()) return; @@ -199,6 +205,7 @@ void BluetoothAdapterItem::initData() if (!m_deviceItems.contains(device->id())) onDeviceAdded(device); } + setUnnamedDevicesVisible(m_showUnnamedDevices); emit deviceCountChanged(); } @@ -216,6 +223,9 @@ void BluetoothAdapterItem::onDeviceAdded(const Device *device) connect(item, &BluetoothDeviceItem::deviceStateChanged, this, &BluetoothAdapterItem::deviceStateChanged); m_deviceItems.insert(device->id(), item); + if (!m_showUnnamedDevices && device->name().isEmpty() && Device::StateConnected != device->state()) + return; + m_deviceModel->insertRow(insertRow, item->standardItem()); emit deviceCountChanged(); } @@ -308,4 +318,55 @@ void BluetoothAdapterItem::initConnect() m_refreshBtn->setVisible(state); emit requestSetAdapterPower(m_adapter, state); }); + connect(m_bluetoothInter, &DBusBluetooth::DisplaySwitchChanged, this, [ = ](bool value) { + m_showUnnamedDevices = value; + setUnnamedDevicesVisible(value); + }); +} + +void BluetoothAdapterItem::setUnnamedDevicesVisible(bool isShow) +{ + QMap::iterator i; + + if (isShow) { + // 计算已连接蓝牙设备数 + int connectCount = 0; + for (i = m_deviceItems.begin(); i != m_deviceItems.end(); i++) { + BluetoothDeviceItem *deviceItem = i.value(); + + if (deviceItem && deviceItem->device() && deviceItem->device()->paired() + && (Device::StateConnected == deviceItem->device()->state() || deviceItem->device()->connecting())) + connectCount++; + } + + // 显示所有蓝牙设备 + for (i = m_deviceItems.begin(); i != m_deviceItems.end(); i++) { + BluetoothDeviceItem *deviceItem = i.value(); + + if (deviceItem && deviceItem->device() && deviceItem->device()->name().isEmpty()) { + DStandardItem *dListItem = deviceItem->standardItem(); + QModelIndex index = m_deviceModel->indexFromItem(dListItem); + if (!index.isValid()) { + m_deviceModel->insertRow(((connectCount > -1 && connectCount < m_deviceItems.count()) ? connectCount : 0), dListItem); + } + } + } + + return; + } + + + for (i = m_deviceItems.begin(); i != m_deviceItems.end(); i++) { + BluetoothDeviceItem *deviceItem = i.value(); + + // 将名称为空的蓝牙设备过滤,如果蓝牙正在连接或者已连接不过滤 + if (deviceItem && deviceItem->device() && deviceItem->device()->name().isEmpty() + && (Device::StateConnected != deviceItem->device()->state() || !deviceItem->device()->connecting())) { + DStandardItem *dListItem = deviceItem->standardItem(); + QModelIndex index = m_deviceModel->indexFromItem(dListItem); + if (index.isValid()) { + m_deviceModel->takeRow(index.row()); + } + } + } } diff --git a/plugins/bluetooth/componments/bluetoothadapteritem.h b/plugins/bluetooth/componments/bluetoothadapteritem.h index 3bd61f3fb..48fc3d47d 100644 --- a/plugins/bluetooth/componments/bluetoothadapteritem.h +++ b/plugins/bluetooth/componments/bluetoothadapteritem.h @@ -30,6 +30,10 @@ #include #include +#include + +using DBusBluetooth = com::deepin::daemon::Bluetooth; + DWIDGET_USE_NAMESPACE DWIDGET_BEGIN_NAMESPACE @@ -116,6 +120,7 @@ private: void initData(); void initUi(); void initConnect(); + void setUnnamedDevicesVisible(bool isShow); Adapter *m_adapter = nullptr; SettingLabel *m_adapterLabel = nullptr; @@ -123,6 +128,8 @@ private: DListView *m_deviceListview = nullptr; QStandardItemModel *m_deviceModel = nullptr; RefreshButton *m_refreshBtn = nullptr; + DBusBluetooth *m_bluetoothInter; + bool m_showUnnamedDevices; QMap m_deviceItems; }; diff --git a/plugins/bluetooth/componments/device.cpp b/plugins/bluetooth/componments/device.cpp index daa2a2169..4a903fde0 100644 --- a/plugins/bluetooth/componments/device.cpp +++ b/plugins/bluetooth/componments/device.cpp @@ -77,6 +77,14 @@ void Device::setName(const QString &name) } } +void Device::setAlias(const QString &alias) +{ + if (alias != m_alias) { + m_alias = alias; + Q_EMIT aliasChanged(alias); + } +} + void Device::setPaired(bool paired) { if (paired != m_paired) { diff --git a/plugins/bluetooth/componments/device.h b/plugins/bluetooth/componments/device.h index 908ba8f9e..4aa2c3147 100644 --- a/plugins/bluetooth/componments/device.h +++ b/plugins/bluetooth/componments/device.h @@ -51,6 +51,9 @@ public: inline QString name() const { return m_name; } void setName(const QString &name); + inline QString alias() const { return m_alias; } + void setAlias(const QString &alias); + inline bool paired() const { return m_paired; } void setPaired(bool paired); @@ -80,6 +83,7 @@ public: Q_SIGNALS: void nameChanged(const QString &name) const; + void aliasChanged(const QString &alias) const; void pairedChanged(const bool paired) const; void stateChanged(const State state) const; void connectStateChanged(const bool connectState) const; @@ -90,6 +94,7 @@ Q_SIGNALS: private: QString m_id; QString m_name; + QString m_alias; bool m_paired; bool m_trusted; bool m_connecting;