fix(bluetooth):popup contents show exceptions

蓝牙弹窗热点显示异常 task:20792

(cherry picked from commit aed005da326d2c994c0c17d4d0fff362820d8c00)
This commit is contained in:
zhaolong 2020-04-28 15:25:54 +08:00 committed by fpc_diesel
parent 028ee46568
commit 3549da8f6e
3 changed files with 51 additions and 62 deletions

View File

@ -72,13 +72,8 @@ AdapterItem::AdapterItem(AdaptersManager *adapterManager, Adapter *adapter, QWid
auto myDevices = adapter->devices();
for (auto constDevice : myDevices) {
auto device = const_cast<Device *>(constDevice);
if (device) {
DeviceItem *deviceItem = createDeviceItem(device);
if (device->state() == Device::StateConnected)
m_sortConnected << deviceItem;
else
m_sortUnConnect << deviceItem;
}
if (device)
createDeviceItem(device);
}
m_initDeviceState = Device::StateUnavailable;
@ -114,11 +109,6 @@ AdapterItem::AdapterItem(AdaptersManager *adapterManager, Adapter *adapter, QWid
showDevices(adapter->powered());
}
//int AdapterItem::pairedDeviceCount()
//{
// return m_pairedDeviceItems.size();
//}
int AdapterItem::deviceCount()
{
return m_deviceItems.size();
@ -141,18 +131,32 @@ int AdapterItem::viewHeight()
void AdapterItem::deviceItemPaired(const bool paired)
{
// auto device = qobject_cast<Device *>(sender());
// if (device) {
// auto deviceId = device->id();
// auto deviceItem = m_deviceItems.value(deviceId);
// if (deviceItem) {
// if (paired)
// m_pairedDeviceItems[deviceId] = deviceItem;
// else
// m_pairedDeviceItems.remove(deviceId);
// }
// showDevices(m_adapter->powered());
// }
auto device = qobject_cast<Device *>(sender());
if (device) {
auto deviceItem = m_deviceItems.value(device->id());
if (paired) {
m_sortUnConnect.removeOne(deviceItem);
m_sortConnected << deviceItem;
} else {
m_sortConnected.removeOne(deviceItem);
m_sortUnConnect << deviceItem;
}
showDevices(m_adapter->powered());
}
}
void AdapterItem::deviceRssiChanged()
{
auto device = qobject_cast<Device *>(sender());
if (device) {
auto deviceItem = m_deviceItems.value(device->id());
auto state = device->state();
if (deviceItem && Device::StateConnected == state)
qSort(m_sortConnected);
else
qSort(m_sortUnConnect);
moveDeviceItem(state, deviceItem);
}
}
void AdapterItem::removeDeviceItem(const Device *device)
@ -165,9 +169,6 @@ void AdapterItem::removeDeviceItem(const Device *device)
m_deviceItems.remove(device->id());
m_sortConnected.removeOne(deviceItem);
m_sortUnConnect.removeOne(deviceItem);
if (device->paired()) {
// m_pairedDeviceItems.remove(device->id());
}
m_deviceLayout->removeWidget(deviceItem);
delete deviceItem;
}
@ -177,11 +178,7 @@ void AdapterItem::removeDeviceItem(const Device *device)
void AdapterItem::showAndConnect(bool change)
{
m_adaptersManager->setAdapterPowered(m_adapter, change);
if (change) {
// m_adaptersManager->connectAllPairedDevice(m_adapter);
}
showDevices(change);
emit powerChanged(change);
}
@ -202,9 +199,8 @@ void AdapterItem::deviceChangeState(const Device::State state)
auto deviceItem = m_deviceItems.value(device->id());
if (deviceItem) {
switch (state) {
case Device::StateUnavailable:
case Device::StateAvailable: {
int index = m_sortConnected.indexOf(deviceItem);
case Device::StateUnavailable: {
int index = m_sortUnConnect.indexOf(deviceItem);
if (index < 0) {
m_sortConnected.removeOne(deviceItem);
m_sortUnConnect << deviceItem;
@ -213,11 +209,16 @@ void AdapterItem::deviceChangeState(const Device::State state)
}
}
break;
case Device::StateAvailable:
break;
case Device::StateConnected: {
m_sortUnConnect.removeOne(deviceItem);
m_sortConnected << deviceItem;
qSort(m_sortConnected);
moveDeviceItem(state, deviceItem);
int index = m_sortConnected.indexOf(deviceItem);
if (index < 0) {
m_sortUnConnect.removeOne(deviceItem);
m_sortConnected << deviceItem;
qSort(m_sortConnected);
moveDeviceItem(state, deviceItem);
}
}
break;
}
@ -249,39 +250,26 @@ void AdapterItem::moveDeviceItem(Device::State state, DeviceItem *item)
m_deviceLayout->insertWidget(index, item);
}
DeviceItem *AdapterItem::createDeviceItem(Device *device)
void AdapterItem::createDeviceItem(Device *device)
{
if (!device)
return nullptr;
return;
// auto paired = device->paired();
auto deviceId = device->id();
auto deviceItem = new DeviceItem(device->name(), this);
deviceItem->setDevice(device);
m_deviceItems[deviceId] = deviceItem;
// if (paired)
// m_pairedDeviceItems[deviceId] = deviceItem;
// deviceItem->setVisible(paired);
if (device->state() == Device::StateConnected)
m_sortConnected << deviceItem;
else
m_sortUnConnect << deviceItem;
// connect(device, &Device::pairedChanged, this, &AdapterItem::deviceItemPaired);
connect(device, &Device::pairedChanged, this, &AdapterItem::deviceItemPaired);
connect(device, &Device::nameChanged, deviceItem, &DeviceItem::setTitle);
connect(device, &Device::stateChanged, deviceItem, &DeviceItem::changeState);
connect(device, &Device::stateChanged, this, &AdapterItem::deviceChangeState);
connect(device, &Device::rssiChanged, [&]{
auto device = qobject_cast<Device *>(sender());
if (device) {
auto deviceItem = m_deviceItems.value(device->id());
auto state = device->state();
if (deviceItem && Device::StateConnected == state)
qSort(m_sortConnected);
else
qSort(m_sortUnConnect);
moveDeviceItem(state, deviceItem);
}
});
connect(device, &Device::rssiChanged, this, &AdapterItem::deviceRssiChanged);
connect(deviceItem, &DeviceItem::clicked, m_adaptersManager, &AdaptersManager::connectDevice);
return deviceItem;
}
void AdapterItem::updateView()

View File

@ -41,7 +41,6 @@ class AdapterItem : public QScrollArea
Q_OBJECT
public:
explicit AdapterItem(AdaptersManager *a, Adapter *adapter, QWidget *parent = nullptr);
// int pairedDeviceCount();
int deviceCount();
void setPowered(bool powered);
bool isPowered();
@ -56,6 +55,7 @@ signals:
private slots:
void deviceItemPaired(const bool paired);
void deviceRssiChanged();
void removeDeviceItem(const Device *device);
void showAndConnect(bool change);
void addDeviceItem(const Device *constDevice);
@ -63,7 +63,7 @@ private slots:
void moveDeviceItem(Device::State state, DeviceItem *item);
private:
DeviceItem *createDeviceItem(Device *device);
void createDeviceItem(Device *device);
void updateView();
void showDevices(bool change);
@ -82,7 +82,6 @@ private:
Device::State m_currentDeviceState;
QList<DeviceItem *> m_sortConnected;
QList<DeviceItem *> m_sortUnConnect;
// QMap<QString, DeviceItem*> m_pairedDeviceItems;
};
#endif // ADAPTERITEM_H

View File

@ -133,6 +133,7 @@ void DeviceItem::changeState(const Device::State state)
{
switch (state) {
case Device::StateUnavailable: {
m_state->setPixmap(QPixmap(":/disconnect" + m_statSuffix));
m_state->setVisible(false);
m_loadingStat->stop();
m_loadingStat->hide();
@ -147,6 +148,7 @@ void DeviceItem::changeState(const Device::State state)
}
break;
case Device::StateConnected: {
m_state->setPixmap(QPixmap(":/select" + m_statSuffix));
m_loadingStat->stop();
m_loadingStat->hide();
m_loadingStat->setVisible(false);