Adds support for Bluetooth headsets to the iOS audio layer.

This patch also also ensures that audio is restored after an incoming
GSM call.

BUG=webrtc:5058, webrtc:5012
TEST=Manual tests using modified AppRTCDemo and three different BT headsets

Review URL: https://codereview.webrtc.org/1401963002

Cr-Commit-Position: refs/heads/master@{#10354}
diff --git a/webrtc/modules/utility/source/helpers_ios.mm b/webrtc/modules/utility/source/helpers_ios.mm
index d362530..90b7c8f 100644
--- a/webrtc/modules/utility/source/helpers_ios.mm
+++ b/webrtc/modules/utility/source/helpers_ios.mm
@@ -10,6 +10,7 @@
 
 #if defined(WEBRTC_IOS)
 
+#import <AVFoundation/AVFoundation.h>
 #import <Foundation/Foundation.h>
 #import <sys/sysctl.h>
 #import <UIKit/UIKit.h>
@@ -57,6 +58,11 @@
   return StdStringFromNSString(name);
 }
 
+std::string GetAudioSessionCategory() {
+  NSString* category = [[AVAudioSession sharedInstance] category];
+  return StdStringFromNSString(category);
+}
+
 std::string GetSystemName() {
   NSString* osName = [[UIDevice currentDevice] systemName];
   return StdStringFromNSString(osName);
@@ -112,6 +118,10 @@
     return std::string("iPhone 6 Plus");
   if (!raw_name.compare("iPhone7,2"))
     return std::string("iPhone 6");
+  if (!raw_name.compare("iPhone8,1"))
+    return std::string("iPhone 6s");
+  if (!raw_name.compare("iPhone8,2"))
+    return std::string("iPhone 6s Plus");
   if (!raw_name.compare("iPod1,1"))
     return std::string("iPod Touch 1G");
   if (!raw_name.compare("iPod2,1"))
@@ -162,7 +172,7 @@
     return std::string("Simulator");
   if (!raw_name.compare("x86_64"))
     return std::string("Simulator");
-  LOG(LS_WARNING) << "Failed to find device name";
+  LOG(LS_WARNING) << "Failed to find device name (" << raw_name << ")";
   return raw_name;
 }