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

Commit c1fd0655 authored by Ugo Yu's avatar Ugo Yu Committed by android-build-merger
Browse files

Merge "Remove SCO devices if Bluetooth process is dead" into pi-dev

am: 1b43af09

Change-Id: I2e4f230fd80fbcb4d7db943ba7e712e5a905409a
parents da87a31e 1b43af09
Loading
Loading
Loading
Loading
+15 −6
Original line number Diff line number Diff line
@@ -3722,26 +3722,35 @@ public class AudioService extends IAudioService.Stub
        }
        String address = btDevice.getAddress();
        BluetoothClass btClass = btDevice.getBluetoothClass();
        int outDevice = AudioSystem.DEVICE_OUT_BLUETOOTH_SCO;
        int inDevice = AudioSystem.DEVICE_IN_BLUETOOTH_SCO_HEADSET;
        int[] outDeviceTypes = {
            AudioSystem.DEVICE_OUT_BLUETOOTH_SCO,
            AudioSystem.DEVICE_OUT_BLUETOOTH_SCO_HEADSET,
            AudioSystem.DEVICE_OUT_BLUETOOTH_SCO_CARKIT
        };
        if (btClass != null) {
            switch (btClass.getDeviceClass()) {
                case BluetoothClass.Device.AUDIO_VIDEO_WEARABLE_HEADSET:
                case BluetoothClass.Device.AUDIO_VIDEO_HANDSFREE:
                    outDevice = AudioSystem.DEVICE_OUT_BLUETOOTH_SCO_HEADSET;
                    outDeviceTypes = new int[] { AudioSystem.DEVICE_OUT_BLUETOOTH_SCO_HEADSET };
                    break;
                case BluetoothClass.Device.AUDIO_VIDEO_CAR_AUDIO:
                    outDevice = AudioSystem.DEVICE_OUT_BLUETOOTH_SCO_CARKIT;
                    outDeviceTypes = new int[] { AudioSystem.DEVICE_OUT_BLUETOOTH_SCO_CARKIT };
                    break;
            }
        }

        if (!BluetoothAdapter.checkBluetoothAddress(address)) {
            address = "";
        }

        String btDeviceName =  btDevice.getName();
        boolean result = handleDeviceConnection(isActive, outDevice, address, btDeviceName);
        boolean result = false;
        if (isActive) {
            result |= handleDeviceConnection(isActive, outDeviceTypes[0], address, btDeviceName);
        } else {
            for (int outDeviceType : outDeviceTypes) {
                result |= handleDeviceConnection(isActive, outDeviceType, address, btDeviceName);
            }
        }
        // handleDeviceConnection() && result to make sure the method get executed
        result = handleDeviceConnection(isActive, inDevice, address, btDeviceName) && result;
        return result;