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

Commit edc200db authored by Eric Laurent's avatar Eric Laurent
Browse files

AudioService: fix device spatial audio state persistence

Do not synchronize the spatial audio states (enabled, headtracking...) of
devices with same address but from profiles that do not have the same
spatial audio behavior (e.g. A2DP and HEADSET).

Test: test spatial audio state persistence.
Change-Id: I759a8ba9f34c38db94cadcfa19b499d7d2600a94
parent 5946e673
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -2820,6 +2820,10 @@ public class AudioDeviceBroker {
        return mDeviceInventory.isBluetoothAudioDeviceCategoryFixed(address);
    }

    /*package*/ boolean isSADevice(AdiDeviceState deviceState) {
        return mAudioService.isSADevice(deviceState);
    }

    //------------------------------------------------
    // for testing purposes only
    void clearDeviceInventory() {
+17 −10
Original line number Diff line number Diff line
@@ -307,9 +307,12 @@ public class AudioDeviceInventory {
                            && di.mPeerDeviceAddress.equals(ads2.getDeviceAddress()))) {
                        continue;
                    }
                    if (mDeviceBroker.isSADevice(updatedDevice)
                            == mDeviceBroker.isSADevice(ads2)) {
                        ads2.setHasHeadTracker(updatedDevice.hasHeadTracker());
                        ads2.setHeadTrackerEnabled(updatedDevice.isHeadTrackerEnabled());
                        ads2.setSAEnabled(updatedDevice.isSAEnabled());
                    }
                    ads2.setAudioDeviceCategory(updatedDevice.getAudioDeviceCategory());

                    mDeviceBroker.postUpdatedAdiDeviceState(ads2);
@@ -325,9 +328,12 @@ public class AudioDeviceInventory {
                            && di.mDeviceAddress.equals(ads2.getDeviceAddress()))) {
                        continue;
                    }
                    if (mDeviceBroker.isSADevice(updatedDevice)
                            == mDeviceBroker.isSADevice(ads2)) {
                        ads2.setHasHeadTracker(updatedDevice.hasHeadTracker());
                        ads2.setHeadTrackerEnabled(updatedDevice.isHeadTrackerEnabled());
                        ads2.setSAEnabled(updatedDevice.isSAEnabled());
                    }
                    ads2.setAudioDeviceCategory(updatedDevice.getAudioDeviceCategory());

                    mDeviceBroker.postUpdatedAdiDeviceState(ads2);
@@ -348,10 +354,11 @@ public class AudioDeviceInventory {
                    || !updatedDevice.getDeviceAddress().equals(ads.getDeviceAddress())) {
                continue;
            }

            if (mDeviceBroker.isSADevice(updatedDevice) == mDeviceBroker.isSADevice(ads)) {
                ads.setHasHeadTracker(updatedDevice.hasHeadTracker());
                ads.setHeadTrackerEnabled(updatedDevice.isHeadTrackerEnabled());
                ads.setSAEnabled(updatedDevice.isSAEnabled());
            }
            ads.setAudioDeviceCategory(updatedDevice.getAudioDeviceCategory());

            mDeviceBroker.postUpdatedAdiDeviceState(ads);
+5 −1
Original line number Diff line number Diff line
@@ -7855,7 +7855,7 @@ public class AudioService extends IAudioService.Stub
        sDeviceLogger.enqueue(new EventLogger.StringEvent("BlutoothActiveDeviceChanged for "
                + BluetoothProfile.getProfileName(profile) + ", device update " + previousDevice
                + " -> " + newDevice));
                + " -> " + newDevice).printLog(TAG));
        AudioDeviceBroker.BtDeviceChangedData data =
                new AudioDeviceBroker.BtDeviceChangedData(newDevice, previousDevice, info,
                        "AudioService");
@@ -10638,6 +10638,10 @@ public class AudioService extends IAudioService.Stub
        mSpatializerHelper.setFeatureEnabled(mHasSpatializerEffect);
    }
    /*package*/ boolean isSADevice(AdiDeviceState deviceState) {
        return mSpatializerHelper.isSADevice(deviceState);
    }
    private boolean isBluetoothPrividged() {
        if (!bluetoothMacAddressAnonymization()) {
            return true;
+1 −1
Original line number Diff line number Diff line
@@ -813,7 +813,7 @@ public class SpatializerHelper {
        return false;
    }

    private boolean isSADevice(AdiDeviceState deviceState) {
    /*package*/ boolean isSADevice(AdiDeviceState deviceState) {
        return deviceState.getDeviceType() == getCanonicalDeviceType(deviceState.getDeviceType(),
                deviceState.getInternalDeviceType()) && isDeviceCompatibleWithSpatializationModes(
                deviceState.getAudioDeviceAttributes());