Merge "TTY: Telephony changes" into lmp-dev
diff --git a/res/values/strings.xml b/res/values/strings.xml
index c5d1c23..2825a7e 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -371,8 +371,8 @@
     </string-array>
     <!-- Mobile network settings screen, data enabling checkbox name -->
     <string name="data_enabled">Data enabled</string>
-    <!-- Mobile network settings screen, setting summary text when check box is not selected (explains what selecting it would do) -->
-    <string name="data_enable_summary">Enable data access over Cellular network</string>
+    <!-- Mobile network settings screen, setting summary text when check box is not selected (explains what selecting it would do) [CHAR LIMITS=40] -->
+    <string name="data_enable_summary">Allow data usage</string>
     <!-- Mobile network settings screen, setting check box name -->
     <string name="roaming">Data roaming</string>
     <!-- Mobile network settings screen, setting summary text when check box is selected -->
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index 2590aa4..5e8c9f5 100644
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -1177,14 +1177,16 @@
      * @throws SecurityException if the caller does not have the required permission/privilege
      */
     private void enforceModifyPermissionOrCarrierPrivilege() {
-        try {
-          mApp.enforceCallingOrSelfPermission(android.Manifest.permission.MODIFY_PHONE_STATE, null);
-        } catch (SecurityException e) {
-            log("No modify permission, check carrier privilege next.");
-            if (hasCarrierPrivileges() != TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS) {
-              loge("No Carrier Privilege.");
-              throw new SecurityException("No modify permission or carrier privilege.");
-            }
+        int permission = mApp.checkCallingOrSelfPermission(
+                android.Manifest.permission.MODIFY_PHONE_STATE);
+        if (permission == PackageManager.PERMISSION_GRANTED) {
+            return;
+        }
+
+        log("No modify permission, check carrier privilege next.");
+        if (hasCarrierPrivileges() != TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS) {
+            loge("No Carrier Privilege.");
+            throw new SecurityException("No modify permission or carrier privilege.");
         }
     }
 
@@ -1195,8 +1197,8 @@
      */
     private void enforceCarrierPrivilege() {
         if (hasCarrierPrivileges() != TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS) {
-          loge("No Carrier Privilege.");
-          throw new SecurityException("No Carrier Privilege.");
+            loge("No Carrier Privilege.");
+            throw new SecurityException("No Carrier Privilege.");
         }
     }
 
@@ -1679,47 +1681,14 @@
 
     @Override
     public int hasCarrierPrivileges() {
-        PackageManager packageManager = mPhone.getContext().getPackageManager();
-        String[] packages = packageManager.getPackagesForUid(Binder.getCallingUid());
-
-        for (String pkg : packages) {
-            try {
-                PackageInfo pInfo = packageManager.getPackageInfo(pkg,
-                    PackageManager.GET_SIGNATURES);
-                Signature[] signatures = pInfo.signatures;
-                for (Signature sig : signatures) {
-                    int hasAccess = UiccController.getInstance().getUiccCard().hasCarrierPrivileges(
-                            sig, pInfo.packageName);
-                    if (hasAccess != TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS) {
-                        return hasAccess;
-                    }
-                }
-            } catch (PackageManager.NameNotFoundException ex) {
-                loge("NameNotFoundException: " + ex);
-                continue;
-            }
-        }
-        return TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS;
+        return UiccController.getInstance().getUiccCard().getCarrierPrivilegeStatusForCurrentTransaction(
+                mPhone.getContext().getPackageManager());
     }
 
     @Override
     public int checkCarrierPrivilegesForPackage(String pkgname) {
-        PackageManager packageManager = mPhone.getContext().getPackageManager();
-        try {
-            PackageInfo pInfo = packageManager.getPackageInfo(pkgname,
-                PackageManager.GET_SIGNATURES);
-            Signature[] signatures = pInfo.signatures;
-            for (Signature sig : signatures) {
-                int hasAccess = UiccController.getInstance().getUiccCard().hasCarrierPrivileges(
-                        sig, pInfo.packageName);
-                if (hasAccess != TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS) {
-                    return hasAccess;
-                }
-            }
-        } catch (PackageManager.NameNotFoundException ex) {
-            loge("NameNotFoundException: " + ex);
-        }
-        return TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS;
+        return UiccController.getInstance().getUiccCard().getCarrierPrivilegeStatus(
+                mPhone.getContext().getPackageManager(), pkgname);
     }
 
     @Override
diff --git a/src/com/android/services/telephony/TelephonyConnectionService.java b/src/com/android/services/telephony/TelephonyConnectionService.java
index 626244e..2d55165 100644
--- a/src/com/android/services/telephony/TelephonyConnectionService.java
+++ b/src/com/android/services/telephony/TelephonyConnectionService.java
@@ -19,6 +19,7 @@
 import android.content.ComponentName;
 import android.content.Context;
 import android.net.Uri;
+import android.os.Debug;
 import android.telephony.DisconnectCause;
 import android.telephony.ServiceState;
 import android.text.TextUtils;
@@ -184,7 +185,7 @@
 
         if (phone.getPhoneType() == TelephonyManager.PHONE_TYPE_GSM) {
             response.onSuccess(telephonyRequest, new GsmConnection(originalConnection));
-        } else if (phone.getPhoneType() == TelephonyManager.PHONE_TYPE_GSM) {
+        } else if (phone.getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA) {
             response.onSuccess(telephonyRequest, new CdmaConnection(originalConnection));
         } else {
             response.onCancel(request);
@@ -239,9 +240,11 @@
 
         if (phone.getPhoneType() == TelephonyManager.PHONE_TYPE_GSM) {
             response.onSuccess(telephonyRequest, new GsmConnection(originalConnection));
-        } else if (phone.getPhoneType() == TelephonyManager.PHONE_TYPE_GSM) {
+        } else if (phone.getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA) {
             response.onSuccess(telephonyRequest, new CdmaConnection(originalConnection));
         } else {
+            // TODO(ihab): Tear down 'originalConnection' here, or move recognition of
+            // getPhoneType() earlier in this method before we've already asked phone to dial()
             response.onFailure(request, DisconnectCause.ERROR_UNSPECIFIED, "Invalid phone type");
         }
     }