Check remote device uuids for phone book access permission

Only give phone book access permission for remote devices that
handle PBAP.
Bug: 18140961

Change-Id: I128f15460b151d7e0a47cd9b4b15dae10ec586c5
This commit is contained in:
Matthew Xie
2014-11-20 21:41:10 -08:00
parent 239d185aa7
commit 7de119ca69
2 changed files with 18 additions and 3 deletions

View File

@@ -17,12 +17,14 @@
package com.android.settings.bluetooth; package com.android.settings.bluetooth;
import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothUuid;
import android.content.BroadcastReceiver; import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.os.Bundle; import android.os.Bundle;
import android.os.ParcelUuid;
import android.text.Editable; import android.text.Editable;
import android.text.Html; import android.text.Html;
import android.text.InputFilter; import android.text.InputFilter;
@@ -111,6 +113,7 @@ public final class BluetoothPairingDialog extends AlertActivity implements
mDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); mDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
mType = intent.getIntExtra(BluetoothDevice.EXTRA_PAIRING_VARIANT, BluetoothDevice.ERROR); mType = intent.getIntExtra(BluetoothDevice.EXTRA_PAIRING_VARIANT, BluetoothDevice.ERROR);
mDevice.fetchUuidsWithSdp();
switch (mType) { switch (mType) {
case BluetoothDevice.PAIRING_VARIANT_PIN: case BluetoothDevice.PAIRING_VARIANT_PIN:
@@ -318,7 +321,7 @@ public final class BluetoothPairingDialog extends AlertActivity implements
} }
} }
private void allowPhonebookAccess() { private void processPhonebookAccess() {
CachedBluetoothDevice cachedDevice = mCachedDeviceManager.findDevice(mDevice); CachedBluetoothDevice cachedDevice = mCachedDeviceManager.findDevice(mDevice);
if (cachedDevice == null) { if (cachedDevice == null) {
cachedDevice = mCachedDeviceManager.addDevice( cachedDevice = mCachedDeviceManager.addDevice(
@@ -326,11 +329,14 @@ public final class BluetoothPairingDialog extends AlertActivity implements
mBluetoothManager.getProfileManager(), mBluetoothManager.getProfileManager(),
mDevice); mDevice);
} }
ParcelUuid[] uuids = mDevice.getUuids();
if (BluetoothUuid.containsAnyUuid(uuids, PbapServerProfile.PBAB_CLIENT_UUIDS)) {
cachedDevice.setPhonebookPermissionChoice(CachedBluetoothDevice.ACCESS_ALLOWED); cachedDevice.setPhonebookPermissionChoice(CachedBluetoothDevice.ACCESS_ALLOWED);
} }
}
private void onPair(String value) { private void onPair(String value) {
allowPhonebookAccess(); processPhonebookAccess();
switch (mType) { switch (mType) {
case BluetoothDevice.PAIRING_VARIANT_PIN: case BluetoothDevice.PAIRING_VARIANT_PIN:

View File

@@ -21,7 +21,9 @@ import android.bluetooth.BluetoothClass;
import android.bluetooth.BluetoothDevice; import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothPbap; import android.bluetooth.BluetoothPbap;
import android.bluetooth.BluetoothProfile; import android.bluetooth.BluetoothProfile;
import android.bluetooth.BluetoothUuid;
import android.content.Context; import android.content.Context;
import android.os.ParcelUuid;
import android.util.Log; import android.util.Log;
import com.android.settings.R; import com.android.settings.R;
@@ -44,6 +46,13 @@ final class PbapServerProfile implements LocalBluetoothProfile {
// Order of this profile in device profiles list // Order of this profile in device profiles list
private static final int ORDINAL = 6; private static final int ORDINAL = 6;
// The UUIDs indicate that remote device might access pbap server
static final ParcelUuid[] PBAB_CLIENT_UUIDS = {
BluetoothUuid.HSP,
BluetoothUuid.Handsfree,
BluetoothUuid.PBAP_PCE
};
// These callbacks run on the main thread. // These callbacks run on the main thread.
private final class PbapServiceListener private final class PbapServiceListener
implements BluetoothPbap.ServiceListener { implements BluetoothPbap.ServiceListener {