Merge change I38227501 into eclair

* changes:
  Add API to get Active Sinks.
This commit is contained in:
Android (Google) Code Review
2009-12-07 15:49:50 -08:00
4 changed files with 31 additions and 2 deletions

View File

@ -199,6 +199,22 @@ public final class BluetoothA2dp {
}
}
/** Check if any A2DP sink is in Non Disconnected state
* i.e playing, connected, connecting, disconnecting.
* @return a unmodifiable set of connected A2DP sinks, or null on error.
* @hide
*/
public Set<BluetoothDevice> getNonDisconnectedSinks() {
if (DBG) log("getNonDisconnectedSinks()");
try {
return Collections.unmodifiableSet(
new HashSet<BluetoothDevice>(Arrays.asList(mService.getNonDisconnectedSinks())));
} catch (RemoteException e) {
Log.e(TAG, "", e);
return null;
}
}
/** Get the state of an A2DP sink
* @param device Remote BT device.
* @return State code, one of STATE_

View File

@ -29,6 +29,7 @@ interface IBluetoothA2dp {
boolean suspendSink(in BluetoothDevice device);
boolean resumeSink(in BluetoothDevice device);
BluetoothDevice[] getConnectedSinks(); // change to Set<> once AIDL supports
BluetoothDevice[] getNonDisconnectedSinks(); // change to Set<> once AIDL supports
int getSinkState(in BluetoothDevice device);
boolean setSinkPriority(in BluetoothDevice device, int priority);
int getSinkPriority(in BluetoothDevice device);

View File

@ -376,6 +376,16 @@ public class BluetoothA2dpService extends IBluetoothA2dp.Stub {
return sinks.toArray(new BluetoothDevice[sinks.size()]);
}
public synchronized BluetoothDevice[] getNonDisconnectedSinks() {
mContext.enforceCallingOrSelfPermission(BLUETOOTH_PERM, "Need BLUETOOTH permission");
Set<BluetoothDevice> sinks = lookupSinksMatchingStates(
new int[] {BluetoothA2dp.STATE_CONNECTED,
BluetoothA2dp.STATE_PLAYING,
BluetoothA2dp.STATE_CONNECTING,
BluetoothA2dp.STATE_DISCONNECTING});
return sinks.toArray(new BluetoothDevice[sinks.size()]);
}
public synchronized int getSinkState(BluetoothDevice device) {
mContext.enforceCallingOrSelfPermission(BLUETOOTH_PERM, "Need BLUETOOTH permission");
Integer state = mAudioDevices.get(device);

View File

@ -546,12 +546,14 @@ class BluetoothEventLoop {
boolean authorized = false;
ParcelUuid uuid = ParcelUuid.fromString(deviceUuid);
BluetoothA2dp a2dp = new BluetoothA2dp(mContext);
// Bluez sends the UUID of the local service being accessed, _not_ the
// remote service
if (mBluetoothService.isEnabled() &&
(BluetoothUuid.isAudioSource(uuid) || BluetoothUuid.isAvrcpTarget(uuid)
|| BluetoothUuid.isAdvAudioDist(uuid))) {
BluetoothA2dp a2dp = new BluetoothA2dp(mContext);
|| BluetoothUuid.isAdvAudioDist(uuid)) &&
(a2dp.getNonDisconnectedSinks().size() == 0)) {
BluetoothDevice device = mAdapter.getRemoteDevice(address);
authorized = a2dp.getSinkPriority(device) > BluetoothA2dp.PRIORITY_OFF;
if (authorized) {