audio policy: fix regression in getDeviceConnectionState().
Fix problem in DeviceVector() device search logic causing
failure to report connection of devices when no address is provided
(e.g when called from AudioManager.isBluetoothA2dpOn()).
Bug: 28286051
Change-Id: I7ca732e195d2ddcdc1a93b78aed21523b3461aa9
diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
index fd9587a..21ce8c9 100644
--- a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
+++ b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
@@ -291,7 +291,15 @@
audio_policy_dev_state_t AudioPolicyManager::getDeviceConnectionState(audio_devices_t device,
const char *device_address)
{
- sp<DeviceDescriptor> devDesc = mHwModules.getDeviceDescriptor(device, device_address, "");
+ sp<DeviceDescriptor> devDesc =
+ mHwModules.getDeviceDescriptor(device, device_address, "",
+ (strlen(device_address) != 0)/*matchAddress*/);
+
+ if (devDesc == 0) {
+ ALOGW("getDeviceConnectionState() undeclared device, type %08x, address: %s",
+ device, device_address);
+ return AUDIO_POLICY_DEVICE_STATE_UNAVAILABLE;
+ }
DeviceVector *deviceVector;
@@ -303,7 +311,9 @@
ALOGW("getDeviceConnectionState() invalid device type %08x", device);
return AUDIO_POLICY_DEVICE_STATE_UNAVAILABLE;
}
- return deviceVector->getDeviceConnectionState(devDesc);
+
+ return (deviceVector->getDevice(device, String8(device_address)) != 0) ?
+ AUDIO_POLICY_DEVICE_STATE_AVAILABLE : AUDIO_POLICY_DEVICE_STATE_UNAVAILABLE;
}
void AudioPolicyManager::updateCallRouting(audio_devices_t rxDevice, int delayMs)