fix: 修复蓝牙列表中设备顺序与控制中心不一致的问题

增加记录蓝牙设备顺序的列表,根据新增删除设备的顺序对设备进行排序

Log:
Influence: 打开快捷面板中的蓝牙列表,在多个设备同时存在的情况下,观察设备顺序是否和控制中心一致
Bug: https://pms.uniontech.com/bug-view-171513.html
Change-Id: I5c1017a30e0658022c61a053b9cd724312b37c40
This commit is contained in:
donghualin 2022-11-21 10:46:59 +00:00
parent 9b33a95fab
commit 06bab9d640
5 changed files with 27 additions and 14 deletions

View File

@ -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

View File

@ -173,6 +173,7 @@ void AdaptersManager::onRemoveAdapter(const QString &json)
Adapter *adapter = const_cast<Adapter *>(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<const Adapter *> AdaptersManager::adapters()
{
return m_adapters.values();
QList<const Adapter *> 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;
}

View File

@ -61,6 +61,7 @@ private:
private:
DBusBluetooth *m_bluetoothInter;
QMap<QString, const Adapter *> m_adapters;
QStringList m_adapterIds; // 用于记录蓝牙适配器的排序
};
#endif // ADAPTERSMANAGER_H

View File

@ -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<const Adapter *> adapters = m_adaptersManager->adapters();
for (const Adapter *adapter : adapters)
onAdapterAdded(const_cast<Adapter *>(adapter));
}
void BluetoothApplet::setAirplaneModeEnabled(bool enable)
{
if (m_airplaneModeEnable == enable)

View File

@ -115,6 +115,7 @@ private:
// 更新蓝牙插件主界面大小
void updateSize();
void updateIconTheme();
void initAdapters();
private:
QScrollArea *m_scroarea;