Merge "Disable the spatializer options for device categories" into main

This commit is contained in:
Vlad Popa
2023-08-31 20:48:06 +00:00
committed by Android (Google) Code Review
3 changed files with 81 additions and 106 deletions

View File

@@ -109,6 +109,7 @@ public class BluetoothDetailsAudioDeviceTypeController extends BluetoothDetailsC
mAudioManager.setBluetoothAudioDeviceCategory(mCachedDevice.getAddress(), mAudioManager.setBluetoothAudioDeviceCategory(mCachedDevice.getAddress(),
mCachedDevice.getDevice().getType() == DEVICE_TYPE_LE, mCachedDevice.getDevice().getType() == DEVICE_TYPE_LE,
Integer.parseInt(value)); Integer.parseInt(value));
mCachedDevice.onAudioDeviceCategoryChanged();
} }
} }
return true; return true;

View File

@@ -53,9 +53,7 @@ public class BluetoothDetailsSpatialAudioController extends BluetoothDetailsCont
@VisibleForTesting @VisibleForTesting
PreferenceCategory mProfilesContainer; PreferenceCategory mProfilesContainer;
@VisibleForTesting @VisibleForTesting
AudioDeviceAttributes mAudioDevice; AudioDeviceAttributes mAudioDevice = null;
private boolean mIsAvailable;
public BluetoothDetailsSpatialAudioController( public BluetoothDetailsSpatialAudioController(
Context context, Context context,
@@ -65,13 +63,11 @@ public class BluetoothDetailsSpatialAudioController extends BluetoothDetailsCont
super(context, fragment, device, lifecycle); super(context, fragment, device, lifecycle);
AudioManager audioManager = context.getSystemService(AudioManager.class); AudioManager audioManager = context.getSystemService(AudioManager.class);
mSpatializer = audioManager.getSpatializer(); mSpatializer = audioManager.getSpatializer();
getAvailableDevice();
} }
@Override @Override
public boolean isAvailable() { public boolean isAvailable() {
return mIsAvailable; return mSpatializer.getImmersiveAudioLevel() != SPATIALIZER_IMMERSIVE_LEVEL_NONE;
} }
@Override @Override
@@ -79,15 +75,11 @@ public class BluetoothDetailsSpatialAudioController extends BluetoothDetailsCont
SwitchPreference switchPreference = (SwitchPreference) preference; SwitchPreference switchPreference = (SwitchPreference) preference;
String key = switchPreference.getKey(); String key = switchPreference.getKey();
if (TextUtils.equals(key, KEY_SPATIAL_AUDIO)) { if (TextUtils.equals(key, KEY_SPATIAL_AUDIO)) {
if (switchPreference.isChecked()) { updateSpatializerEnabled(switchPreference.isChecked());
mSpatializer.addCompatibleAudioDevice(mAudioDevice); refreshSpatialAudioEnabled(switchPreference);
} else {
mSpatializer.removeCompatibleAudioDevice(mAudioDevice);
}
refresh();
return true; return true;
} else if (TextUtils.equals(key, KEY_HEAD_TRACKING)) { } else if (TextUtils.equals(key, KEY_HEAD_TRACKING)) {
mSpatializer.setHeadTrackerEnabled(switchPreference.isChecked(), mAudioDevice); updateSpatializerHeadTracking(switchPreference.isChecked());
return true; return true;
} else { } else {
Log.w(TAG, "invalid key name."); Log.w(TAG, "invalid key name.");
@@ -95,6 +87,26 @@ public class BluetoothDetailsSpatialAudioController extends BluetoothDetailsCont
} }
} }
private void updateSpatializerEnabled(boolean enabled) {
if (mAudioDevice == null) {
Log.w(TAG, "cannot update spatializer enabled for null audio device.");
return;
}
if (enabled) {
mSpatializer.addCompatibleAudioDevice(mAudioDevice);
} else {
mSpatializer.removeCompatibleAudioDevice(mAudioDevice);
}
}
private void updateSpatializerHeadTracking(boolean enabled) {
if (mAudioDevice == null) {
Log.w(TAG, "cannot update spatializer head tracking for null audio device.");
return;
}
mSpatializer.setHeadTrackerEnabled(enabled, mAudioDevice);
}
@Override @Override
public String getPreferenceKey() { public String getPreferenceKey() {
return KEY_SPATIAL_AUDIO_GROUP; return KEY_SPATIAL_AUDIO_GROUP;
@@ -109,15 +121,30 @@ public class BluetoothDetailsSpatialAudioController extends BluetoothDetailsCont
@Override @Override
protected void refresh() { protected void refresh() {
if (mAudioDevice == null) { if (mAudioDevice == null) {
return; getAvailableDevice();
} }
SwitchPreference spatialAudioPref = mProfilesContainer.findPreference(KEY_SPATIAL_AUDIO); SwitchPreference spatialAudioPref = mProfilesContainer.findPreference(KEY_SPATIAL_AUDIO);
if (spatialAudioPref == null) { if (spatialAudioPref == null && mAudioDevice != null) {
spatialAudioPref = createSpatialAudioPreference(mProfilesContainer.getContext()); spatialAudioPref = createSpatialAudioPreference(mProfilesContainer.getContext());
mProfilesContainer.addPreference(spatialAudioPref); mProfilesContainer.addPreference(spatialAudioPref);
} else if (mAudioDevice == null || !mSpatializer.isAvailableForDevice(mAudioDevice)) {
if (spatialAudioPref != null) {
mProfilesContainer.removePreference(spatialAudioPref);
}
final SwitchPreference headTrackingPref =
mProfilesContainer.findPreference(KEY_HEAD_TRACKING);
if (headTrackingPref != null) {
mProfilesContainer.removePreference(headTrackingPref);
}
mAudioDevice = null;
return;
} }
refreshSpatialAudioEnabled(spatialAudioPref);
}
private void refreshSpatialAudioEnabled(SwitchPreference spatialAudioPref) {
boolean isSpatialAudioOn = mSpatializer.getCompatibleAudioDevices().contains(mAudioDevice); boolean isSpatialAudioOn = mSpatializer.getCompatibleAudioDevices().contains(mAudioDevice);
Log.d(TAG, "refresh() isSpatialAudioOn : " + isSpatialAudioOn); Log.d(TAG, "refresh() isSpatialAudioOn : " + isSpatialAudioOn);
spatialAudioPref.setChecked(isSpatialAudioOn); spatialAudioPref.setChecked(isSpatialAudioOn);
@@ -127,9 +154,13 @@ public class BluetoothDetailsSpatialAudioController extends BluetoothDetailsCont
headTrackingPref = createHeadTrackingPreference(mProfilesContainer.getContext()); headTrackingPref = createHeadTrackingPreference(mProfilesContainer.getContext());
mProfilesContainer.addPreference(headTrackingPref); mProfilesContainer.addPreference(headTrackingPref);
} }
refreshHeadTracking(spatialAudioPref, headTrackingPref);
}
private void refreshHeadTracking(SwitchPreference spatialAudioPref,
SwitchPreference headTrackingPref) {
boolean isHeadTrackingAvailable = boolean isHeadTrackingAvailable =
isSpatialAudioOn && mSpatializer.hasHeadTracker(mAudioDevice); spatialAudioPref.isChecked() && mSpatializer.hasHeadTracker(mAudioDevice);
Log.d(TAG, "refresh() has head tracker : " + mSpatializer.hasHeadTracker(mAudioDevice)); Log.d(TAG, "refresh() has head tracker : " + mSpatializer.hasHeadTracker(mAudioDevice));
headTrackingPref.setVisible(isHeadTrackingAvailable); headTrackingPref.setVisible(isHeadTrackingAvailable);
if (isHeadTrackingAvailable) { if (isHeadTrackingAvailable) {
@@ -158,14 +189,6 @@ public class BluetoothDetailsSpatialAudioController extends BluetoothDetailsCont
} }
private void getAvailableDevice() { private void getAvailableDevice() {
if (mSpatializer.getImmersiveAudioLevel() == SPATIALIZER_IMMERSIVE_LEVEL_NONE) {
mIsAvailable = false;
mAudioDevice = null;
Log.d(TAG, "getAvailableDevice() ignored: spatializer not supported");
return;
}
AudioDeviceAttributes a2dpDevice = new AudioDeviceAttributes( AudioDeviceAttributes a2dpDevice = new AudioDeviceAttributes(
AudioDeviceAttributes.ROLE_OUTPUT, AudioDeviceAttributes.ROLE_OUTPUT,
AudioDeviceInfo.TYPE_BLUETOOTH_A2DP, AudioDeviceInfo.TYPE_BLUETOOTH_A2DP,
@@ -187,7 +210,6 @@ public class BluetoothDetailsSpatialAudioController extends BluetoothDetailsCont
AudioDeviceInfo.TYPE_HEARING_AID, AudioDeviceInfo.TYPE_HEARING_AID,
mCachedDevice.getAddress()); mCachedDevice.getAddress());
mIsAvailable = true;
if (mSpatializer.isAvailableForDevice(bleHeadsetDevice)) { if (mSpatializer.isAvailableForDevice(bleHeadsetDevice)) {
mAudioDevice = bleHeadsetDevice; mAudioDevice = bleHeadsetDevice;
} else if (mSpatializer.isAvailableForDevice(bleSpeakerDevice)) { } else if (mSpatializer.isAvailableForDevice(bleSpeakerDevice)) {
@@ -196,20 +218,20 @@ public class BluetoothDetailsSpatialAudioController extends BluetoothDetailsCont
mAudioDevice = bleBroadcastDevice; mAudioDevice = bleBroadcastDevice;
} else if (mSpatializer.isAvailableForDevice(a2dpDevice)) { } else if (mSpatializer.isAvailableForDevice(a2dpDevice)) {
mAudioDevice = a2dpDevice; mAudioDevice = a2dpDevice;
} else { } else if (mSpatializer.isAvailableForDevice(hearingAidDevice)) {
mIsAvailable = mSpatializer.isAvailableForDevice(hearingAidDevice);
mAudioDevice = hearingAidDevice; mAudioDevice = hearingAidDevice;
} else {
mAudioDevice = null;
} }
Log.d(TAG, "getAvailableDevice() device : " Log.d(TAG, "getAvailableDevice() device : "
+ mCachedDevice.getDevice().getAnonymizedAddress() + mCachedDevice.getDevice().getAnonymizedAddress()
+ ", type : " + mAudioDevice.getType() + ", is available : " + (mAudioDevice != null)
+ ", is available : " + mIsAvailable); + ", type : " + (mAudioDevice == null ? "no type" : mAudioDevice.getType()));
} }
@VisibleForTesting @VisibleForTesting
void setAvailableDevice(AudioDeviceAttributes audioDevice) { void setAvailableDevice(AudioDeviceAttributes audioDevice) {
mAudioDevice = audioDevice; mAudioDevice = audioDevice;
mIsAvailable = mSpatializer.isAvailableForDevice(audioDevice);
} }
} }

