Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ae88e2d1 authored by Android (Google) Code Review's avatar Android (Google) Code Review
Browse files

Merge change I38227501 into eclair

* changes:
  Add API to get Active Sinks.
parents 9ae9763b b16c4f7d
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -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_
+1 −0
Original line number Diff line number Diff line
@@ -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);
+10 −0
Original line number Diff line number Diff line
@@ -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);
+4 −2
Original line number Diff line number Diff line
@@ -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) {