Skip to content

Commit

Permalink
Reimplement pairingFinished method
Browse files Browse the repository at this point in the history
The old implementation didn't use the correct deviceLabel pattern.
When the pairing status of a device was changed the name of the device
was missing from the new label. With the new implementation when the
pairing status is changed we replace the old state with the new one and
maintain the device information from the old label.
Also we set the same pairing background colors used in the
addRemoteDevice callback. In this way the label's state is consistent
and the UX is improved.

Signed-off-by: Claudiu Olteanu <olteanu.claudiu@ymail.com>
  • Loading branch information
claudiuolteanu committed Aug 16, 2015
1 parent 9ae338f commit 08d3c3a
Showing 1 changed file with 38 additions and 31 deletions.
69 changes: 38 additions & 31 deletions qt-ui/btdeviceselectiondialog.cpp
Expand Up @@ -241,46 +241,53 @@ void BtDeviceSelectionDialog::displayPairingMenu(const QPoint &pos)

void BtDeviceSelectionDialog::pairingFinished(const QBluetoothAddress &address, QBluetoothLocalDevice::Pairing pairing)
{
// Determine the color, the new pairing status and the log message. By default we assume that the devices are UNPAIRED.
QString remoteDeviceStringAddress = address.toString();
QList<QListWidgetItem *> items = ui->discoveredDevicesList->findItems(remoteDeviceStringAddress, Qt::MatchContains);

if (pairing == QBluetoothLocalDevice::Paired || pairing == QBluetoothLocalDevice::Paired ) {
ui->dialogStatus->setText(QString("Device %1 was paired.")
.arg(remoteDeviceStringAddress));

for (int i = 0; i < items.count(); ++i) {
QListWidgetItem *item = items.at(i);

item->setText(QString("%1 [State: PAIRED]").arg(remoteDeviceStringAddress));
item->setBackgroundColor(QColor(Qt::gray));
}
QColor pairingColor = QColor(Qt::red);
QString pairingStatusLabel = QString("UNPAIRED");
QString dialogStatusMessage = QString("Device %1 was unpaired.").arg(remoteDeviceStringAddress);
bool enableSaveButton = false;

QListWidgetItem *currentItem = ui->discoveredDevicesList->currentItem();
if (pairing == QBluetoothLocalDevice::Paired) {
pairingStatusLabel = QString("PAIRED");
pairingColor = QColor(Qt::gray);
enableSaveButton = true;
dialogStatusMessage = QString("Device %1 was paired.").arg(remoteDeviceStringAddress);
} else if (pairing == QBluetoothLocalDevice::AuthorizedPaired) {
pairingStatusLabel = QString("AUTHORIZED_PAIRED");
pairingColor = QColor(Qt::blue);
enableSaveButton = true;
dialogStatusMessage = QString("Device %1 was authorized paired.").arg(remoteDeviceStringAddress);
}

if (currentItem != NULL && currentItem->text().contains(remoteDeviceStringAddress, Qt::CaseInsensitive)) {
ui->dialogStatus->setText(QString("The device %1 can now be used for connection. You can press the Save button.")
.arg(remoteDeviceStringAddress));
ui->save->setEnabled(true);
}
} else {
ui->dialogStatus->setText(QString("Device %1 was unpaired.")
.arg(remoteDeviceStringAddress));
// Find the items which represent the BTH device and update their state
QList<QListWidgetItem *> items = ui->discoveredDevicesList->findItems(remoteDeviceStringAddress, Qt::MatchContains);

for (int i = 0; i < items.count(); ++i) {
QListWidgetItem *item = items.at(i);
for (int i = 0; i < items.count(); ++i) {
QListWidgetItem *item = items.at(i);
QString updatedDeviceLabel = item->text().replace(QRegularExpression("PAIRED|AUTHORIZED_PAIRED|UNPAIRED"),
pairingStatusLabel);

item->setText(QString("%1 [State: UNPAIRED]").arg(remoteDeviceStringAddress));
item->setBackgroundColor(QColor(Qt::white));
}
item->setText(updatedDeviceLabel);
item->setBackgroundColor(pairingColor);
}

QListWidgetItem *currentItem = ui->discoveredDevicesList->currentItem();
// Check if the updated device is the selected one from the list and inform the user that it can/cannot start the download mode
QListWidgetItem *currentItem = ui->discoveredDevicesList->currentItem();

if (currentItem != NULL && currentItem->text().contains(remoteDeviceStringAddress, Qt::CaseInsensitive)) {
ui->dialogStatus->setText(QString("The device %1 must be paired in order to be used. Please use the context menu for pairing options.")
.arg(remoteDeviceStringAddress));
ui->save->setEnabled(false);
if (currentItem != NULL && currentItem->text().contains(remoteDeviceStringAddress, Qt::CaseInsensitive)) {
if (pairing == QBluetoothLocalDevice::Unpaired) {
dialogStatusMessage = QString("The device %1 must be paired in order to be used. Please use the context menu for pairing options.")
.arg(remoteDeviceStringAddress);
} else {
dialogStatusMessage = QString("The device %1 can now be used for connection. You can press the Save button.")
.arg(remoteDeviceStringAddress);
}
}

// Update the save button and the dialog status message
ui->save->setEnabled(enableSaveButton);
ui->dialogStatus->setText(dialogStatusMessage);
}

void BtDeviceSelectionDialog::error(QBluetoothLocalDevice::Error error)
Expand Down

0 comments on commit 08d3c3a

Please sign in to comment.