Index: webrtc/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioUtils.java |
diff --git a/webrtc/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioUtils.java b/webrtc/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioUtils.java |
index 9d7a600190c5151e689a75c8f4d156f2249ef2bd..f08e11dad88833cce0efe144176025214ac8920e 100644 |
--- a/webrtc/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioUtils.java |
+++ b/webrtc/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioUtils.java |
@@ -193,5 +193,37 @@ public final class WebRtcAudioUtils { |
permission, |
Process.myPid(), |
Process.myUid()) == PackageManager.PERMISSION_GRANTED; |
+ } |
+ |
+ // Convert the provided audio |mode| into most suitable audio output stream |
+ // type. The stream type is used for creating audio streams and for volume |
+ // changes. It is essential that the mode and type are in-line to ensure |
+ // correct behavior. If for example a STREAM_MUSIC type of stream is created |
+ // in a MODE_IN_COMMUNICATION mode, audio will be played out and the volume |
+ // icon will look OK but the actual volume will not be changed when the user |
+ // changes the volume slider. |
+ // TODO(henrika): there is currently no mapping to STREAM_ALARM, STREAM_DTMF, |
+ // or STREAM_NOTIFICATION types since I am unable to see a reason for using |
+ // them. There are only four different modes. |
+ public static int getOutputStreamTypeFromAudioMode(int mode) { |
+ Logging.d(TAG, "getOutputStreamTypeFromAudioMode(mode=" + mode + ")"); |
+ switch (mode) { |
+ case AudioManager.MODE_NORMAL: |
+ // The audio stream for music playback. |
+ Logging.d(TAG, "AudioManager.STREAM_MUSIC"); |
+ return AudioManager.STREAM_MUSIC; |
+ case AudioManager.MODE_RINGTONE: |
+ // Audio stream for the phone ring. |
+ Logging.d(TAG, "AudioManager.STREAM_RING"); |
+ return AudioManager.STREAM_RING; |
+ case AudioManager.MODE_IN_CALL: |
+ case AudioManager.MODE_IN_COMMUNICATION: |
+ // Audio stream for phone calls. |
+ Logging.d(TAG, "AudioManager.STREAM_VOICE_CALL"); |
+ return AudioManager.STREAM_VOICE_CALL; |
+ default: |
+ Logging.d(TAG, "AudioManager.USE_DEFAULT_STREAM_TYPE"); |
+ return AudioManager.USE_DEFAULT_STREAM_TYPE; |
} |
+ } |
} |