Avoids update of WebRTC.Audio.SourceMatchesRecordingSession for Android < N

Before this change we always logged false in WebRTC.Audio.SourceMatchesRecordingSession
even when a test had not been executed (happens e.g. for Android < N).

This issue is now fixed and we only update WebRTC.Audio.SourceMatchesRecordingSession
if a valid test has been performed.

No-Try: True
TBR: glaznev
Bug: webrtc:10971
Change-Id: I907197476f00b812c67bb71e8fdcd6f297cfbdee
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/154563
Commit-Queue: Henrik Andreassson <henrika@webrtc.org>
Reviewed-by: Henrik Andreassson <henrika@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#29324}
diff --git a/sdk/android/src/java/org/webrtc/audio/WebRtcAudioRecord.java b/sdk/android/src/java/org/webrtc/audio/WebRtcAudioRecord.java
index 8136bca..42570d8 100644
--- a/sdk/android/src/java/org/webrtc/audio/WebRtcAudioRecord.java
+++ b/sdk/android/src/java/org/webrtc/audio/WebRtcAudioRecord.java
@@ -93,7 +93,7 @@
 
   private volatile boolean microphoneMute;
   private boolean audioSourceMatchesRecordingSession;
-  private boolean audioConfigHasBeenVerified;
+  private boolean isAudioConfigVerified;
   private byte[] emptyBytes;
 
   private final @Nullable AudioRecordErrorCallback errorCallback;
@@ -221,13 +221,20 @@
     return isNoiseSuppressorSupported;
   }
 
+  // Returns true if a valid call to verifyAudioConfig() has been done. Should always be
+  // checked before using the returned value of isAudioSourceMatchingRecordingSession().
   @CalledByNative
+  boolean isAudioConfigVerified() {
+    return isAudioConfigVerified;
+  }
+
   // Returns true if verifyAudioConfig() succeeds. This value is set after a specific delay when
   // startRecording() has been called. Hence, should preferably be called in combination with
-  // stopRecording() to ensure that it has been set properly. |audioConfigHasBeenChecked| is
+  // stopRecording() to ensure that it has been set properly. |isAudioConfigVerified| is
   // enabled in WebRtcAudioRecord to ensure that the returned value is valid.
+  @CalledByNative
   boolean isAudioSourceMatchingRecordingSession() {
-    if (!audioConfigHasBeenVerified) {
+    if (!isAudioConfigVerified) {
       Logging.w(TAG, "Audio configuration has not yet been verified");
       return false;
     }
@@ -434,7 +441,7 @@
         audioSourceMatchesRecordingSession =
             verifyAudioConfig(audioRecord.getAudioSource(), audioRecord.getAudioSessionId(),
                 audioRecord.getFormat(), audioRecord.getRoutedDevice(), configs);
-        audioConfigHasBeenVerified = true;
+        isAudioConfigVerified = true;
       }
     }
     return numActiveRecordingSessions;
diff --git a/sdk/android/src/jni/audio_device/audio_record_jni.cc b/sdk/android/src/jni/audio_device/audio_record_jni.cc
index 5e39be9..15c290c 100644
--- a/sdk/android/src/jni/audio_device/audio_record_jni.cc
+++ b/sdk/android/src/jni/audio_device/audio_record_jni.cc
@@ -158,13 +158,17 @@
   if (!initialized_ || !recording_) {
     return 0;
   }
-  const bool session_was_ok =
-      Java_WebRtcAudioRecord_isAudioSourceMatchingRecordingSession(
-          env_, j_audio_record_);
-  RTC_HISTOGRAM_BOOLEAN("WebRTC.Audio.SourceMatchesRecordingSession",
-                        session_was_ok);
-  RTC_LOG(INFO) << "HISTOGRAM(WebRTC.Audio.SourceMatchesRecordingSession): "
-                << session_was_ok;
+  // Check if the audio source matched the activated recording session but only
+  // if a valid results exists to avoid invalid statistics.
+  if (Java_WebRtcAudioRecord_isAudioConfigVerified(env_, j_audio_record_)) {
+    const bool session_was_ok =
+        Java_WebRtcAudioRecord_isAudioSourceMatchingRecordingSession(
+            env_, j_audio_record_);
+    RTC_HISTOGRAM_BOOLEAN("WebRTC.Audio.SourceMatchesRecordingSession",
+                          session_was_ok);
+    RTC_LOG(INFO) << "HISTOGRAM(WebRTC.Audio.SourceMatchesRecordingSession): "
+                  << session_was_ok;
+  }
   if (!Java_WebRtcAudioRecord_stopRecording(env_, j_audio_record_)) {
     RTC_LOG(LS_ERROR) << "StopRecording failed";
     return -1;