Merge "Don't crash if unbinding from InCallService fails" into mnc-dev
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 5a6a9c5..5f5c249 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -26,7 +26,7 @@
     <string name="notification_missedCall_message" msgid="3049928912736917988">"Mensaje"</string>
     <string name="accessibility_call_muted" msgid="2776111226185342220">"Llamada silenciada"</string>
     <string name="accessibility_speakerphone_enabled" msgid="1988512040421036359">"Altavoz habilitado"</string>
-    <string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"No puedo hablar ahora. ¿Qué pasa?"</string>
+    <string name="respond_via_sms_canned_response_1" msgid="2461606462788380215">"No puedo hablar ahora. ¿Todo bien?"</string>
     <string name="respond_via_sms_canned_response_2" msgid="4074450431532859214">"Te llamo enseguida."</string>
     <string name="respond_via_sms_canned_response_3" msgid="3496079065723960450">"Te llamo más tarde."</string>
     <string name="respond_via_sms_canned_response_4" msgid="1698989243040062190">"No puedo hablar ahora. ¿Me llamas más tarde?"</string>
diff --git a/src/com/android/server/telecom/TelecomServiceImpl.java b/src/com/android/server/telecom/TelecomServiceImpl.java
index 071b90d..e874fc0 100644
--- a/src/com/android/server/telecom/TelecomServiceImpl.java
+++ b/src/com/android/server/telecom/TelecomServiceImpl.java
@@ -19,8 +19,6 @@
 import static android.Manifest.permission.CALL_PHONE;
 import static android.Manifest.permission.MODIFY_PHONE_STATE;
 import static android.Manifest.permission.READ_PHONE_STATE;
-import static android.Manifest.permission.REGISTER_CALL_PROVIDER;
-import static android.Manifest.permission.REGISTER_CONNECTION_MANAGER;
 import static android.Manifest.permission.REGISTER_SIM_SUBSCRIPTION;
 import static android.Manifest.permission.WRITE_SECURE_SETTINGS;
 
@@ -745,14 +743,19 @@
                 Log.i(this, "Adding new incoming call with phoneAccountHandle %s",
                         phoneAccountHandle);
                 if (phoneAccountHandle != null && phoneAccountHandle.getComponentName() != null) {
-                    mAppOpsManager.checkPackage(
-                            Binder.getCallingUid(),
-                            phoneAccountHandle.getComponentName().getPackageName());
+                    // TODO(sail): Add unit tests for adding incoming calls from a SIM call manager.
+                    if (isCallerSimCallManager() && TelephonyUtil.isPstnComponentName(
+                            phoneAccountHandle.getComponentName())) {
+                        Log.v(this, "Allowing call manager to add incoming call with PSTN handle");
+                    } else {
+                        mAppOpsManager.checkPackage(
+                                Binder.getCallingUid(),
+                                phoneAccountHandle.getComponentName().getPackageName());
+                        // Make sure it doesn't cross the UserHandle boundary
+                        enforceUserHandleMatchesCaller(phoneAccountHandle);
+                    }
 
-                    // Make sure it doesn't cross the UserHandle boundary
-                    enforceUserHandleMatchesCaller(phoneAccountHandle);
                     long token = Binder.clearCallingIdentity();
-
                     try {
                         Intent intent = new Intent(TelecomManager.ACTION_INCOMING_CALL);
                         intent.putExtra(TelecomManager.EXTRA_PHONE_ACCOUNT_HANDLE,
@@ -1079,18 +1082,10 @@
         enforceFeature(PackageManager.FEATURE_CONNECTION_SERVICE);
     }
 
-    private void enforceRegisterCallProviderPermission() {
-        enforcePermission(REGISTER_CALL_PROVIDER);
-    }
-
     private void enforceRegisterSimSubscriptionPermission() {
         enforcePermission(REGISTER_SIM_SUBSCRIPTION);
     }
 
-    private void enforceRegisterConnectionManagerPermission() {
-        enforcePermission(REGISTER_CONNECTION_MANAGER);
-    }
-
     private void enforceModifyPermission() {
         enforcePermission(MODIFY_PHONE_STATE);
     }