Add Authentication Type field to the APN settings.

Use auth type to setup data connection.
This value defaults to -1 (unset) to maintain compatibility.
When the value is -1, the auth type gets set to 0 (if no user is specified)
or 3.
Bug: 181700
diff --git a/core/java/android/provider/Telephony.java b/core/java/android/provider/Telephony.java
index 042c75e..d8c5a53 100644
--- a/core/java/android/provider/Telephony.java
+++ b/core/java/android/provider/Telephony.java
@@ -1669,6 +1669,8 @@
 
         public static final String NUMERIC = "numeric";
 
+        public static final String AUTH_TYPE = "authtype";
+
         public static final String TYPE = "type";
 
         public static final String CURRENT = "current";
diff --git a/telephony/java/com/android/internal/telephony/gsm/ApnSetting.java b/telephony/java/com/android/internal/telephony/gsm/ApnSetting.java
index dc6f92d..8d807fd 100644
--- a/telephony/java/com/android/internal/telephony/gsm/ApnSetting.java
+++ b/telephony/java/com/android/internal/telephony/gsm/ApnSetting.java
@@ -31,6 +31,7 @@
     String mmsPort;
     String user;
     String password;
+    int authType;
     String[] types;
     int id;
     String numeric;
@@ -38,7 +39,7 @@
 
     ApnSetting(int id, String numeric, String carrier, String apn, String proxy, String port,
             String mmsc, String mmsProxy, String mmsPort,
-            String user, String password, String[] types) {
+            String user, String password, int authType, String[] types) {
         this.id = id;
         this.numeric = numeric;
         this.carrier = carrier;
@@ -50,6 +51,7 @@
         this.mmsPort = mmsPort;
         this.user = user;
         this.password = password;
+        this.authType = authType;
         this.types = types;
     }
 
@@ -63,7 +65,8 @@
         .append(", ").append(mmsc)
         .append(", ").append(mmsProxy)
         .append(", ").append(mmsPort)
-        .append(", ").append(port);
+        .append(", ").append(port)
+        .append(", ").append(authType);
         for (String t : types) {
             sb.append(", ").append(t);
         }
diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
index ffd6dd3..d014a7e 100644
--- a/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
+++ b/telephony/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java
@@ -556,6 +556,7 @@
                         cursor.getString(cursor.getColumnIndexOrThrow(Telephony.Carriers.MMSPORT)),
                         cursor.getString(cursor.getColumnIndexOrThrow(Telephony.Carriers.USER)),
                         cursor.getString(cursor.getColumnIndexOrThrow(Telephony.Carriers.PASSWORD)),
+                        cursor.getInt(cursor.getColumnIndexOrThrow(Telephony.Carriers.AUTH_TYPE)),
                         types);
                 result.add(apn);
             } while (cursor.moveToNext());
diff --git a/telephony/java/com/android/internal/telephony/gsm/PdpConnection.java b/telephony/java/com/android/internal/telephony/gsm/PdpConnection.java
index 224419e..cb85002 100644
--- a/telephony/java/com/android/internal/telephony/gsm/PdpConnection.java
+++ b/telephony/java/com/android/internal/telephony/gsm/PdpConnection.java
@@ -84,9 +84,11 @@
         lastFailCause = FailCause.NONE;
         receivedDisconnectReq = false;
 
-        int authType = (apn.user != null) ? RILConstants.SETUP_DATA_AUTH_PAP_CHAP :
-            RILConstants.SETUP_DATA_AUTH_NONE;
-
+        int authType = apn.authType;
+        if (authType == -1) {
+            authType = (apn.user != null) ? RILConstants.SETUP_DATA_AUTH_PAP_CHAP :
+                RILConstants.SETUP_DATA_AUTH_NONE;
+        }
         phone.mCM.setupDataCall(Integer.toString(RILConstants.SETUP_DATA_TECH_GSM),
                 Integer.toString(RILConstants.DATA_PROFILE_DEFAULT), apn.apn, apn.user,
                 apn.password, Integer.toString(authType),