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

Commit 8649923e authored by Jean-Michel Trivi's avatar Jean-Michel Trivi Committed by Android (Google) Code Review
Browse files

Merge "AudioService: handle BT profile disconnections" into tm-qpr-dev

parents a490e750 a1e0db85
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -1523,6 +1523,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
                case MSG_I_BT_SERVICE_DISCONNECTED_PROFILE:
                    if (msg.arg1 != BluetoothProfile.HEADSET) {
                        synchronized (mDeviceStateLock) {
                            mBtHelper.onBtProfileDisconnected(msg.arg1);
                            mDeviceInventory.onBtProfileDisconnected(msg.arg1);
                        }
                    } else {
+63 −9
Original line number Diff line number Diff line
@@ -279,7 +279,11 @@ public class BtHelper {
        }
        AudioService.sVolumeLogger.log(new AudioServiceEvents.VolumeEvent(
                AudioServiceEvents.VolumeEvent.VOL_SET_AVRCP_VOL, index));
        try {
            mA2dp.setAvrcpAbsoluteVolume(index);
        } catch (Exception e) {
            Log.e(TAG, "Exception while changing abs volume", e);
        }
    }

    /*package*/ synchronized @AudioSystem.AudioFormatNativeEnumForBtCodec int getA2dpCodec(
@@ -287,7 +291,12 @@ public class BtHelper {
        if (mA2dp == null) {
            return AudioSystem.AUDIO_FORMAT_DEFAULT;
        }
        final BluetoothCodecStatus btCodecStatus = mA2dp.getCodecStatus(device);
        BluetoothCodecStatus btCodecStatus = null;
        try {
            btCodecStatus = mA2dp.getCodecStatus(device);
        } catch (Exception e) {
            Log.e(TAG, "Exception while getting status of " + device, e);
        }
        if (btCodecStatus == null) {
            return AudioSystem.AUDIO_FORMAT_DEFAULT;
        }
@@ -421,7 +430,11 @@ public class BtHelper {
        }
        AudioService.sVolumeLogger.log(new AudioServiceEvents.VolumeEvent(
                AudioServiceEvents.VolumeEvent.VOL_SET_LE_AUDIO_VOL, index, maxIndex));
        try {
            mLeAudio.setVolume(volume);
        } catch (Exception e) {
            Log.e(TAG, "Exception while setting LE volume", e);
        }
    }

    /*package*/ synchronized void setHearingAidVolume(int index, int streamType,
@@ -447,7 +460,11 @@ public class BtHelper {
            AudioService.sVolumeLogger.log(new AudioServiceEvents.VolumeEvent(
                    AudioServiceEvents.VolumeEvent.VOL_SET_HEARING_AID_VOL, index, gainDB));
        }
        try {
            mHearingAid.setVolume(gainDB);
        } catch (Exception e) {
            Log.i(TAG, "Exception while setting hearing aid volume", e);
        }
    }

    /*package*/ synchronized void onBroadcastScoConnectionState(int state) {
@@ -472,7 +489,7 @@ public class BtHelper {
    }

    // @GuardedBy("AudioDeviceBroker.mSetModeLock")
    @GuardedBy("AudioDeviceBroker.mDeviceStateLock")
    //@GuardedBy("AudioDeviceBroker.mDeviceStateLock")
    /*package*/ synchronized void resetBluetoothSco() {
        mScoAudioState = SCO_STATE_INACTIVE;
        broadcastScoConnectionState(AudioManager.SCO_AUDIO_STATE_DISCONNECTED);
@@ -487,6 +504,35 @@ public class BtHelper {
        mBluetoothHeadset = null;
    }

    //@GuardedBy("AudioDeviceBroker.mDeviceStateLock")
    /*package*/ synchronized void onBtProfileDisconnected(int profile) {
        switch (profile) {
            case BluetoothProfile.A2DP:
                mA2dp = null;
                break;
            case BluetoothProfile.HEARING_AID:
                mHearingAid = null;
                break;
            case BluetoothProfile.LE_AUDIO:
                mLeAudio = null;
                break;

            case BluetoothProfile.A2DP_SINK:
            case BluetoothProfile.LE_AUDIO_BROADCAST:
                // shouldn't be received here as profile doesn't involve BtHelper
                Log.e(TAG, "onBtProfileDisconnected: Not a profile handled by BtHelper "
                        + BluetoothProfile.getProfileName(profile));
                break;

            default:
                // Not a valid profile to disconnect
                Log.e(TAG, "onBtProfileDisconnected: Not a valid profile to disconnect "
                        + BluetoothProfile.getProfileName(profile));
                break;
        }
    }

    @GuardedBy("AudioDeviceBroker.mDeviceStateLock")
    /*package*/ synchronized void onBtProfileConnected(int profile, BluetoothProfile proxy) {
        if (profile == BluetoothProfile.HEADSET) {
            onHeadsetProfileConnected((BluetoothHeadset) proxy);
@@ -518,7 +564,7 @@ public class BtHelper {
    }

    // @GuardedBy("AudioDeviceBroker.mSetModeLock")
    @GuardedBy("AudioDeviceBroker.mDeviceStateLock")
    //@GuardedBy("AudioDeviceBroker.mDeviceStateLock")
    /*package*/ synchronized void onHeadsetProfileConnected(BluetoothHeadset headset) {
        // Discard timeout message
        mDeviceBroker.handleCancelFailureToConnectToBtHeadsetService();
@@ -672,7 +718,6 @@ public class BtHelper {
                public void onServiceConnected(int profile, BluetoothProfile proxy) {
                    switch(profile) {
                        case BluetoothProfile.A2DP:
                        case BluetoothProfile.A2DP_SINK:
                        case BluetoothProfile.HEADSET:
                        case BluetoothProfile.HEARING_AID:
                        case BluetoothProfile.LE_AUDIO:
@@ -682,6 +727,10 @@ public class BtHelper {
                            mDeviceBroker.postBtProfileConnected(profile, proxy);
                            break;

                        case BluetoothProfile.A2DP_SINK:
                            // no A2DP sink functionality handled by BtHelper
                        case BluetoothProfile.LE_AUDIO_BROADCAST:
                            // no broadcast functionality handled by BtHelper
                        default:
                            break;
                    }
@@ -690,14 +739,19 @@ public class BtHelper {

                    switch (profile) {
                        case BluetoothProfile.A2DP:
                        case BluetoothProfile.A2DP_SINK:
                        case BluetoothProfile.HEADSET:
                        case BluetoothProfile.HEARING_AID:
                        case BluetoothProfile.LE_AUDIO:
                        case BluetoothProfile.LE_AUDIO_BROADCAST:
                            AudioService.sDeviceLogger.log(new AudioEventLogger.StringEvent(
                                    "BT profile service: disconnecting "
                                        + BluetoothProfile.getProfileName(profile) + " profile"));
                            mDeviceBroker.postBtProfileDisconnected(profile);
                            break;

                        case BluetoothProfile.A2DP_SINK:
                            // no A2DP sink functionality handled by BtHelper
                        case BluetoothProfile.LE_AUDIO_BROADCAST:
                            // no broadcast functionality handled by BtHelper
                        default:
                            break;
                    }