diff --git a/services/audiopolicy/common/managerdefinitions/src/AudioOutputDescriptor.cpp b/services/audiopolicy/common/managerdefinitions/src/AudioOutputDescriptor.cpp index dd516581c2..aaa28bceed 100644 --- a/services/audiopolicy/common/managerdefinitions/src/AudioOutputDescriptor.cpp +++ b/services/audiopolicy/common/managerdefinitions/src/AudioOutputDescriptor.cpp @@ -33,7 +33,10 @@ namespace android { -DeviceTypeSet APM_AUDIO_OUT_DEVICE_REMOTE_ALL = {AUDIO_DEVICE_OUT_REMOTE_SUBMIX}; +static const DeviceTypeSet& getAllOutRemoteDevices() { + static const DeviceTypeSet allOutRemoteDevices = {AUDIO_DEVICE_OUT_REMOTE_SUBMIX}; + return allOutRemoteDevices; +} AudioOutputDescriptor::AudioOutputDescriptor(const sp& policyAudioPort, AudioPolicyClientInterface *clientInterface) @@ -681,7 +684,7 @@ bool SwAudioOutputCollection::isActiveLocally(VolumeSource volumeSource, uint32_ const sp outputDesc = this->valueAt(i); if (outputDesc->isActive(volumeSource, inPastMs, sysTime) && (!(outputDesc->devices() - .containsDeviceAmongTypes(APM_AUDIO_OUT_DEVICE_REMOTE_ALL)))) { + .containsDeviceAmongTypes(getAllOutRemoteDevices())))) { return true; } } @@ -693,7 +696,7 @@ bool SwAudioOutputCollection::isActiveRemotely(VolumeSource volumeSource, uint32 nsecs_t sysTime = systemTime(); for (size_t i = 0; i < size(); i++) { const sp outputDesc = valueAt(i); - if (outputDesc->devices().containsDeviceAmongTypes(APM_AUDIO_OUT_DEVICE_REMOTE_ALL) && + if (outputDesc->devices().containsDeviceAmongTypes(getAllOutRemoteDevices()) && outputDesc->isActive(volumeSource, inPastMs, sysTime)) { // do not consider re routing (when the output is going to a dynamic policy) // as "remote playback" diff --git a/services/audiopolicy/enginedefault/src/Engine.cpp b/services/audiopolicy/enginedefault/src/Engine.cpp index a7d7cf6f05..b14d2bbb0b 100755 --- a/services/audiopolicy/enginedefault/src/Engine.cpp +++ b/services/audiopolicy/enginedefault/src/Engine.cpp @@ -41,20 +41,23 @@ namespace audio_policy { struct legacy_strategy_map { const char *name; legacy_strategy id; }; -static const std::vector gLegacyStrategy = { - { "STRATEGY_NONE", STRATEGY_NONE }, - { "STRATEGY_MEDIA", STRATEGY_MEDIA }, - { "STRATEGY_PHONE", STRATEGY_PHONE }, - { "STRATEGY_SONIFICATION", STRATEGY_SONIFICATION }, - { "STRATEGY_SONIFICATION_RESPECTFUL", STRATEGY_SONIFICATION_RESPECTFUL }, - { "STRATEGY_DTMF", STRATEGY_DTMF }, - { "STRATEGY_ENFORCED_AUDIBLE", STRATEGY_ENFORCED_AUDIBLE }, - { "STRATEGY_TRANSMITTED_THROUGH_SPEAKER", STRATEGY_TRANSMITTED_THROUGH_SPEAKER }, - { "STRATEGY_ACCESSIBILITY", STRATEGY_ACCESSIBILITY }, - { "STRATEGY_REROUTING", STRATEGY_REROUTING }, - { "STRATEGY_PATCH", STRATEGY_REROUTING }, // boiler to manage stream patch volume - { "STRATEGY_CALL_ASSISTANT", STRATEGY_CALL_ASSISTANT }, -}; +static const std::vector& getLegacyStrategy() { + static const std::vector legacyStrategy = { + { "STRATEGY_NONE", STRATEGY_NONE }, + { "STRATEGY_MEDIA", STRATEGY_MEDIA }, + { "STRATEGY_PHONE", STRATEGY_PHONE }, + { "STRATEGY_SONIFICATION", STRATEGY_SONIFICATION }, + { "STRATEGY_SONIFICATION_RESPECTFUL", STRATEGY_SONIFICATION_RESPECTFUL }, + { "STRATEGY_DTMF", STRATEGY_DTMF }, + { "STRATEGY_ENFORCED_AUDIBLE", STRATEGY_ENFORCED_AUDIBLE }, + { "STRATEGY_TRANSMITTED_THROUGH_SPEAKER", STRATEGY_TRANSMITTED_THROUGH_SPEAKER }, + { "STRATEGY_ACCESSIBILITY", STRATEGY_ACCESSIBILITY }, + { "STRATEGY_REROUTING", STRATEGY_REROUTING }, + { "STRATEGY_PATCH", STRATEGY_REROUTING }, // boiler to manage stream patch volume + { "STRATEGY_CALL_ASSISTANT", STRATEGY_CALL_ASSISTANT }, + }; + return legacyStrategy; +} Engine::Engine() { @@ -63,7 +66,8 @@ Engine::Engine() "Policy Engine configuration is partially invalid, skipped %zu elements", result.nbSkippedElement); - for (const auto &strategy : gLegacyStrategy) { + auto legacyStrategy = getLegacyStrategy(); + for (const auto &strategy : legacyStrategy) { mLegacyStrategyMap[getProductStrategyByName(strategy.name)] = strategy.id; } }