Now uses AudioRecord.Builder on Android again.

I tried to land the same change by reverting https://webrtc-review.googlesource.com/c/src/+/34443
but the revert failed and I therefore land it manually here instead.

TBR=glaznev@webrtc.org

Bug: b/32742417
Change-Id: Ied8ed3e7c7d67c51f781e39cbea952a2303278d9
Reviewed-on: https://webrtc-review.googlesource.com/34442
Reviewed-by: Henrik Andreassson <henrika@webrtc.org>
Commit-Queue: Henrik Andreassson <henrika@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#21351}
diff --git a/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioRecord.java b/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioRecord.java
index 73cf35d..a11f56d 100644
--- a/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioRecord.java
+++ b/modules/audio_device/android/java/src/org/webrtc/voiceengine/WebRtcAudioRecord.java
@@ -201,8 +201,16 @@
     int bufferSizeInBytes = Math.max(BUFFER_SIZE_FACTOR * minBufferSize, byteBuffer.capacity());
     Logging.d(TAG, "bufferSizeInBytes: " + bufferSizeInBytes);
     try {
-      audioRecord = new AudioRecord(audioSource, sampleRate, channelConfig,
-          AudioFormat.ENCODING_PCM_16BIT, bufferSizeInBytes);
+      if (WebRtcAudioUtils.runningOnMarshmallowOrHigher()) {
+        // Use AudioRecord.Builder to create the AudioRecord instance if we are
+        // on API level 23 or higher.
+        audioRecord = createAudioRecordOnMarshmallowOrHigher(
+            sampleRate, channelConfig, bufferSizeInBytes);
+      } else {
+        // Use default constructor for API levels below 23.
+        audioRecord = new AudioRecord(audioSource, sampleRate, channelConfig,
+            AudioFormat.ENCODING_PCM_16BIT, bufferSizeInBytes);
+      }
     } catch (IllegalArgumentException e) {
       reportWebRtcAudioRecordInitError("AudioRecord ctor error: " + e.getMessage());
       releaseAudioResources();
@@ -276,6 +284,22 @@
     }
   }
 
+  // Creates an AudioRecord instance using AudioRecord.Builder.
+  @TargetApi(23)
+  private AudioRecord createAudioRecordOnMarshmallowOrHigher(
+    int sampleRateInHz, int channelConfig, int bufferSizeInBytes) {
+    Logging.d(TAG, "createAudioRecordOnMarshmallowOrHigher");
+    return new AudioRecord.Builder()
+        .setAudioSource(audioSource)
+        .setAudioFormat(new AudioFormat.Builder()
+            .setEncoding(AudioFormat.ENCODING_PCM_16BIT)
+            .setSampleRate(sampleRateInHz)
+            .setChannelMask(channelConfig)
+            .build())
+        .setBufferSizeInBytes(bufferSizeInBytes)
+        .build();
+  }
+
   // Helper method which throws an exception  when an assertion has failed.
   private static void assertTrue(boolean condition) {
     if (!condition) {