Merge "Fix connecting to profiles when bonding from local device (1/3)"

This commit is contained in:
Jakub Pawlowski
2016-10-06 20:54:07 +00:00
committed by Gerrit Code Review
3 changed files with 11 additions and 8 deletions

View File

@@ -892,6 +892,14 @@ public final class BluetoothDevice implements Parcelable {
return false; return false;
} }
/** @hide */
public boolean isBondingInitiatedLocally() {
try {
return sService.isBondingInitiatedLocally(this);
} catch (RemoteException e) {Log.e(TAG, "", e);}
return false;
}
/** /**
* Set the Out Of Band data for a remote device to be used later * Set the Out Of Band data for a remote device to be used later
* in the pairing mechanism. Users can obtain this data through other * in the pairing mechanism. Users can obtain this data through other

View File

@@ -62,6 +62,7 @@ interface IBluetooth
boolean cancelBondProcess(in BluetoothDevice device); boolean cancelBondProcess(in BluetoothDevice device);
boolean removeBond(in BluetoothDevice device); boolean removeBond(in BluetoothDevice device);
int getBondState(in BluetoothDevice device); int getBondState(in BluetoothDevice device);
boolean isBondingInitiatedLocally(in BluetoothDevice device);
int getConnectionState(in BluetoothDevice device); int getConnectionState(in BluetoothDevice device);
String getRemoteName(in BluetoothDevice device); String getRemoteName(in BluetoothDevice device);

View File

@@ -102,9 +102,6 @@ public final class CachedBluetoothDevice implements Comparable<CachedBluetoothDe
private static final long MAX_UUID_DELAY_FOR_AUTO_CONNECT = 5000; private static final long MAX_UUID_DELAY_FOR_AUTO_CONNECT = 5000;
private static final long MAX_HOGP_DELAY_FOR_AUTO_CONNECT = 30000; private static final long MAX_HOGP_DELAY_FOR_AUTO_CONNECT = 30000;
/** Auto-connect after pairing only if locally initiated. */
private boolean mConnectAfterPairing;
/** /**
* Describes the current device and profile for logging. * Describes the current device and profile for logging.
* *
@@ -300,7 +297,6 @@ public final class CachedBluetoothDevice implements Comparable<CachedBluetoothDe
return false; return false;
} }
mConnectAfterPairing = true; // auto-connect after pairing
return true; return true;
} }
@@ -309,7 +305,7 @@ public final class CachedBluetoothDevice implements Comparable<CachedBluetoothDe
* slightly different for local vs. remote initiated pairing dialogs. * slightly different for local vs. remote initiated pairing dialogs.
*/ */
boolean isUserInitiatedPairing() { boolean isUserInitiatedPairing() {
return mConnectAfterPairing; return mDevice.isBondingInitiatedLocally();
} }
public void unpair() { public void unpair() {
@@ -549,7 +545,6 @@ public final class CachedBluetoothDevice implements Comparable<CachedBluetoothDe
void onBondingStateChanged(int bondState) { void onBondingStateChanged(int bondState) {
if (bondState == BluetoothDevice.BOND_NONE) { if (bondState == BluetoothDevice.BOND_NONE) {
mProfiles.clear(); mProfiles.clear();
mConnectAfterPairing = false; // cancel auto-connect
setPhonebookPermissionChoice(ACCESS_UNKNOWN); setPhonebookPermissionChoice(ACCESS_UNKNOWN);
setMessagePermissionChoice(ACCESS_UNKNOWN); setMessagePermissionChoice(ACCESS_UNKNOWN);
setSimPermissionChoice(ACCESS_UNKNOWN); setSimPermissionChoice(ACCESS_UNKNOWN);
@@ -562,10 +557,9 @@ public final class CachedBluetoothDevice implements Comparable<CachedBluetoothDe
if (bondState == BluetoothDevice.BOND_BONDED) { if (bondState == BluetoothDevice.BOND_BONDED) {
if (mDevice.isBluetoothDock()) { if (mDevice.isBluetoothDock()) {
onBondingDockConnect(); onBondingDockConnect();
} else if (mConnectAfterPairing) { } else if (mDevice.isBondingInitiatedLocally()) {
connect(false); connect(false);
} }
mConnectAfterPairing = false;
} }
} }