From 2b8696e3a91194db0bfd876b8cc68843a7ccd080 Mon Sep 17 00:00:00 2001 From: Andre Eisenbach Date: Thu, 5 Feb 2015 20:06:33 -0800 Subject: [PATCH] Add API to check if a Bluetooth connection is encrypted (1/2) Bug: 19186961 Change-Id: I24656a07ee23ebfe067a9dfb9c1bc4041c782d8c --- api/system-current.txt | 2 ++ .../android/bluetooth/BluetoothDevice.java | 34 ++++++++++++++++++- core/java/android/bluetooth/IBluetooth.aidl | 2 +- 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/api/system-current.txt b/api/system-current.txt index d84b1dc979080..8d24e838105e2 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -6415,6 +6415,8 @@ package android.bluetooth { method public java.lang.String getName(); method public int getType(); method public android.os.ParcelUuid[] getUuids(); + method public boolean isConnected(); + method public boolean isEncrypted(); method public boolean setPairingConfirmation(boolean); method public boolean setPin(byte[]); method public void writeToParcel(android.os.Parcel, int); diff --git a/core/java/android/bluetooth/BluetoothDevice.java b/core/java/android/bluetooth/BluetoothDevice.java index 5e50b696b2270..bb0d0a39f56af 100644 --- a/core/java/android/bluetooth/BluetoothDevice.java +++ b/core/java/android/bluetooth/BluetoothDevice.java @@ -18,6 +18,7 @@ package android.bluetooth; import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; +import android.annotation.SystemApi; import android.content.Context; import android.os.Parcel; import android.os.Parcelable; @@ -66,6 +67,14 @@ public final class BluetoothDevice implements Parcelable { private static final String TAG = "BluetoothDevice"; private static final boolean DBG = false; + /** + * Connection state bitmask as returned by getConnectionState. + */ + private static final int CONNECTION_STATE_DISCONNECTED = 0; + private static final int CONNECTION_STATE_CONNECTED = 1; + private static final int CONNECTION_STATE_ENCRYPTED_BREDR = 2; + private static final int CONNECTION_STATE_ENCRYPTED_LE = 4; + /** * Sentinel error value for this class. Guaranteed to not equal any other * integer constant in this class. Provided as a convenience for functions @@ -940,13 +949,36 @@ public final class BluetoothDevice implements Parcelable { * @return True if there is at least one open connection to this device. * @hide */ + @SystemApi public boolean isConnected() { if (sService == null) { // BT is not enabled, we cannot be connected. return false; } try { - return sService.isConnected(this); + return sService.getConnectionState(this) != CONNECTION_STATE_DISCONNECTED; + } catch (RemoteException e) { + Log.e(TAG, "", e); + return false; + } + } + + /** + * Returns whether there is an open connection to this device + * that has been encrypted. + *

Requires {@link android.Manifest.permission#BLUETOOTH}. + * + * @return True if there is at least one encrypted connection to this device. + * @hide + */ + @SystemApi + public boolean isEncrypted() { + if (sService == null) { + // BT is not enabled, we cannot be connected. + return false; + } + try { + return sService.getConnectionState(this) > CONNECTION_STATE_CONNECTED; } catch (RemoteException e) { Log.e(TAG, "", e); return false; diff --git a/core/java/android/bluetooth/IBluetooth.aidl b/core/java/android/bluetooth/IBluetooth.aidl index cd4535a57f92e..dabb1ceaea8f5 100644 --- a/core/java/android/bluetooth/IBluetooth.aidl +++ b/core/java/android/bluetooth/IBluetooth.aidl @@ -59,7 +59,7 @@ interface IBluetooth boolean cancelBondProcess(in BluetoothDevice device); boolean removeBond(in BluetoothDevice device); int getBondState(in BluetoothDevice device); - boolean isConnected(in BluetoothDevice device); + int getConnectionState(in BluetoothDevice device); String getRemoteName(in BluetoothDevice device); int getRemoteType(in BluetoothDevice device);