am 0bca1653: am 6368b25c: Merge "b/2608693 Fix the problem where BT was automatically reconnecting ... after the user unpaired while docked." into froyo

Merge commit '0bca1653cb78693e2c892efb48b944ddad98b66d' into kraken

* commit '0bca1653cb78693e2c892efb48b944ddad98b66d':
  b/2608693 Fix the problem where BT was automatically reconnecting
This commit is contained in:
Michael Chan
2010-04-23 10:51:54 -07:00
committed by Android Git Automerger

View File

@@ -95,7 +95,7 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice>
private static final long MAX_WAIT_TIME_FOR_FRAMEWORK = 25 * 1000; private static final long MAX_WAIT_TIME_FOR_FRAMEWORK = 25 * 1000;
private enum BluetoothCommand { private enum BluetoothCommand {
CONNECT, DISCONNECT, CONNECT, DISCONNECT, REMOVE_BOND,
} }
static class BluetoothJob { static class BluetoothJob {
@@ -118,7 +118,9 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice>
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
sb.append(command.name()); sb.append(command.name());
sb.append(" Address:").append(cachedDevice.mDevice); sb.append(" Address:").append(cachedDevice.mDevice);
if (profile != null) {
sb.append(" Profile:").append(profile.name()); sb.append(" Profile:").append(profile.name());
}
sb.append(" TimeSent:"); sb.append(" TimeSent:");
if (timeSent == 0) { if (timeSent == 0) {
sb.append("not yet"); sb.append("not yet");
@@ -210,6 +212,12 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice>
case DISCONNECT: case DISCONNECT:
successful = disconnectInt(job.cachedDevice, job.profile); successful = disconnectInt(job.cachedDevice, job.profile);
break; break;
case REMOVE_BOND:
BluetoothDevice dev = job.cachedDevice.getDevice();
if (dev != null) {
successful = dev.removeBond();
}
break;
} }
if (successful) { if (successful) {
@@ -510,32 +518,16 @@ public class CachedBluetoothDevice implements Comparable<CachedBluetoothDevice>
} }
public void unpair() { public void unpair() {
synchronized (workQueue) { disconnect();
// 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();
}
}
switch (getBondState()) { int state = getBondState();
case BluetoothDevice.BOND_BONDED:
mDevice.removeBond();
break;
case BluetoothDevice.BOND_BONDING: if (state == BluetoothDevice.BOND_BONDING) {
mDevice.cancelBondProcess(); mDevice.cancelBondProcess();
break; }
if (state != BluetoothDevice.BOND_NONE) {
queueCommand(new BluetoothJob(BluetoothCommand.REMOVE_BOND, this, null));
} }
} }