Ensures that ADM for Android and iOS uses identical states when stopping audio

BUG=b/25975010
TBR=tkchin
NOTRY=TRUE

Review-Url: https://codereview.webrtc.org/2349263004
Cr-Commit-Position: refs/heads/master@{#14328}
diff --git a/webrtc/modules/audio_device/ios/audio_device_ios.h b/webrtc/modules/audio_device/ios/audio_device_ios.h
index efe2558..5aa3b70 100644
--- a/webrtc/modules/audio_device/ios/audio_device_ios.h
+++ b/webrtc/modules/audio_device/ios/audio_device_ios.h
@@ -54,10 +54,10 @@
   bool Initialized() const override { return initialized_; }
 
   int32_t InitPlayout() override;
-  bool PlayoutIsInitialized() const override { return play_is_initialized_; }
+  bool PlayoutIsInitialized() const override { return audio_is_initialized_; }
 
   int32_t InitRecording() override;
-  bool RecordingIsInitialized() const override { return rec_is_initialized_; }
+  bool RecordingIsInitialized() const override { return audio_is_initialized_; }
 
   int32_t StartPlayout() override;
   int32_t StopPlayout() override;
@@ -280,11 +280,9 @@
   // Set to true after successful call to Init(), false otherwise.
   bool initialized_;
 
-  // Set to true after successful call to InitRecording(), false otherwise.
-  bool rec_is_initialized_;
-
-  // Set to true after successful call to InitPlayout(), false otherwise.
-  bool play_is_initialized_;
+  // Set to true after successful call to InitRecording() or InitPlayout(),
+  // false otherwise.
+  bool audio_is_initialized_;
 
   // Set to true if audio session is interrupted, false otherwise.
   bool is_interrupted_;
diff --git a/webrtc/modules/audio_device/ios/audio_device_ios.mm b/webrtc/modules/audio_device/ios/audio_device_ios.mm
index 3a745a4b..8f562a7 100644
--- a/webrtc/modules/audio_device/ios/audio_device_ios.mm
+++ b/webrtc/modules/audio_device/ios/audio_device_ios.mm
@@ -97,8 +97,7 @@
       recording_(0),
       playing_(0),
       initialized_(false),
-      rec_is_initialized_(false),
-      play_is_initialized_(false),
+      audio_is_initialized_(false),
       is_interrupted_(false),
       has_configured_session_(false) {
   LOGI() << "ctor" << ios::GetCurrentThreadDescription();
@@ -165,15 +164,15 @@
   LOGI() << "InitPlayout";
   RTC_DCHECK(thread_checker_.CalledOnValidThread());
   RTC_DCHECK(initialized_);
-  RTC_DCHECK(!play_is_initialized_);
+  RTC_DCHECK(!audio_is_initialized_);
   RTC_DCHECK(!playing_);
-  if (!rec_is_initialized_) {
+  if (!audio_is_initialized_) {
     if (!InitPlayOrRecord()) {
       LOG_F(LS_ERROR) << "InitPlayOrRecord failed for InitPlayout!";
       return -1;
     }
   }
-  play_is_initialized_ = true;
+  audio_is_initialized_ = true;
   return 0;
 }
 
@@ -181,22 +180,22 @@
   LOGI() << "InitRecording";
   RTC_DCHECK(thread_checker_.CalledOnValidThread());
   RTC_DCHECK(initialized_);
-  RTC_DCHECK(!rec_is_initialized_);
+  RTC_DCHECK(!audio_is_initialized_);
   RTC_DCHECK(!recording_);
-  if (!play_is_initialized_) {
+  if (!audio_is_initialized_) {
     if (!InitPlayOrRecord()) {
       LOG_F(LS_ERROR) << "InitPlayOrRecord failed for InitRecording!";
       return -1;
     }
   }
-  rec_is_initialized_ = true;
+  audio_is_initialized_ = true;
   return 0;
 }
 
 int32_t AudioDeviceIOS::StartPlayout() {
   LOGI() << "StartPlayout";
   RTC_DCHECK(thread_checker_.CalledOnValidThread());
-  RTC_DCHECK(play_is_initialized_);
+  RTC_DCHECK(audio_is_initialized_);
   RTC_DCHECK(!playing_);
   RTC_DCHECK(audio_unit_);
   if (fine_audio_buffer_) {
@@ -217,17 +216,13 @@
 int32_t AudioDeviceIOS::StopPlayout() {
   LOGI() << "StopPlayout";
   RTC_DCHECK(thread_checker_.CalledOnValidThread());
-  if (!play_is_initialized_) {
-    return 0;
-  }
-  if (!playing_) {
-    play_is_initialized_ = false;
+  if (!audio_is_initialized_ || !playing_) {
     return 0;
   }
   if (!recording_) {
     ShutdownPlayOrRecord();
+    audio_is_initialized_ = false;
   }
-  play_is_initialized_ = false;
   rtc::AtomicOps::ReleaseStore(&playing_, 0);
   return 0;
 }
@@ -235,7 +230,7 @@
 int32_t AudioDeviceIOS::StartRecording() {
   LOGI() << "StartRecording";
   RTC_DCHECK(thread_checker_.CalledOnValidThread());
-  RTC_DCHECK(rec_is_initialized_);
+  RTC_DCHECK(audio_is_initialized_);
   RTC_DCHECK(!recording_);
   RTC_DCHECK(audio_unit_);
   if (fine_audio_buffer_) {
@@ -256,17 +251,13 @@
 int32_t AudioDeviceIOS::StopRecording() {
   LOGI() << "StopRecording";
   RTC_DCHECK(thread_checker_.CalledOnValidThread());
-  if (!rec_is_initialized_) {
-    return 0;
-  }
-  if (!recording_) {
-    rec_is_initialized_ = false;
+  if (!audio_is_initialized_ || !recording_) {
     return 0;
   }
   if (!playing_) {
     ShutdownPlayOrRecord();
+    audio_is_initialized_ = false;
   }
-  rec_is_initialized_ = false;
   rtc::AtomicOps::ReleaseStore(&recording_, 0);
   return 0;
 }
@@ -689,7 +680,7 @@
 
   // If we're not initialized we don't need to do anything. Audio unit will
   // be initialized on initialization.
-  if (!rec_is_initialized_ && !play_is_initialized_)
+  if (!audio_is_initialized_)
     return;
 
   // If we're initialized, we must have an audio unit.