diff options
author | Michael Chan <mchan@android.com> | 2010-04-22 16:07:35 -0700 |
---|---|---|
committer | Michael Chan <mchan@android.com> | 2010-04-22 16:07:35 -0700 |
commit | 96b0c1dc0813f7e8c957ec17dc7751693926c6ae (patch) | |
tree | d1a3729c7914778d8556e774e83987d58459214a /src | |
parent | 4c3b2f0cf062b38a6e380cc15ff8dc9abdca518b (diff) | |
download | packages_apps_Settings-96b0c1dc0813f7e8c957ec17dc7751693926c6ae.zip packages_apps_Settings-96b0c1dc0813f7e8c957ec17dc7751693926c6ae.tar.gz packages_apps_Settings-96b0c1dc0813f7e8c957ec17dc7751693926c6ae.tar.bz2 |
b/2608693 Fix the problem where BT was automatically reconnecting
... after the user unpaired while docked.
Change-Id: I65642f440109968387401fc3c103da0f2b15f49f
Diffstat (limited to 'src')
-rw-r--r-- | src/com/android/settings/bluetooth/CachedBluetoothDevice.java | 42 |
1 files changed, 17 insertions, 25 deletions
diff --git a/src/com/android/settings/bluetooth/CachedBluetoothDevice.java b/src/com/android/settings/bluetooth/CachedBluetoothDevice.java index 57bffa9..acc8551 100644 --- a/src/com/android/settings/bluetooth/CachedBluetoothDevice.java +++ b/src/com/android/settings/bluetooth/CachedBluetoothDevice.java @@ -95,7 +95,7 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> private static final long MAX_WAIT_TIME_FOR_FRAMEWORK = 25 * 1000; private enum BluetoothCommand { - CONNECT, DISCONNECT, + CONNECT, DISCONNECT, REMOVE_BOND, } static class BluetoothJob { @@ -118,7 +118,9 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> StringBuilder sb = new StringBuilder(); sb.append(command.name()); sb.append(" Address:").append(cachedDevice.mDevice); - sb.append(" Profile:").append(profile.name()); + if (profile != null) { + sb.append(" Profile:").append(profile.name()); + } sb.append(" TimeSent:"); if (timeSent == 0) { sb.append("not yet"); @@ -210,6 +212,12 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> case DISCONNECT: successful = disconnectInt(job.cachedDevice, job.profile); break; + case REMOVE_BOND: + BluetoothDevice dev = job.cachedDevice.getDevice(); + if (dev != null) { + successful = dev.removeBond(); + } + break; } if (successful) { @@ -510,32 +518,16 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice> } public void unpair() { - synchronized (workQueue) { - // Remove any pending commands for this device - boolean processNow = false; - Iterator<BluetoothJob> it = workQueue.iterator(); - while (it.hasNext()) { - BluetoothJob job = it.next(); - if (job.cachedDevice.mDevice.equals(this.mDevice)) { - it.remove(); - if (job.timeSent != 0) { - processNow = true; - } - } - } - if (processNow) { - processCommands(); - } - } + disconnect(); - switch (getBondState()) { - case BluetoothDevice.BOND_BONDED: - mDevice.removeBond(); - break; + int state = getBondState(); - case BluetoothDevice.BOND_BONDING: + if (state == BluetoothDevice.BOND_BONDING) { mDevice.cancelBondProcess(); - break; + } + + if (state != BluetoothDevice.BOND_NONE) { + queueCommand(new BluetoothJob(BluetoothCommand.REMOVE_BOND, this, null)); } } |