policy: update voice volume after output device is changed.
During voice call, when device switch from handset to speaker,
speaker volume in voice stream is set only after voice call is
routed to speaker. In this duration, handset volume is used for
voice call even if speaker device is enabled.
Fix it by setting voice volume after voice output device is changed.
CRs-Fixed: 2281357
Change-Id: I5cf9639cfac788d12c07f3c83b610bc16fc0143c
diff --git a/policy_hal/AudioPolicyManager.cpp b/policy_hal/AudioPolicyManager.cpp
index ab933a0..6bc3d1e 100644
--- a/policy_hal/AudioPolicyManager.cpp
+++ b/policy_hal/AudioPolicyManager.cpp
@@ -1042,6 +1042,9 @@
}
if (mEngine->getPhoneState() == AUDIO_MODE_IN_CALL && hasPrimaryOutput()) {
audio_devices_t newDevice = getNewOutputDevice(mPrimaryOutput, true /*fromCache*/);
+ if (forceVolumeReeval && (newDevice != AUDIO_DEVICE_NONE)) {
+ applyStreamVolumes(mPrimaryOutput, newDevice, delayMs, true);
+ }
waitMs = updateCallRouting(newDevice, delayMs);
}
// Use reverse loop to make sure any low latency usecases (generally tones)
@@ -1057,10 +1060,11 @@
if ((mEngine->getPhoneState() != AUDIO_MODE_IN_CALL) || (outputDesc != mPrimaryOutput)) {
waitMs = setOutputDevice(outputDesc, newDevice, (newDevice != AUDIO_DEVICE_NONE),
delayMs);
- }
- if (forceVolumeReeval && (newDevice != AUDIO_DEVICE_NONE)) {
- applyStreamVolumes(outputDesc, newDevice, waitMs, true);
- }
+
+ if (forceVolumeReeval && (newDevice != AUDIO_DEVICE_NONE)) {
+ applyStreamVolumes(outputDesc, newDevice, waitMs, true);
+ }
+ }
}
Vector<sp <AudioInputDescriptor> > activeInputs = mInputs.getActiveInputs();