Merge "SpatializerHelper: fix null routing" am: dddba4569f am: 262fca259c am: d014236ba3

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2210002

Change-Id: Iee72b4ed33e9eba20b880c7613718ba884b93a5d
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Andy Hung
2022-09-08 19:09:51 +00:00
committed by Automerger Merge Worker
3 changed files with 18 additions and 5 deletions

View File

@@ -1914,7 +1914,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
return null;
}
UUID getDeviceSensorUuid(AudioDeviceAttributes device) {
@Nullable UUID getDeviceSensorUuid(AudioDeviceAttributes device) {
synchronized (mDeviceStateLock) {
return mDeviceInventory.getDeviceSensorUuid(device);
}

View File

@@ -16,6 +16,7 @@
package com.android.server.audio;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothProfile;
@@ -1498,7 +1499,7 @@ public class AudioDeviceInventory {
mDevRoleCapturePresetDispatchers.finishBroadcast();
}
UUID getDeviceSensorUuid(AudioDeviceAttributes device) {
@Nullable UUID getDeviceSensorUuid(AudioDeviceAttributes device) {
final String key = DeviceInfo.makeDeviceListKey(device.getInternalType(),
device.getAddress());
synchronized (mDevicesLock) {

View File

@@ -347,6 +347,14 @@ public class SpatializerHelper {
mASA.getDevicesForAttributes(
DEFAULT_ATTRIBUTES, false /* forVolume */).toArray(ROUTING_DEVICES);
// check validity of routing information
if (ROUTING_DEVICES[0] == null) {
logloge("onRoutingUpdated: device is null, no Spatial Audio");
setDispatchAvailableState(false);
// not changing the spatializer level as this is likely a transient state
return;
}
// is media routed to a new device?
if (isWireless(ROUTING_DEVICES[0].getType())) {
addWirelessDeviceIfNew(ROUTING_DEVICES[0]);
@@ -1097,7 +1105,7 @@ public class SpatializerHelper {
}
}
// check current routing to see if it affects the headtracking mode
if (ROUTING_DEVICES[0].getType() == ada.getType()
if (ROUTING_DEVICES[0] != null && ROUTING_DEVICES[0].getType() == ada.getType()
&& ROUTING_DEVICES[0].getAddress().equals(ada.getAddress())) {
setDesiredHeadTrackingMode(enabled ? mDesiredHeadTrackingModeWhenEnabled
: Spatializer.HEAD_TRACKING_MODE_DISABLED);
@@ -1658,7 +1666,11 @@ public class SpatializerHelper {
private int getHeadSensorHandleUpdateTracker() {
int headHandle = -1;
UUID routingDeviceUuid = mAudioService.getDeviceSensorUuid(ROUTING_DEVICES[0]);
final AudioDeviceAttributes currentDevice = ROUTING_DEVICES[0];
if (currentDevice == null) {
return headHandle;
}
UUID routingDeviceUuid = mAudioService.getDeviceSensorUuid(currentDevice);
// We limit only to Sensor.TYPE_HEAD_TRACKER here to avoid confusion
// with gaming sensors. (Note that Sensor.TYPE_ROTATION_VECTOR
// and Sensor.TYPE_GAME_ROTATION_VECTOR are supported internally by
@@ -1669,7 +1681,7 @@ public class SpatializerHelper {
final UUID uuid = sensor.getUuid();
if (uuid.equals(routingDeviceUuid)) {
headHandle = sensor.getHandle();
if (!setHasHeadTracker(ROUTING_DEVICES[0])) {
if (!setHasHeadTracker(currentDevice)) {
headHandle = -1;
}
break;