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

Commit 6c0140b3 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Add Spatial audio settings for LE Audio devices" into tm-qpr-dev am: f4d0d420

parents 8828d531 f4d0d420
Loading
Loading
Loading
Loading
+52 −5
Original line number Diff line number Diff line
@@ -53,6 +53,8 @@ public class BluetoothDetailsSpatialAudioController extends BluetoothDetailsCont
    @VisibleForTesting
    AudioDeviceAttributes mAudioDevice;

    private boolean mIsAvailable;

    public BluetoothDetailsSpatialAudioController(
            Context context,
            PreferenceFragmentCompat fragment,
@@ -61,16 +63,13 @@ public class BluetoothDetailsSpatialAudioController extends BluetoothDetailsCont
        super(context, fragment, device, lifecycle);
        AudioManager audioManager = context.getSystemService(AudioManager.class);
        mSpatializer = audioManager.getSpatializer();
        mAudioDevice = new AudioDeviceAttributes(
                AudioDeviceAttributes.ROLE_OUTPUT,
                AudioDeviceInfo.TYPE_BLUETOOTH_A2DP,
                mCachedDevice.getAddress());
        getAvailableDevice();

    }

    @Override
    public boolean isAvailable() {
        return mSpatializer.isAvailableForDevice(mAudioDevice) ? true : false;
        return mIsAvailable;
    }

    @Override
@@ -152,4 +151,52 @@ public class BluetoothDetailsSpatialAudioController extends BluetoothDetailsCont
        pref.setOnPreferenceClickListener(this);
        return pref;
    }

    private void getAvailableDevice() {
        AudioDeviceAttributes a2dpDevice = new AudioDeviceAttributes(
                AudioDeviceAttributes.ROLE_OUTPUT,
                AudioDeviceInfo.TYPE_BLUETOOTH_A2DP,
                mCachedDevice.getAddress());
        AudioDeviceAttributes bleHeadsetDevice = new AudioDeviceAttributes(
                AudioDeviceAttributes.ROLE_OUTPUT,
                AudioDeviceInfo.TYPE_BLE_HEADSET,
                mCachedDevice.getAddress());
        AudioDeviceAttributes bleSpeakerDevice = new AudioDeviceAttributes(
                AudioDeviceAttributes.ROLE_OUTPUT,
                AudioDeviceInfo.TYPE_BLE_SPEAKER,
                mCachedDevice.getAddress());
        AudioDeviceAttributes bleBroadcastDevice = new AudioDeviceAttributes(
                AudioDeviceAttributes.ROLE_OUTPUT,
                AudioDeviceInfo.TYPE_BLE_BROADCAST,
                mCachedDevice.getAddress());
        AudioDeviceAttributes hearingAidDevice = new AudioDeviceAttributes(
                AudioDeviceAttributes.ROLE_OUTPUT,
                AudioDeviceInfo.TYPE_HEARING_AID,
                mCachedDevice.getAddress());

        mIsAvailable = true;
        if (mSpatializer.isAvailableForDevice(bleHeadsetDevice)) {
            mAudioDevice = bleHeadsetDevice;
        } else if (mSpatializer.isAvailableForDevice(bleSpeakerDevice)) {
            mAudioDevice = bleSpeakerDevice;
        } else if (mSpatializer.isAvailableForDevice(bleBroadcastDevice)) {
            mAudioDevice = bleBroadcastDevice;
        } else if (mSpatializer.isAvailableForDevice(a2dpDevice)) {
            mAudioDevice = a2dpDevice;
        } else {
            mIsAvailable = mSpatializer.isAvailableForDevice(hearingAidDevice);
            mAudioDevice = hearingAidDevice;
        }

        Log.d(TAG, "getAvailableDevice() device : "
                + mCachedDevice.getDevice().getAnonymizedAddress()
                + ", type : " + mAudioDevice.getType()
                + ", is available : " + mIsAvailable);
    }

    @VisibleForTesting
    void setAvailableDevice(AudioDeviceAttributes audioDevice) {
        mAudioDevice = audioDevice;
        mIsAvailable = mSpatializer.isAvailableForDevice(audioDevice);
    }
}
+80 −4
Original line number Diff line number Diff line
@@ -22,7 +22,9 @@ import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.bluetooth.BluetoothDevice;
import android.media.AudioDeviceAttributes;
import android.media.AudioDeviceInfo;
import android.media.AudioManager;
import android.media.Spatializer;

@@ -57,6 +59,8 @@ public class BluetoothDetailsSpatialAudioControllerTest extends BluetoothDetails
    private Lifecycle mSpatialAudioLifecycle;
    @Mock
    private PreferenceCategory mProfilesContainer;
    @Mock
    private BluetoothDevice mBluetoothDevice;

    private BluetoothDetailsSpatialAudioController mController;
    private SwitchPreference mSpatialAudioPref;
