From 8dd30aadaf133fe1b8974847efdd5b8cf285136d Mon Sep 17 00:00:00 2001 From: Edward Jee Date: Fri, 5 Sep 2014 00:29:14 -0700 Subject: [PATCH] Adds APIs for Bluetooth PBAP and MAP access permission. Currently, users' preference in phonebook and call history or message access per each Bluetooth-paired device is stored in Settings application's shared preferences. However, some privileged applications other than Settings need to access such data. So we decided to migrate the data from Settings application's shared preferences to Bluetooth application's. Bug: 17158953 Change-Id: I3771f03eaea3f57cf60d93ab9fd41c9eb3e1e99c --- .../android/bluetooth/BluetoothDevice.java | 131 +++++++++++++----- core/java/android/bluetooth/IBluetooth.aidl | 5 + core/res/AndroidManifest.xml | 3 +- 3 files changed, 104 insertions(+), 35 deletions(-) diff --git a/core/java/android/bluetooth/BluetoothDevice.java b/core/java/android/bluetooth/BluetoothDevice.java index 860512b9f9d09..5e50b696b2270 100644 --- a/core/java/android/bluetooth/BluetoothDevice.java +++ b/core/java/android/bluetooth/BluetoothDevice.java @@ -517,6 +517,27 @@ public final class BluetoothDevice implements Parcelable { */ public static final String EXTRA_UUID = "android.bluetooth.device.extra.UUID"; + /** + * For {@link #getPhonebookAccessPermission}, {@link #setPhonebookAccessPermission}, + * {@link #getMessageAccessPermission} and {@link #setMessageAccessPermission}. + * @hide + */ + public static final int ACCESS_UNKNOWN = 0; + + /** + * For {@link #getPhonebookAccessPermission}, {@link #setPhonebookAccessPermission}, + * {@link #getMessageAccessPermission} and {@link #setMessageAccessPermission}. + * @hide + */ + public static final int ACCESS_ALLOWED = 1; + + /** + * For {@link #getPhonebookAccessPermission}, {@link #setPhonebookAccessPermission}, + * {@link #getMessageAccessPermission} and {@link #setMessageAccessPermission}. + * @hide + */ + public static final int ACCESS_REJECTED = 2; + /** * No preferrence of physical transport for GATT connections to remote dual-mode devices * @hide @@ -951,39 +972,6 @@ public final class BluetoothDevice implements Parcelable { return null; } - /** - * Get trust state of a remote device. - *

Requires {@link android.Manifest.permission#BLUETOOTH}. - * @hide - */ - public boolean getTrustState() { - //TODO(BT) - /* - try { - return sService.getTrustState(this); - } catch (RemoteException e) { - Log.e(TAG, "", e); - }*/ - return false; - } - - /** - * Set trust state for a remote device. - *

Requires {@link android.Manifest.permission#BLUETOOTH_ADMIN}. - * @param value the trust state value (true or false) - * @hide - */ - public boolean setTrust(boolean value) { - //TODO(BT) - /* - try { - return sService.setTrust(this, value); - } catch (RemoteException e) { - Log.e(TAG, "", e); - }*/ - return false; - } - /** * Returns the supported features (UUIDs) of the remote device. * @@ -1134,6 +1122,82 @@ public final class BluetoothDevice implements Parcelable { return false; } + /** + * Requires {@link android.Manifest.permission#BLUETOOTH}. + * @return Whether the phonebook access is allowed to this device. Can be + * {@link #ACCESS_UNKNOWN}, {@link #ACCESS_ALLOWED} or {@link #ACCESS_REJECTED}. + * @hide + */ + public int getPhonebookAccessPermission() { + if (sService == null) { + return ACCESS_UNKNOWN; + } + try { + return sService.getPhonebookAccessPermission(this); + } catch (RemoteException e) { + Log.e(TAG, "", e); + } + return ACCESS_UNKNOWN; + } + + /** + * Sets whether the phonebook access is allowed to this device. + *

Requires {@link android.Manifest.permission#BLUETOOTH_PRIVILEGED}. + * @param value Can be {@link #ACCESS_UNKNOWN}, {@link #ACCESS_ALLOWED} or + * {@link #ACCESS_REJECTED}. + * @return Whether the value has been successfully set. + * @hide + */ + public boolean setPhonebookAccessPermission(int value) { + if (sService == null) { + return false; + } + try { + return sService.setPhonebookAccessPermission(this, value); + } catch (RemoteException e) { + Log.e(TAG, "", e); + } + return false; + } + + /** + * Requires {@link android.Manifest.permission#BLUETOOTH}. + * @return Whether the message access is allowed to this device. Can be + * {@link #ACCESS_UNKNOWN}, {@link #ACCESS_ALLOWED} or {@link #ACCESS_REJECTED}. + * @hide + */ + public int getMessageAccessPermission() { + if (sService == null) { + return ACCESS_UNKNOWN; + } + try { + return sService.getMessageAccessPermission(this); + } catch (RemoteException e) { + Log.e(TAG, "", e); + } + return ACCESS_UNKNOWN; + } + + /** + * Sets whether the message access is allowed to this device. + *

Requires {@link android.Manifest.permission#BLUETOOTH_PRIVILEGED}. + * @param value Can be {@link #ACCESS_UNKNOWN}, {@link #ACCESS_ALLOWED} or + * {@link #ACCESS_REJECTED}. + * @return Whether the value has been successfully set. + * @hide + */ + public boolean setMessageAccessPermission(int value) { + if (sService == null) { + return false; + } + try { + return sService.setMessageAccessPermission(this, value); + } catch (RemoteException e) { + Log.e(TAG, "", e); + } + return false; + } + /** * Create an RFCOMM {@link BluetoothSocket} ready to start a secure * outgoing connection to this remote device on given channel. @@ -1343,5 +1407,4 @@ public final class BluetoothDevice implements Parcelable { } catch (RemoteException e) {Log.e(TAG, "", e);} return null; } - } diff --git a/core/java/android/bluetooth/IBluetooth.aidl b/core/java/android/bluetooth/IBluetooth.aidl index 19c600cafe93c..cf2a343dc0473 100644 --- a/core/java/android/bluetooth/IBluetooth.aidl +++ b/core/java/android/bluetooth/IBluetooth.aidl @@ -75,6 +75,11 @@ interface IBluetooth passkey); boolean setPairingConfirmation(in BluetoothDevice device, boolean accept); + int getPhonebookAccessPermission(in BluetoothDevice device); + boolean setPhonebookAccessPermission(in BluetoothDevice device, int value); + int getMessageAccessPermission(in BluetoothDevice device); + boolean setMessageAccessPermission(in BluetoothDevice device, int value); + void sendConnectionStateChange(in BluetoothDevice device, int profile, int state, int prevState); void registerCallback(in IBluetoothCallback callback); diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index 7c5233c9d6129..7755e4c99dc27 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -864,7 +864,8 @@ android:description="@string/permdesc_bluetoothAdmin" android:label="@string/permlab_bluetoothAdmin" /> -