From: Luiz Augusto von Dentz <luiz.von.dentz@xxxxxxxxx> This makes module-bluetooth-policy to rank profiles based on their available flag and only consider their priority in case profiles have the same rank. --- src/modules/bluetooth/module-bluetooth-policy.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/modules/bluetooth/module-bluetooth-policy.c b/src/modules/bluetooth/module-bluetooth-policy.c index 4a90db7..864d10d 100644 --- a/src/modules/bluetooth/module-bluetooth-policy.c +++ b/src/modules/bluetooth/module-bluetooth-policy.c @@ -137,21 +137,22 @@ static pa_card_profile *find_best_profile(pa_card *card) { void *state; pa_card_profile *profile; pa_card_profile *result = card->active_profile; - pa_card_profile *off; - - pa_assert_se(off = pa_hashmap_get(card->profiles, "off")); PA_HASHMAP_FOREACH(profile, card->profiles, state) { - if (profile->available == PA_AVAILABLE_NO || profile == off) + if (result == profile) + continue; + + if (profile->available > result->available) { + result = profile; continue; + } - if (result == NULL || - (profile->available == PA_AVAILABLE_YES && result->available == PA_AVAILABLE_UNKNOWN) || - (profile->available == result->available && profile->priority > profile->priority)) + if (profile->available == result->available && + profile->priority > profile->priority) result = profile; } - return result ? result : off; + return result; } static pa_hook_result_t profile_available_hook_callback(pa_core *c, pa_card_profile *profile, void *userdata) { -- 1.8.3.1