Do not use disabled devices when getting output device.
When disabled devies are set for a particular strategy, they are not
supposed to be used for that particular strategy. In that case, when
querying output devices, remove the disabled devices from available
devices list.
Bug: 247045771
Test: manually
Change-Id: I73d1c911b29a25e27914cddb3c15c04f03f485b2
diff --git a/services/audiopolicy/enginedefault/src/Engine.cpp b/services/audiopolicy/enginedefault/src/Engine.cpp
index 7534984..924b4ad 100644
--- a/services/audiopolicy/enginedefault/src/Engine.cpp
+++ b/services/audiopolicy/enginedefault/src/Engine.cpp
@@ -463,7 +463,7 @@
}
if (devices.isEmpty()) {
- ALOGV("%s no device found for strategy %d", __func__, strategy);
+ ALOGI("%s no device found for strategy %d", __func__, strategy);
sp<DeviceDescriptor> defaultOutputDevice = getApmObserver()->getDefaultOutputDevice();
if (defaultOutputDevice != nullptr) {
devices.add(defaultOutputDevice);
@@ -699,6 +699,18 @@
return preferredAvailableDevVec;
}
+DeviceVector Engine::getDisabledDevicesForProductStrategy(
+ const DeviceVector &availableOutputDevices, product_strategy_t strategy) const {
+ DeviceVector disabledDevices = {};
+ AudioDeviceTypeAddrVector disabledDevicesTypeAddr;
+ const status_t status = getDevicesForRoleAndStrategy(
+ strategy, DEVICE_ROLE_DISABLED, disabledDevicesTypeAddr);
+ if (status == NO_ERROR) {
+ disabledDevices =
+ availableOutputDevices.getDevicesFromDeviceTypeAddrVec(disabledDevicesTypeAddr);
+ }
+ return disabledDevices;
+}
DeviceVector Engine::getDevicesForProductStrategy(product_strategy_t strategy) const {
const SwAudioOutputCollection& outputs = getApmObserver()->getOutputs();
@@ -722,6 +734,11 @@
return preferredAvailableDevVec;
}
+ // Remove all disabled devices from the available device list.
+ DeviceVector disabledDevVec =
+ getDisabledDevicesForProductStrategy(availableOutputDevices, strategy);
+ availableOutputDevices.remove(disabledDevVec);
+
return getDevicesForStrategyInt(legacyStrategy,
availableOutputDevices,
outputs);
diff --git a/services/audiopolicy/enginedefault/src/Engine.h b/services/audiopolicy/enginedefault/src/Engine.h
index 595e289..1efdf24 100644
--- a/services/audiopolicy/enginedefault/src/Engine.h
+++ b/services/audiopolicy/enginedefault/src/Engine.h
@@ -96,6 +96,8 @@
const DeviceVector& availableOutputDevices, legacy_strategy legacyStrategy) const;
DeviceVector getPreferredAvailableDevicesForProductStrategy(
const DeviceVector& availableOutputDevices, product_strategy_t strategy) const;
+ DeviceVector getDisabledDevicesForProductStrategy(
+ const DeviceVector& availableOutputDevices, product_strategy_t strategy) const;
DeviceStrategyMap mDevicesForStrategies;