From 2d0ebcf3a0cf99d3a4294caff1a5d08f73bb7933 Mon Sep 17 00:00:00 2001 From: Jakub Pawlowski Date: Mon, 18 Jul 2016 09:18:09 -0700 Subject: [PATCH] Fix Bluetooth OOB pairing not working for unseen devices When Out Of Band info is provided, first time we learn about device is when it's state is changed to "Bonding". This currently cause this event to be discarded and pairing fails. Instead, we should add CachedDevice object for newly added device. Bug: 30188629 Change-Id: I4046bfe30e8bf32b888f608ac06d5041e2999dc9 (cherry picked from commit 3eb490f903513da26b69cf50398a711829614bff) --- .../bluetooth/BluetoothEventManager.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java index 4bcbea76f134c..a332332131012 100755 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothEventManager.java @@ -268,16 +268,16 @@ public final class BluetoothEventManager { if (cachedDevice == null) { Log.w(TAG, "CachedBluetoothDevice for device " + device + " not found, calling readPairedDevices()."); - if (!readPairedDevices()) { - Log.e(TAG, "Got bonding state changed for " + device + - ", but we have no record of that device."); - return; + if (readPairedDevices()) { + cachedDevice = mDeviceManager.findDevice(device); } - cachedDevice = mDeviceManager.findDevice(device); + if (cachedDevice == null) { - Log.e(TAG, "Got bonding state changed for " + device + - ", but device not added in cache."); - return; + Log.w(TAG, "Got bonding state changed for " + device + + ", but we have no record of that device."); + + cachedDevice = mDeviceManager.addDevice(mLocalAdapter, mProfileManager, device); + dispatchDeviceAdded(cachedDevice); } }