Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 834662d4 authored by Jean-Michel Trivi's avatar Jean-Michel Trivi
Browse files

Fix bug 3395289 Use MODE_IN_COMMUNICATION to evaluate stream vol changes

When the user is in a phone or VoIP call, the volume keys should
 control the STREAM_VOICE_CALL volume. Before MODE_IN_COMMUNICATION
 was introduced to cover VoIP use cases, having an active VoIP call
 was determined by checking whether there was any track used the
 output stream STREAM_VOICE_CALL, which can give false positives.
This CL checks instead against the audio mode to see if
 MODE_IN_COMMUNICATION is selected to determine if a VoIP call
 is in progress.

This implies that applications that play on STREAM_VOICE_CALL
 shouldn't rely on that fact alone to expect the volume keys
 to control the STREAM_VOICE_CALL volume, and should instead,
 rely on the official mechanism for that:
   android.app.Activity.setVolumeControlStream(int)

Change-Id: Ia487951ea1684477aa3d522c9031fad484d8a40d
parent a85b789a
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1450,7 +1450,7 @@ public class AudioService extends IAudioService.Stub {
        if (AudioSystem.getForceUse(AudioSystem.FOR_COMMUNICATION) == AudioSystem.FORCE_BT_SCO) {
            // Log.v(TAG, "getActiveStreamType: Forcing STREAM_BLUETOOTH_SCO...");
            return AudioSystem.STREAM_BLUETOOTH_SCO;
        } else if (isOffhook || AudioSystem.isStreamActive(AudioSystem.STREAM_VOICE_CALL)) {
        } else if (isOffhook || getMode() == AudioManager.MODE_IN_COMMUNICATION) {
            // Log.v(TAG, "getActiveStreamType: Forcing STREAM_VOICE_CALL...");
            return AudioSystem.STREAM_VOICE_CALL;
        } else if (AudioSystem.isStreamActive(AudioSystem.STREAM_MUSIC)) {