@@ -70,6 +74,8 @@ public class BluetoothDetailsSpatialAudioControllerTest extends BluetoothDetails
        when(mContext.getSystemService(AudioManager.class)).thenReturn(mAudioManager);
        when(mAudioManager.getSpatializer()).thenReturn(mSpatializer);
        when(mCachedDevice.getAddress()).thenReturn(MAC_ADDRESS);
        when(mCachedDevice.getDevice()).thenReturn(mBluetoothDevice);
        when(mBluetoothDevice.getAnonymizedAddress()).thenReturn(MAC_ADDRESS);

        mController = new BluetoothDetailsSpatialAudioController(mContext, mFragment,
                mCachedDevice, mSpatialAudioLifecycle);
@@ -83,15 +89,85 @@ public class BluetoothDetailsSpatialAudioControllerTest extends BluetoothDetails
    }

    @Test
    public void isAvailable_spatialAudioIsAvailable_returnsTrue() {
        when(mSpatializer.isAvailableForDevice(mController.mAudioDevice)).thenReturn(true);
    public void isAvailable_spatialAudioSupportA2dpDevice_returnsTrue() {
        AudioDeviceAttributes a2dpDevice = new AudioDeviceAttributes(
                AudioDeviceAttributes.ROLE_OUTPUT,
                AudioDeviceInfo.TYPE_BLUETOOTH_A2DP,
                MAC_ADDRESS);
        when(mSpatializer.isAvailableForDevice(a2dpDevice)).thenReturn(true);

        mController.setAvailableDevice(a2dpDevice);

        assertThat(mController.isAvailable()).isTrue();
        assertThat(mController.mAudioDevice.getType())
                .isEqualTo(AudioDeviceInfo.TYPE_BLUETOOTH_A2DP);
    }

    @Test
    public void isAvailable_spatialAudioSupportBleHeadsetDevice_returnsTrue() {
        AudioDeviceAttributes bleHeadsetDevice = new AudioDeviceAttributes(
                AudioDeviceAttributes.ROLE_OUTPUT,
                AudioDeviceInfo.TYPE_BLE_HEADSET,
                MAC_ADDRESS);
        when(mSpatializer.isAvailableForDevice(bleHeadsetDevice)).thenReturn(true);

        mController.setAvailableDevice(bleHeadsetDevice);

        assertThat(mController.isAvailable()).isTrue();
        assertThat(mController.mAudioDevice.getType())
                .isEqualTo(AudioDeviceInfo.TYPE_BLE_HEADSET);
    }

    @Test
    public void isAvailable_spatialAudioSupportBleSpeakerDevice_returnsTrue() {
        AudioDeviceAttributes bleSpeakerDevice = new AudioDeviceAttributes(
                AudioDeviceAttributes.ROLE_OUTPUT,
                AudioDeviceInfo.TYPE_BLE_SPEAKER,
                MAC_ADDRESS);
        when(mSpatializer.isAvailableForDevice(bleSpeakerDevice)).thenReturn(true);

        mController.setAvailableDevice(bleSpeakerDevice);

        assertThat(mController.isAvailable()).isTrue();
        assertThat(mController.mAudioDevice.getType())
                .isEqualTo(AudioDeviceInfo.TYPE_BLE_SPEAKER);
    }

    @Test
    public void isAvailable_spatialAudioSupportBleBroadcastDevice_returnsTrue() {
        AudioDeviceAttributes bleBroadcastDevice = new AudioDeviceAttributes(
                AudioDeviceAttributes.ROLE_OUTPUT,
                AudioDeviceInfo.TYPE_BLE_BROADCAST,
                MAC_ADDRESS);
        when(mSpatializer.isAvailableForDevice(bleBroadcastDevice)).thenReturn(true);

        mController.setAvailableDevice(bleBroadcastDevice);

        assertThat(mController.isAvailable()).isTrue();
        assertThat(mController.mAudioDevice.getType())
                .isEqualTo(AudioDeviceInfo.TYPE_BLE_BROADCAST);
    }

    @Test
    public void isAvailable_spatialAudioSupportHearingAidDevice_returnsTrue() {
        AudioDeviceAttributes hearingAidDevice = new AudioDeviceAttributes(
                AudioDeviceAttributes.ROLE_OUTPUT,
                AudioDeviceInfo.TYPE_HEARING_AID,
                MAC_ADDRESS);
        when(mSpatializer.isAvailableForDevice(hearingAidDevice)).thenReturn(true);

        mController.setAvailableDevice(hearingAidDevice);

        assertThat(mController.isAvailable()).isTrue();
        assertThat(mController.mAudioDevice.getType())
                .isEqualTo(AudioDeviceInfo.TYPE_HEARING_AID);
    }

    @Test
    public void isAvailable_spatialAudioIsNotAvailable_returnsFalse() {
        when(mSpatializer.isAvailableForDevice(mController.mAudioDevice)).thenReturn(false);
    public void isAvailable_spatialAudioNotSupported_returnsFalse() {
        assertThat(mController.isAvailable()).isFalse();
        assertThat(mController.mAudioDevice.getType())
                .isEqualTo(AudioDeviceInfo.TYPE_HEARING_AID);
    }

    @Test