From 06bab9d640d789c800d4fc49ad4e7392b401526f Mon Sep 17 00:00:00 2001 From: donghualin Date: Mon, 21 Nov 2022 10:46:59 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E8=93=9D=E7=89=99?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E4=B8=AD=E8=AE=BE=E5=A4=87=E9=A1=BA=E5=BA=8F?= =?UTF-8?q?=E4=B8=8E=E6=8E=A7=E5=88=B6=E4=B8=AD=E5=BF=83=E4=B8=8D=E4=B8=80?= =?UTF-8?q?=E8=87=B4=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 增加记录蓝牙设备顺序的列表,根据新增删除设备的顺序对设备进行排序 Log: Influence: 打开快捷面板中的蓝牙列表,在多个设备同时存在的情况下,观察设备顺序是否和控制中心一致 Bug: https://pms.uniontech.com/bug-view-171513.html Change-Id: I5c1017a30e0658022c61a053b9cd724312b37c40 --- frame/window/quicksettingcontainer.cpp | 5 ++-- .../bluetooth/componments/adaptersmanager.cpp | 23 ++++++++++--------- .../bluetooth/componments/adaptersmanager.h | 1 + .../bluetooth/componments/bluetoothapplet.cpp | 11 ++++++++- .../bluetooth/componments/bluetoothapplet.h | 1 + 5 files changed, 27 insertions(+), 14 deletions(-) diff --git a/frame/window/quicksettingcontainer.cpp b/frame/window/quicksettingcontainer.cpp index daaa62ce0..e89ff39cd 100644 --- a/frame/window/quicksettingcontainer.cpp +++ b/frame/window/quicksettingcontainer.cpp @@ -227,10 +227,11 @@ void QuickSettingContainer::onPluginRemove(PluginsItemInterface *itemInter) return item->pluginItem() == itemInter; }); - QuickSettingItem *removeItem = *removeItemIter; - if (!removeItem) + if (removeItemIter == m_quickSettings.end()) return; + QuickSettingItem *removeItem = *removeItemIter; + if (removeItem->type() == QuickSettingItem::QuickSettingType::Full) m_componentWidget->layout()->removeWidget(removeItem); else diff --git a/plugins/bluetooth/componments/adaptersmanager.cpp b/plugins/bluetooth/componments/adaptersmanager.cpp index 78ee7f631..3307e1165 100644 --- a/plugins/bluetooth/componments/adaptersmanager.cpp +++ b/plugins/bluetooth/componments/adaptersmanager.cpp @@ -173,6 +173,7 @@ void AdaptersManager::onRemoveAdapter(const QString &json) Adapter *adapter = const_cast(result); if (adapter) { m_adapters.remove(id); + m_adapterIds.removeOne(id); emit adapterDecreased(adapter); adapter->deleteLater(); } @@ -234,21 +235,17 @@ void AdaptersManager::adapterAdd(Adapter *adapter, const QJsonObject &adpterObj) const QString replyStr = reply.value(); QJsonDocument doc = QJsonDocument::fromJson(replyStr.toUtf8()); adapter->initDevicesList(doc); - - QString id = adapter->id(); - if (!id.isEmpty()) { - if (!m_adapters.contains(id)) { - m_adapters[id] = adapter; - } else if (!m_adapters[id]) { - m_adapters[id] = adapter; - } - } - emit this->adapterIncreased(adapter); } else { qWarning() << call.error().message(); } }); + + QString id = adapter->id(); + if (!id.isEmpty() && (!m_adapters.contains(id) || !m_adapters[id])) { + m_adapters[id] = adapter; + m_adapterIds << id; + } } void AdaptersManager::inflateAdapter(Adapter *adapter, const QJsonObject &adapterObj) @@ -275,5 +272,9 @@ void AdaptersManager::adapterRefresh(const Adapter *adapter) QList AdaptersManager::adapters() { - return m_adapters.values(); + QList allAdapter = m_adapters.values(); + std::sort(allAdapter.begin(), allAdapter.end(), [ & ](const Adapter *adapter1, const Adapter *adapter2) { + return m_adapterIds.indexOf(adapter1->id()) < m_adapterIds.indexOf(adapter2->id()); + }); + return allAdapter; } diff --git a/plugins/bluetooth/componments/adaptersmanager.h b/plugins/bluetooth/componments/adaptersmanager.h index 4a997374e..598cb53e5 100644 --- a/plugins/bluetooth/componments/adaptersmanager.h +++ b/plugins/bluetooth/componments/adaptersmanager.h @@ -61,6 +61,7 @@ private: private: DBusBluetooth *m_bluetoothInter; QMap m_adapters; + QStringList m_adapterIds; // 用于记录蓝牙适配器的排序 }; #endif // ADAPTERSMANAGER_H diff --git a/plugins/bluetooth/componments/bluetoothapplet.cpp b/plugins/bluetooth/componments/bluetoothapplet.cpp index d54a6b501..a4beb4667 100644 --- a/plugins/bluetooth/componments/bluetoothapplet.cpp +++ b/plugins/bluetooth/componments/bluetoothapplet.cpp @@ -126,6 +126,7 @@ BluetoothApplet::BluetoothApplet(AdaptersManager *adapterManager, QWidget *paren { initUi(); initConnect(); + initAdapters(); QScroller::grabGesture(m_scroarea, QScroller::LeftMouseButtonGesture); QScrollerProperties propertiesOne = QScroller::scroller(m_scroarea)->scrollerProperties(); @@ -202,7 +203,8 @@ void BluetoothApplet::onAdapterAdded(Adapter *adapter) m_adapterItems.insert(adapter->id(), adapterItem); - m_contentLayout->insertWidget(0, adapterItem, Qt::AlignTop | Qt::AlignVCenter); + // 将最新的设备插入到蓝牙设置前面 + m_contentLayout->insertWidget(m_contentLayout->count() - 1, adapterItem, Qt::AlignTop | Qt::AlignVCenter); updateBluetoothPowerState(); updateSize(); } @@ -321,6 +323,13 @@ void BluetoothApplet::updateIconTheme() m_scroarea->setPalette(scroareaBackgroud); } +void BluetoothApplet::initAdapters() +{ + QList adapters = m_adaptersManager->adapters(); + for (const Adapter *adapter : adapters) + onAdapterAdded(const_cast(adapter)); +} + void BluetoothApplet::setAirplaneModeEnabled(bool enable) { if (m_airplaneModeEnable == enable) diff --git a/plugins/bluetooth/componments/bluetoothapplet.h b/plugins/bluetooth/componments/bluetoothapplet.h index f71e397c6..ccf8f9c8d 100644 --- a/plugins/bluetooth/componments/bluetoothapplet.h +++ b/plugins/bluetooth/componments/bluetoothapplet.h @@ -115,6 +115,7 @@ private: // 更新蓝牙插件主界面大小 void updateSize(); void updateIconTheme(); + void initAdapters(); private: QScrollArea *m_scroarea;