audio policy: allow disabling A2DP for media.
Added FORCE_NO_BT_A2DP forced use to allow applications to override default policy to use A2DP whenever connected. Bug 6485897. Change-Id: I784271c062294fbe1aff7884965075b40c68dc24
This commit is contained in:
parent
01e6272f0a
commit
1afd84f622
2 changed files with 23 additions and 15 deletions
|
@ -341,7 +341,8 @@ void AudioPolicyManagerBase::setForceUse(AudioSystem::force_use usage, AudioSyst
|
|||
if (config != AudioSystem::FORCE_HEADPHONES && config != AudioSystem::FORCE_BT_A2DP &&
|
||||
config != AudioSystem::FORCE_WIRED_ACCESSORY &&
|
||||
config != AudioSystem::FORCE_ANALOG_DOCK &&
|
||||
config != AudioSystem::FORCE_DIGITAL_DOCK && config != AudioSystem::FORCE_NONE) {
|
||||
config != AudioSystem::FORCE_DIGITAL_DOCK && config != AudioSystem::FORCE_NONE &&
|
||||
config != AudioSystem::FORCE_NO_BT_A2DP) {
|
||||
ALOGW("setForceUse() invalid config %d for FOR_MEDIA", config);
|
||||
return;
|
||||
}
|
||||
|
@ -1930,17 +1931,19 @@ audio_devices_t AudioPolicyManagerBase::getDeviceForStrategy(routing_strategy st
|
|||
// FALL THROUGH
|
||||
|
||||
default: // FORCE_NONE
|
||||
device = mAvailableOutputDevices & AudioSystem::DEVICE_OUT_WIRED_HEADPHONE;
|
||||
if (device) break;
|
||||
device = mAvailableOutputDevices & AudioSystem::DEVICE_OUT_WIRED_HEADSET;
|
||||
if (device) break;
|
||||
// when not in a phone call, phone strategy should route STREAM_VOICE_CALL to A2DP
|
||||
if (mHasA2dp && !isInCall() && !mA2dpSuspended) {
|
||||
if (mHasA2dp && !isInCall() &&
|
||||
(mForceUse[AudioSystem::FOR_MEDIA] != AudioSystem::FORCE_NO_BT_A2DP) &&
|
||||
(getA2dpOutput() != 0) && !mA2dpSuspended) {
|
||||
device = mAvailableOutputDevices & AudioSystem::DEVICE_OUT_BLUETOOTH_A2DP;
|
||||
if (device) break;
|
||||
device = mAvailableOutputDevices & AudioSystem::DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES;
|
||||
if (device) break;
|
||||
}
|
||||
device = mAvailableOutputDevices & AudioSystem::DEVICE_OUT_WIRED_HEADPHONE;
|
||||
if (device) break;
|
||||
device = mAvailableOutputDevices & AudioSystem::DEVICE_OUT_WIRED_HEADSET;
|
||||
if (device) break;
|
||||
device = mAvailableOutputDevices & AUDIO_DEVICE_OUT_USB_ACCESSORY;
|
||||
if (device) break;
|
||||
device = mAvailableOutputDevices & AUDIO_DEVICE_OUT_USB_DEVICE;
|
||||
|
@ -1962,7 +1965,9 @@ audio_devices_t AudioPolicyManagerBase::getDeviceForStrategy(routing_strategy st
|
|||
case AudioSystem::FORCE_SPEAKER:
|
||||
// when not in a phone call, phone strategy should route STREAM_VOICE_CALL to
|
||||
// A2DP speaker when forcing to speaker output
|
||||
if (mHasA2dp && !isInCall() && !mA2dpSuspended) {
|
||||
if (mHasA2dp && !isInCall() &&
|
||||
(mForceUse[AudioSystem::FOR_MEDIA] != AudioSystem::FORCE_NO_BT_A2DP) &&
|
||||
(getA2dpOutput() != 0) && !mA2dpSuspended) {
|
||||
device = mAvailableOutputDevices & AudioSystem::DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER;
|
||||
if (device) break;
|
||||
}
|
||||
|
@ -2013,14 +2018,10 @@ audio_devices_t AudioPolicyManagerBase::getDeviceForStrategy(routing_strategy st
|
|||
// FALL THROUGH
|
||||
|
||||
case STRATEGY_MEDIA: {
|
||||
uint32_t device2 = mAvailableOutputDevices & AudioSystem::DEVICE_OUT_WIRED_HEADPHONE;
|
||||
if (device2 == 0) {
|
||||
device2 = mAvailableOutputDevices & AudioSystem::DEVICE_OUT_WIRED_HEADSET;
|
||||
}
|
||||
if (mHasA2dp && (getA2dpOutput() != 0) && !mA2dpSuspended) {
|
||||
if (device2 == 0) {
|
||||
device2 = mAvailableOutputDevices & AudioSystem::DEVICE_OUT_BLUETOOTH_A2DP;
|
||||
}
|
||||
uint32_t device2 = 0;
|
||||
if (mHasA2dp && (mForceUse[AudioSystem::FOR_MEDIA] != AudioSystem::FORCE_NO_BT_A2DP) &&
|
||||
(getA2dpOutput() != 0) && !mA2dpSuspended) {
|
||||
device2 = mAvailableOutputDevices & AudioSystem::DEVICE_OUT_BLUETOOTH_A2DP;
|
||||
if (device2 == 0) {
|
||||
device2 = mAvailableOutputDevices & AudioSystem::DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES;
|
||||
}
|
||||
|
@ -2028,6 +2029,12 @@ audio_devices_t AudioPolicyManagerBase::getDeviceForStrategy(routing_strategy st
|
|||
device2 = mAvailableOutputDevices & AudioSystem::DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER;
|
||||
}
|
||||
}
|
||||
if (device2 == 0) {
|
||||
device2 = mAvailableOutputDevices & AudioSystem::DEVICE_OUT_WIRED_HEADPHONE;
|
||||
}
|
||||
if (device2 == 0) {
|
||||
device2 = mAvailableOutputDevices & AudioSystem::DEVICE_OUT_WIRED_HEADSET;
|
||||
}
|
||||
if (device2 == 0) {
|
||||
device2 = mAvailableOutputDevices & AUDIO_DEVICE_OUT_USB_ACCESSORY;
|
||||
}
|
||||
|
|
|
@ -285,6 +285,7 @@ public:
|
|||
FORCE_BT_DESK_DOCK,
|
||||
FORCE_ANALOG_DOCK,
|
||||
FORCE_DIGITAL_DOCK,
|
||||
FORCE_NO_BT_A2DP,
|
||||
NUM_FORCE_CONFIG,
|
||||
FORCE_DEFAULT = FORCE_NONE
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue