Merge "Policy_HAL: avoid setting direct VoIP flag multiple"
diff --git a/policy_hal/AudioPolicyManager.cpp b/policy_hal/AudioPolicyManager.cpp
index 8771f31..7638c62 100644
--- a/policy_hal/AudioPolicyManager.cpp
+++ b/policy_hal/AudioPolicyManager.cpp
@@ -187,6 +187,9 @@
}
// Propagate device availability to Engine
mEngine->setDeviceConnectionState(devDesc, state);
+ if (device == AUDIO_DEVICE_OUT_AUX_DIGITAL) {
+ chkDpConnAndAllowedForVoice();
+ }
// outputs should never be empty here
ALOG_ASSERT(outputs.size() != 0, "setDeviceConnectionState():"
@@ -231,6 +234,9 @@
// Propagate device availability to Engine
mEngine->setDeviceConnectionState(devDesc, state);
+ if (device == AUDIO_DEVICE_OUT_AUX_DIGITAL) {
+ mEngine->setDpConnAndAllowedForVoice(false);
+ }
} break;
default:
@@ -395,6 +401,20 @@
return BAD_VALUE;
}
+void AudioPolicyManagerCustom::chkDpConnAndAllowedForVoice()
+{
+ String8 value;
+ bool connAndAllowed = false;
+ String8 valueStr = mpClientInterface->getParameters((audio_io_handle_t)0,
+ String8("dp_for_voice"));
+
+ AudioParameter result = AudioParameter(valueStr);
+ if (result.get(String8("dp_for_voice"), value) == NO_ERROR) {
+ connAndAllowed = value.contains("true");
+ }
+ mEngine->setDpConnAndAllowedForVoice(connAndAllowed);
+}
+
bool AudioPolicyManagerCustom::isInvalidationOfMusicStreamNeeded(routing_strategy strategy)
{
if (strategy == STRATEGY_MEDIA) {
diff --git a/policy_hal/AudioPolicyManager.h b/policy_hal/AudioPolicyManager.h
index bd3fa51..cf84d14 100644
--- a/policy_hal/AudioPolicyManager.h
+++ b/policy_hal/AudioPolicyManager.h
@@ -185,6 +185,9 @@
audio_output_flags_t flags,
audio_port_handle_t selectedDeviceId,
audio_port_handle_t *portId);
+ // internal method to query hal for whether display-port is connected
+ // and can be used for voip/voice call
+ void chkDpConnAndAllowedForVoice();
// Used for voip + voice concurrency usecase
int mPrevPhoneState;
#ifdef VOICE_CONCURRENCY