From ad0df0de1b75ec32574f92f8165d64615cff3dfd Mon Sep 17 00:00:00 2001 From: Alex Blasche Date: Thu, 5 Jun 2014 13:44:43 +0200 Subject: Properly deal with pairing errors in btfiletransfer example Pairing error signals were ignored which lead to a situation in which the UI remained in the "attempting to pair" state. Change-Id: I66f8855cf5ab72d608650b36a844c53e27624452 Reviewed-by: Oleg Shparber Reviewed-by: Fabian Bumberger --- .../bluetooth/btfiletransfer/remoteselector.cpp | 35 +++++++++++++++------- examples/bluetooth/btfiletransfer/remoteselector.h | 2 ++ 2 files changed, 26 insertions(+), 11 deletions(-) diff --git a/examples/bluetooth/btfiletransfer/remoteselector.cpp b/examples/bluetooth/btfiletransfer/remoteselector.cpp index 84619a4e..08072d14 100644 --- a/examples/bluetooth/btfiletransfer/remoteselector.cpp +++ b/examples/bluetooth/btfiletransfer/remoteselector.cpp @@ -59,7 +59,8 @@ QT_USE_NAMESPACE RemoteSelector::RemoteSelector(QWidget *parent) : QDialog(parent), ui(new Ui::RemoteSelector), - m_localDevice(new QBluetoothLocalDevice), m_pindisplay(0) + m_localDevice(new QBluetoothLocalDevice), m_pindisplay(0), + m_pairingError(false) { ui->setupUi(this); @@ -85,9 +86,14 @@ RemoteSelector::RemoteSelector(QWidget *parent) ui->remoteDevices->setColumnWidth(3, 75); ui->remoteDevices->setColumnWidth(4, 100); - connect(m_localDevice, SIGNAL(pairingDisplayPinCode(QBluetoothAddress,QString)), this, SLOT(displayPin(QBluetoothAddress,QString))); - connect(m_localDevice, SIGNAL(pairingDisplayConfirmation(QBluetoothAddress,QString)), this, SLOT(displayConfirmation(QBluetoothAddress,QString))); - connect(m_localDevice, SIGNAL(pairingFinished(QBluetoothAddress,QBluetoothLocalDevice::Pairing)), this, SLOT(pairingFinished(QBluetoothAddress,QBluetoothLocalDevice::Pairing))); + connect(m_localDevice, SIGNAL(pairingDisplayPinCode(QBluetoothAddress,QString)), + this, SLOT(displayPin(QBluetoothAddress,QString))); + connect(m_localDevice, SIGNAL(pairingDisplayConfirmation(QBluetoothAddress,QString)), + this, SLOT(displayConfirmation(QBluetoothAddress,QString))); + connect(m_localDevice, SIGNAL(pairingFinished(QBluetoothAddress,QBluetoothLocalDevice::Pairing)), + this, SLOT(pairingFinished(QBluetoothAddress,QBluetoothLocalDevice::Pairing))); + connect(m_localDevice, SIGNAL(error(QBluetoothLocalDevice::Error)), + this, SLOT(pairingError(QBluetoothLocalDevice::Error))); ui->busyWidget->setMovie(new QMovie(":/icons/busy.gif")); ui->busyWidget->movie()->start(); @@ -97,8 +103,6 @@ RemoteSelector::RemoteSelector(QWidget *parent) ui->remoteDevices->clearContents(); ui->remoteDevices->setRowCount(0); - - } RemoteSelector::~RemoteSelector() @@ -324,12 +328,13 @@ void RemoteSelector::pairingFinished(const QBluetoothAddress &address, QBluetoot delete m_pindisplay; QMessageBox msgBox; - if (status == QBluetoothLocalDevice::Paired || - status == QBluetoothLocalDevice::AuthorizedPaired){ - msgBox.setText("Paired successfully with" + address.toString()); - } - else { + if (m_pairingError) { msgBox.setText("Pairing failed with " + address.toString()); + } else if (status == QBluetoothLocalDevice::Paired + || status == QBluetoothLocalDevice::AuthorizedPaired) { + msgBox.setText("Paired successfully with " + address.toString()); + } else { + msgBox.setText("Pairing released with " + address.toString()); } if (service.isValid()){ @@ -347,11 +352,19 @@ void RemoteSelector::pairingFinished(const QBluetoothAddress &address, QBluetoot } } + m_pairingError = false; msgBox.exec(); ui->remoteDevices->blockSignals(false); +} +void RemoteSelector::pairingError(QBluetoothLocalDevice::Error error) +{ + if (error != QBluetoothLocalDevice::PairingError) + return; + m_pairingError = true; + pairingFinished(m_service.device().address(), QBluetoothLocalDevice::Unpaired); } void RemoteSelector::on_remoteDevices_cellClicked(int row, int column) diff --git a/examples/bluetooth/btfiletransfer/remoteselector.h b/examples/bluetooth/btfiletransfer/remoteselector.h index fe1d3966..ec2e4fd5 100644 --- a/examples/bluetooth/btfiletransfer/remoteselector.h +++ b/examples/bluetooth/btfiletransfer/remoteselector.h @@ -83,6 +83,7 @@ private: QFile *m_file; QBluetoothLocalDevice *m_localDevice; QPointer m_pindisplay; + bool m_pairingError; QString addressToName(const QBluetoothAddress &address); @@ -98,6 +99,7 @@ private slots: void on_stopButton_clicked(); void pairingFinished(const QBluetoothAddress &address,QBluetoothLocalDevice::Pairing pairing); + void pairingError(QBluetoothLocalDevice::Error error); void displayPin(const QBluetoothAddress &address, QString pin); void displayConfirmation(const QBluetoothAddress &address, QString pin); void displayConfReject(); -- cgit v1.2.3