| Index: webrtc/modules/audio_device/android/audio_device_template.h | 
| diff --git a/webrtc/modules/audio_device/android/audio_device_template.h b/webrtc/modules/audio_device/android/audio_device_template.h | 
| index 69ede541c41cdce55cfdebb161e6e9d51d8bb57d..adc66fa6d44d4caaa3d4ce907d26ca183f49e17d 100644 | 
| --- a/webrtc/modules/audio_device/android/audio_device_template.h | 
| +++ b/webrtc/modules/audio_device/android/audio_device_template.h | 
| @@ -11,12 +11,17 @@ | 
| #ifndef WEBRTC_MODULES_AUDIO_DEVICE_ANDROID_AUDIO_DEVICE_TEMPLATE_H_ | 
| #define WEBRTC_MODULES_AUDIO_DEVICE_ANDROID_AUDIO_DEVICE_TEMPLATE_H_ | 
|  | 
| +#include <android/log.h> | 
| + | 
| #include "webrtc/base/checks.h" | 
| #include "webrtc/base/thread_checker.h" | 
| #include "webrtc/modules/audio_device/android/audio_manager.h" | 
| #include "webrtc/modules/audio_device/audio_device_generic.h" | 
| #include "webrtc/system_wrappers/interface/trace.h" | 
|  | 
| +#define TAG "AudioDeviceTemplate" | 
| +#define ALOGW(...) __android_log_print(ANDROID_LOG_WARN, TAG, __VA_ARGS__) | 
| + | 
| namespace webrtc { | 
|  | 
| // InputType/OutputType can be any class that implements the capturing/rendering | 
| @@ -125,12 +130,6 @@ class AudioDeviceTemplate : public AudioDeviceGeneric { | 
| } | 
|  | 
| int32_t InitPlayout() override { | 
| -    // Switches the Android audio mode to MODE_IN_COMMUNICATION to ensure that | 
| -    // audio routing, volume control and echo performance are the best possible | 
| -    // for VoIP. InitRecording() does the same type of call but only the first | 
| -    // call has any effect. | 
| -    // This call does nothing if MODE_IN_COMMUNICATION was already set. | 
| -    audio_manager_->SetCommunicationMode(true); | 
| return output_.InitPlayout(); | 
| } | 
|  | 
| @@ -144,12 +143,6 @@ class AudioDeviceTemplate : public AudioDeviceGeneric { | 
| } | 
|  | 
| int32_t InitRecording() override { | 
| -    // Switches the Android audio mode to MODE_IN_COMMUNICATION to ensure that | 
| -    // audio routing, volume control and echo performance are the best possible | 
| -    // for VoIP. InitRecording() does the same type of call but only the first | 
| -    // call has any effect. | 
| -    // This call does nothing if MODE_IN_COMMUNICATION was already set. | 
| -    audio_manager_->SetCommunicationMode(true); | 
| return input_.InitRecording(); | 
| } | 
|  | 
| @@ -158,6 +151,9 @@ class AudioDeviceTemplate : public AudioDeviceGeneric { | 
| } | 
|  | 
| int32_t StartPlayout() override { | 
| +    if (!audio_manager_->IsCommunicationModeEnabled()) { | 
| +      ALOGW("The application should use MODE_IN_COMMUNICATION audio mode!"); | 
| +    } | 
| return output_.StartPlayout(); | 
| } | 
|  | 
| @@ -166,11 +162,6 @@ class AudioDeviceTemplate : public AudioDeviceGeneric { | 
| if (!Playing()) | 
| return 0; | 
| int32_t err = output_.StopPlayout(); | 
| -    if (!Recording()) { | 
| -      // Restore initial audio mode since all audio streaming is disabled. | 
| -      // The default mode was stored in Init(). | 
| -      audio_manager_->SetCommunicationMode(false); | 
| -    } | 
| return err; | 
| } | 
|  | 
| @@ -179,6 +170,9 @@ class AudioDeviceTemplate : public AudioDeviceGeneric { | 
| } | 
|  | 
| int32_t StartRecording() override { | 
| +    if (!audio_manager_->IsCommunicationModeEnabled()) { | 
| +      ALOGW("The application should use MODE_IN_COMMUNICATION audio mode!"); | 
| +    } | 
| return input_.StartRecording(); | 
| } | 
|  | 
| @@ -187,11 +181,6 @@ class AudioDeviceTemplate : public AudioDeviceGeneric { | 
| if (!Recording()) | 
| return 0; | 
| int32_t err = input_.StopRecording(); | 
| -    if (!Playing()) { | 
| -      // Restore initial audio mode since all audio streaming is disabled. | 
| -      // The default mode was is stored in Init(). | 
| -      audio_manager_->SetCommunicationMode(false); | 
| -    } | 
| return err; | 
| } | 
|  | 
|  |