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

Commit 71cedf9b authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "AudioService: Add Hearing Aid Switch Control" into pi-dev

parents afda78ad 0de4adc7
Loading
Loading
Loading
Loading
+16 −3
Original line number Diff line number Diff line
@@ -3896,18 +3896,31 @@ public class AudioManager {
    }

     /**
     * Indicate Hearing Aid connection state change.
     * Indicate Hearing Aid connection state change and eventually suppress
     * the {@link AudioManager.ACTION_AUDIO_BECOMING_NOISY} intent.
     * @param device Bluetooth device connected/disconnected
     * @param state new connection state (BluetoothProfile.STATE_xxx)
     * @param musicDevice Default get system volume for the connecting device.
     * (either {@link android.bluetooth.BluetoothProfile.hearingaid} or
     * {@link android.bluetooth.BluetoothProfile.HEARING_AID})
     * @param suppressNoisyIntent if true the
     * {@link AudioManager.ACTION_AUDIO_BECOMING_NOISY} intent will not be sent.
     * @return a delay in ms that the caller should wait before broadcasting
     * BluetoothHearingAid.ACTION_CONNECTION_STATE_CHANGED intent.
     * {@hide}
     */
    public void setHearingAidDeviceConnectionState(BluetoothDevice device, int state) {
    public int setBluetoothHearingAidDeviceConnectionState(
                BluetoothDevice device, int state, boolean suppressNoisyIntent,
                int musicDevice) {
        final IAudioService service = getService();
        int delay = 0;
        try {
            service.setHearingAidDeviceConnectionState(device, state);
            delay = service.setBluetoothHearingAidDeviceConnectionState(device,
                state, suppressNoisyIntent, musicDevice);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
        return delay;
    }

     /**
+3 −2
Original line number Diff line number Diff line
@@ -151,8 +151,6 @@ interface IAudioService {
    void setWiredDeviceConnectionState(int type, int state, String address, String name,
            String caller);

    void setHearingAidDeviceConnectionState(in BluetoothDevice device, int state);

    int setBluetoothA2dpDeviceConnectionState(in BluetoothDevice device, int state, int profile);

    void handleBluetoothA2dpDeviceConfigChange(in BluetoothDevice device);
@@ -210,6 +208,9 @@ interface IAudioService {

    oneway void playerHasOpPlayAudio(in int piid, in boolean hasOpPlayAudio);

    int setBluetoothHearingAidDeviceConnectionState(in BluetoothDevice device,
            int state, boolean suppressNoisyIntent, int musicDevice);

    int setBluetoothA2dpDeviceConnectionStateSuppressNoisyIntent(in BluetoothDevice device,
            int state, int profile, boolean suppressNoisyIntent, int a2dpVolume);

+20 −19
Original line number Diff line number Diff line
@@ -4628,15 +4628,6 @@ public class AudioService extends IAudioService.Stub
        }
    }

    @Override
    public void setHearingAidDeviceConnectionState(BluetoothDevice device, int state)
    {
        Log.i(TAG, "setBluetoothHearingAidDeviceConnectionState");

        setBluetoothHearingAidDeviceConnectionState(
                device, state,  false /* suppressNoisyIntent */, AudioSystem.DEVICE_NONE);
    }

    public int setBluetoothHearingAidDeviceConnectionState(
            BluetoothDevice device, int state, boolean suppressNoisyIntent,
            int musicDevice)
@@ -5837,6 +5828,7 @@ public class AudioService extends IAudioService.Stub
                                   address));
        sendMsg(mAudioHandler, MSG_ACCESSORY_PLUG_MEDIA_UNMUTE, SENDMSG_QUEUE,
                AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP, 0, null, 0);
        setCurrentAudioRouteNameIfPossible(name);
    }

    private void onSendBecomingNoisyIntent() {
@@ -5856,7 +5848,7 @@ public class AudioService extends IAudioService.Stub
        mConnectedDevices.remove(
                makeDeviceListKey(AudioSystem.DEVICE_OUT_BLUETOOTH_A2DP, address));
        // Remove A2DP routes as well
        setCurrentAudioRouteName(null);
        setCurrentAudioRouteNameIfPossible(null);
        if (mDockAddress == address) {
            mDockAddress = null;
        }
@@ -5926,6 +5918,7 @@ public class AudioService extends IAudioService.Stub
        sendMsg(mAudioHandler, MSG_SET_DEVICE_VOLUME, SENDMSG_QUEUE,
                            AudioSystem.DEVICE_OUT_HEARING_AID, 0,
                            mStreamStates[AudioSystem.STREAM_MUSIC], 0);
        setCurrentAudioRouteNameIfPossible(name);
    }

    // must be called synchronized on mConnectedDevices
@@ -5935,7 +5928,7 @@ public class AudioService extends IAudioService.Stub
        mConnectedDevices.remove(
                makeDeviceListKey(AudioSystem.DEVICE_OUT_HEARING_AID, address));
        // Remove Hearing Aid routes as well
        setCurrentAudioRouteName(null);
        setCurrentAudioRouteNameIfPossible(null);
    }

    // must be called synchronized on mConnectedDevices
@@ -5980,7 +5973,6 @@ public class AudioService extends IAudioService.Stub
                } else {
                    makeA2dpDeviceUnavailableNow(address);
                }
                setCurrentAudioRouteName(null);
            } else if (!isConnected && state == BluetoothProfile.STATE_CONNECTED) {
                if (btDevice.isBluetoothDock()) {
                    // this could be a reconnection after a transient disconnection
@@ -6004,7 +5996,6 @@ public class AudioService extends IAudioService.Stub
                }
                makeA2dpDeviceAvailable(address, btDevice.getName(),
                        "onSetA2dpSinkConnectionState");
                setCurrentAudioRouteName(btDevice.getAliasName());
            }
        }
    }
@@ -6056,24 +6047,34 @@ public class AudioService extends IAudioService.Stub

            if (isConnected && state != BluetoothProfile.STATE_CONNECTED) {
                makeHearingAidDeviceUnavailable(address);
                setCurrentAudioRouteName(null);
            } else if (!isConnected && state == BluetoothProfile.STATE_CONNECTED) {
                makeHearingAidDeviceAvailable(address, btDevice.getName(),
                        "onSetHearingAidConnectionState");
                setCurrentAudioRouteName(btDevice.getAliasName());
            }
        }
    }

    private void setCurrentAudioRouteName(String name){
    private void setCurrentAudioRouteNameIfPossible(String name) {
        synchronized (mCurAudioRoutes) {
            if (!TextUtils.equals(mCurAudioRoutes.bluetoothName, name)) {
                if (name != null || !isCurrentDeviceConnected()) {
                    mCurAudioRoutes.bluetoothName = name;
                    sendMsg(mAudioHandler, MSG_REPORT_NEW_ROUTES,
                            SENDMSG_NOOP, 0, 0, null, 0);
                }
            }
        }
    }

    private boolean isCurrentDeviceConnected() {
        for (int i = 0; i < mConnectedDevices.size(); i++) {
            DeviceListSpec deviceSpec = mConnectedDevices.valueAt(i);
            if (TextUtils.equals(deviceSpec.mDeviceName, mCurAudioRoutes.bluetoothName)) {
                return true;
            }
        }
        return false;
    }

    private void onBluetoothA2dpDeviceConfigChange(BluetoothDevice btDevice)
    {