View File

@@ -16,6 +16,9 @@
package com.android.settings.bluetooth; package com.android.settings.bluetooth;
import static android.media.Spatializer.SPATIALIZER_IMMERSIVE_LEVEL_MULTICHANNEL;
import static android.media.Spatializer.SPATIALIZER_IMMERSIVE_LEVEL_NONE;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.spy;
@@ -62,6 +65,8 @@ public class BluetoothDetailsSpatialAudioControllerTest extends BluetoothDetails
@Mock @Mock
private BluetoothDevice mBluetoothDevice; private BluetoothDevice mBluetoothDevice;
private AudioDeviceAttributes mAvailableDevice;
private BluetoothDetailsSpatialAudioController mController; private BluetoothDetailsSpatialAudioController mController;
private SwitchPreference mSpatialAudioPref; private SwitchPreference mSpatialAudioPref;
private SwitchPreference mHeadTrackingPref; private SwitchPreference mHeadTrackingPref;
@@ -86,94 +91,32 @@ public class BluetoothDetailsSpatialAudioControllerTest extends BluetoothDetails
when(mProfilesContainer.findPreference(KEY_SPATIAL_AUDIO)).thenReturn(mSpatialAudioPref); when(mProfilesContainer.findPreference(KEY_SPATIAL_AUDIO)).thenReturn(mSpatialAudioPref);
when(mProfilesContainer.findPreference(KEY_HEAD_TRACKING)).thenReturn(mHeadTrackingPref); when(mProfilesContainer.findPreference(KEY_HEAD_TRACKING)).thenReturn(mHeadTrackingPref);
}
@Test mAvailableDevice = new AudioDeviceAttributes(
public void isAvailable_spatialAudioSupportA2dpDevice_returnsTrue() {
AudioDeviceAttributes a2dpDevice = new AudioDeviceAttributes(
AudioDeviceAttributes.ROLE_OUTPUT, AudioDeviceAttributes.ROLE_OUTPUT,
AudioDeviceInfo.TYPE_BLUETOOTH_A2DP, AudioDeviceInfo.TYPE_BLUETOOTH_A2DP,
MAC_ADDRESS); 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 @Test
public void isAvailable_spatialAudioSupportBleHeadsetDevice_returnsTrue() { public void isAvailable_forSpatializerWithLevelNone_returnsFalse() {
AudioDeviceAttributes bleHeadsetDevice = new AudioDeviceAttributes( when(mSpatializer.getImmersiveAudioLevel()).thenReturn(SPATIALIZER_IMMERSIVE_LEVEL_NONE);
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_spatialAudioNotSupported_returnsFalse() {
assertThat(mController.isAvailable()).isFalse(); assertThat(mController.isAvailable()).isFalse();
assertThat(mController.mAudioDevice.getType()) }
.isEqualTo(AudioDeviceInfo.TYPE_HEARING_AID);
@Test
public void isAvailable_forSpatializerWithLevelNotNone_returnsTrue() {
when(mSpatializer.getImmersiveAudioLevel()).thenReturn(
SPATIALIZER_IMMERSIVE_LEVEL_MULTICHANNEL);
assertThat(mController.isAvailable()).isTrue();
} }
@Test @Test
public void refresh_spatialAudioIsTurnedOn_checksSpatialAudioPreference() { public void refresh_spatialAudioIsTurnedOn_checksSpatialAudioPreference() {
List<AudioDeviceAttributes> compatibleAudioDevices = new ArrayList<>(); List<AudioDeviceAttributes> compatibleAudioDevices = new ArrayList<>();
mController.setAvailableDevice(mAvailableDevice);
compatibleAudioDevices.add(mController.mAudioDevice); compatibleAudioDevices.add(mController.mAudioDevice);
when(mSpatializer.isAvailableForDevice(mController.mAudioDevice)).thenReturn(true);
when(mSpatializer.getCompatibleAudioDevices()).thenReturn(compatibleAudioDevices); when(mSpatializer.getCompatibleAudioDevices()).thenReturn(compatibleAudioDevices);
mController.refresh(); mController.refresh();
@@ -207,13 +150,14 @@ public class BluetoothDetailsSpatialAudioControllerTest extends BluetoothDetails
public void public void
refresh_spatialAudioOnAndHeadTrackingIsNotAvailable_hidesHeadTrackingPreference() { refresh_spatialAudioOnAndHeadTrackingIsNotAvailable_hidesHeadTrackingPreference() {
List<AudioDeviceAttributes> compatibleAudioDevices = new ArrayList<>(); List<AudioDeviceAttributes> compatibleAudioDevices = new ArrayList<>();
mController.setAvailableDevice(mAvailableDevice);
compatibleAudioDevices.add(mController.mAudioDevice); compatibleAudioDevices.add(mController.mAudioDevice);
when(mSpatializer.getCompatibleAudioDevices()).thenReturn(compatibleAudioDevices); when(mSpatializer.getCompatibleAudioDevices()).thenReturn(compatibleAudioDevices);
when(mSpatializer.hasHeadTracker(mController.mAudioDevice)).thenReturn(false); when(mSpatializer.hasHeadTracker(mController.mAudioDevice)).thenReturn(false);
mController.refresh(); mController.refresh();
assertThat(mHeadTrackingPref.isVisible()).isFalse(); verify(mProfilesContainer).removePreference(mHeadTrackingPref);
} }
@Test @Test
@@ -223,14 +167,16 @@ public class BluetoothDetailsSpatialAudioControllerTest extends BluetoothDetails
mController.refresh(); mController.refresh();
assertThat(mHeadTrackingPref.isVisible()).isFalse(); verify(mProfilesContainer).removePreference(mHeadTrackingPref);
} }
@Test @Test
public void refresh_headTrackingIsTurnedOn_checksHeadTrackingPreference() { public void refresh_headTrackingIsTurnedOn_checksHeadTrackingPreference() {
List<AudioDeviceAttributes> compatibleAudioDevices = new ArrayList<>(); List<AudioDeviceAttributes> compatibleAudioDevices = new ArrayList<>();
mController.setAvailableDevice(mAvailableDevice);
compatibleAudioDevices.add(mController.mAudioDevice); compatibleAudioDevices.add(mController.mAudioDevice);
when(mSpatializer.getCompatibleAudioDevices()).thenReturn(compatibleAudioDevices); when(mSpatializer.getCompatibleAudioDevices()).thenReturn(compatibleAudioDevices);
when(mSpatializer.isAvailableForDevice(mController.mAudioDevice)).thenReturn(true);
when(mSpatializer.hasHeadTracker(mController.mAudioDevice)).thenReturn(true); when(mSpatializer.hasHeadTracker(mController.mAudioDevice)).thenReturn(true);
when(mSpatializer.isHeadTrackerEnabled(mController.mAudioDevice)).thenReturn(true); when(mSpatializer.isHeadTrackerEnabled(mController.mAudioDevice)).thenReturn(true);
@@ -242,8 +188,10 @@ public class BluetoothDetailsSpatialAudioControllerTest extends BluetoothDetails
@Test @Test
public void refresh_headTrackingIsTurnedOff_unchecksHeadTrackingPreference() { public void refresh_headTrackingIsTurnedOff_unchecksHeadTrackingPreference() {
List<AudioDeviceAttributes> compatibleAudioDevices = new ArrayList<>(); List<AudioDeviceAttributes> compatibleAudioDevices = new ArrayList<>();
mController.setAvailableDevice(mAvailableDevice);
compatibleAudioDevices.add(mController.mAudioDevice); compatibleAudioDevices.add(mController.mAudioDevice);
when(mSpatializer.getCompatibleAudioDevices()).thenReturn(compatibleAudioDevices); when(mSpatializer.getCompatibleAudioDevices()).thenReturn(compatibleAudioDevices);
when(mSpatializer.isAvailableForDevice(mController.mAudioDevice)).thenReturn(true);
when(mSpatializer.hasHeadTracker(mController.mAudioDevice)).thenReturn(true); when(mSpatializer.hasHeadTracker(mController.mAudioDevice)).thenReturn(true);
when(mSpatializer.isHeadTrackerEnabled(mController.mAudioDevice)).thenReturn(false); when(mSpatializer.isHeadTrackerEnabled(mController.mAudioDevice)).thenReturn(false);
@@ -254,6 +202,7 @@ public class BluetoothDetailsSpatialAudioControllerTest extends BluetoothDetails
@Test @Test
public void turnedOnSpatialAudio_invokesAddCompatibleAudioDevice() { public void turnedOnSpatialAudio_invokesAddCompatibleAudioDevice() {
mController.setAvailableDevice(mAvailableDevice);
mSpatialAudioPref.setChecked(true); mSpatialAudioPref.setChecked(true);
mController.onPreferenceClick(mSpatialAudioPref); mController.onPreferenceClick(mSpatialAudioPref);
verify(mSpatializer).addCompatibleAudioDevice(mController.mAudioDevice); verify(mSpatializer).addCompatibleAudioDevice(mController.mAudioDevice);
@@ -261,6 +210,7 @@ public class BluetoothDetailsSpatialAudioControllerTest extends BluetoothDetails
@Test @Test
public void turnedOffSpatialAudio_invokesRemoveCompatibleAudioDevice() { public void turnedOffSpatialAudio_invokesRemoveCompatibleAudioDevice() {
mController.setAvailableDevice(mAvailableDevice);
mSpatialAudioPref.setChecked(false); mSpatialAudioPref.setChecked(false);
mController.onPreferenceClick(mSpatialAudioPref); mController.onPreferenceClick(mSpatialAudioPref);
verify(mSpatializer).removeCompatibleAudioDevice(mController.mAudioDevice); verify(mSpatializer).removeCompatibleAudioDevice(mController.mAudioDevice);
@@ -268,6 +218,7 @@ public class BluetoothDetailsSpatialAudioControllerTest extends BluetoothDetails
@Test @Test
public void turnedOnHeadTracking_invokesSetHeadTrackerEnabled_setsTrue() { public void turnedOnHeadTracking_invokesSetHeadTrackerEnabled_setsTrue() {
mController.setAvailableDevice(mAvailableDevice);
mHeadTrackingPref.setChecked(true); mHeadTrackingPref.setChecked(true);
mController.onPreferenceClick(mHeadTrackingPref); mController.onPreferenceClick(mHeadTrackingPref);
verify(mSpatializer).setHeadTrackerEnabled(true, mController.mAudioDevice); verify(mSpatializer).setHeadTrackerEnabled(true, mController.mAudioDevice);
@@ -275,6 +226,7 @@ public class BluetoothDetailsSpatialAudioControllerTest extends BluetoothDetails
@Test @Test
public void turnedOffHeadTracking_invokesSetHeadTrackerEnabled_setsFalse() { public void turnedOffHeadTracking_invokesSetHeadTrackerEnabled_setsFalse() {
mController.setAvailableDevice(mAvailableDevice);
mHeadTrackingPref.setChecked(false); mHeadTrackingPref.setChecked(false);
mController.onPreferenceClick(mHeadTrackingPref); mController.onPreferenceClick(mHeadTrackingPref);
verify(mSpatializer).setHeadTrackerEnabled(false, mController.mAudioDevice); verify(mSpatializer).setHeadTrackerEnabled(false, mController.mAudioDevice);