From 5d405d07fb51502d0bfab08f4d74aa5eba365bab Mon Sep 17 00:00:00 2001
From: Alex Blasche <alexander.blasche@theqtcompany.com>
Date: Thu, 20 Nov 2014 15:34:03 +0100
Subject: [PATCH] Fix crash during service discovery on Android

This is caused when running a service discovery on an Android emulator.
The emulator does not have a local Bluetooth device despite the Qt code
assuming it.

Change-Id: I9c0d826d14e7494bfeb27d449f9b6f568860d917
Reviewed-by: Timur Pocheptsov <Timur.Pocheptsov@digia.com>
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
---
 ...bluetoothservicediscoveryagent_android.cpp | 24 +++++++++----------
 1 file changed, 11 insertions(+), 13 deletions(-)

diff --git a/src/bluetooth/qbluetoothservicediscoveryagent_android.cpp b/src/bluetooth/qbluetoothservicediscoveryagent_android.cpp
index 01993f25..e10d2ffe 100644
--- a/src/bluetooth/qbluetoothservicediscoveryagent_android.cpp
+++ b/src/bluetooth/qbluetoothservicediscoveryagent_android.cpp
@@ -48,19 +48,20 @@ QT_BEGIN_NAMESPACE
 Q_DECLARE_LOGGING_CATEGORY(QT_BT_ANDROID)
 
 QBluetoothServiceDiscoveryAgentPrivate::QBluetoothServiceDiscoveryAgentPrivate(
-        const QBluetoothAddress &deviceAdapter)
+        const QBluetoothAddress &/*deviceAdapter*/)
     : error(QBluetoothServiceDiscoveryAgent::NoError),
       state(Inactive), deviceDiscoveryAgent(0),
       mode(QBluetoothServiceDiscoveryAgent::MinimalDiscovery),
       singleDevice(false), receiver(0), localDeviceReceiver(0)
 {
     QList<QBluetoothHostInfo> devices = QBluetoothLocalDevice::allDevices();
-    Q_ASSERT(devices.count() == 1); //Android only supports one device at the moment
+    Q_ASSERT(devices.count() <= 1); //Android only supports one device at the moment
 
-    if (deviceAdapter.isNull() && devices.count() > 0 )
-        m_deviceAdapterAddress = devices.at(0).address();
-    else
-        m_deviceAdapterAddress = deviceAdapter;
+    if (devices.isEmpty()) {
+        error = QBluetoothServiceDiscoveryAgent::InvalidBluetoothAdapterError;
+        errorString = QBluetoothServiceDiscoveryAgent::tr("Invalid Bluetooth adapter address");
+        return;
+    }
 
     if (QtAndroidPrivate::androidSdkVersion() < 15)
         qCWarning(QT_BT_ANDROID)
@@ -69,13 +70,10 @@ QBluetoothServiceDiscoveryAgentPrivate::QBluetoothServiceDiscoveryAgentPrivate(
             << "Service discovery will return empty list.";
 
 
-        /*  We assume that the current local adapter has been passed.
-            Android only supports one adapter at the moment. If m_deviceAdapterAddress
-            doesn't match the local adapter then we won't get to this point since
-            we have an InvalidBluetoothAdapter error.
-
-            The logic below must change once there is more than one adapter.
-        */
+    /*
+      We assume that the current local adapter has been passed.
+      The logic below must change once there is more than one adapter.
+    */
 
     btAdapter = QAndroidJniObject::callStaticObjectMethod("android/bluetooth/BluetoothAdapter",
                                                            "getDefaultAdapter",
-- 
GitLab