Merge "Handle package install/uninstall/update events." into mnc-dev
diff --git a/res/values/strings.xml b/res/values/strings.xml
index ab074e4..1ce9e9c 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1283,7 +1283,7 @@
     <string name="message_decode_error">There was an error while decoding the message.</string>
 
     <!-- Call failure reason: SIM card and roaming capabilities have already been activated. [CHAR LIMIT=NONE]-->
-    <string name="callFailed_cdma_activation_">
+    <string name="callFailed_cdma_activation">
         A SIM card has activated your service and updated your phone\'s roaming capabilities.
     </string>
 
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index ec8ce40..5a51d2e 100644
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -227,15 +227,18 @@
             IccAPDUArgument iccArgument;
 
             switch (msg.what) {
-                case CMD_HANDLE_PIN_MMI:
+                case CMD_HANDLE_PIN_MMI: {
                     request = (MainThreadRequest) msg.obj;
-                    request.result = getPhoneFromRequest(request).handlePinMmi(
-                            (String) request.argument);
+                    final Phone phone = getPhoneFromRequest(request);
+                    request.result = phone != null ?
+                            getPhoneFromRequest(request).handlePinMmi((String) request.argument)
+                            : false;
                     // Wake up the requesting thread
                     synchronized (request) {
                         request.notifyAll();
                     }
                     break;
+                }
 
                 case CMD_HANDLE_NEIGHBORING_CELL:
                     request = (MainThreadRequest) msg.obj;
diff --git a/src/com/android/services/telephony/DisconnectCauseUtil.java b/src/com/android/services/telephony/DisconnectCauseUtil.java
index aaaf7db..4a92847 100644
--- a/src/com/android/services/telephony/DisconnectCauseUtil.java
+++ b/src/com/android/services/telephony/DisconnectCauseUtil.java
@@ -95,6 +95,7 @@
                 return DisconnectCause.RESTRICTED;
 
             case android.telephony.DisconnectCause.CDMA_ACCESS_FAILURE:
+            case android.telephony.DisconnectCause.CDMA_ALREADY_ACTIVATED:
             case android.telephony.DisconnectCause.CDMA_CALL_LOST:
             case android.telephony.DisconnectCause.CDMA_DROP:
             case android.telephony.DisconnectCause.CDMA_INTERCEPT:
@@ -230,6 +231,10 @@
                 resourceId = R.string.callFailed_cb_enabled;
                 break;
 
+            case android.telephony.DisconnectCause.CDMA_ALREADY_ACTIVATED:
+                resourceId = R.string.callFailed_cdma_activation;
+                break;
+
             case android.telephony.DisconnectCause.FDN_BLOCKED:
                 resourceId = R.string.callFailed_fdn_only;
                 break;
diff --git a/src/com/android/services/telephony/TelephonyConnectionService.java b/src/com/android/services/telephony/TelephonyConnectionService.java
index 7826ce0..d1f3dc2 100644
--- a/src/com/android/services/telephony/TelephonyConnectionService.java
+++ b/src/com/android/services/telephony/TelephonyConnectionService.java
@@ -185,7 +185,8 @@
                         if (disableActivation) {
                             return Connection.createFailedConnection(
                                     DisconnectCauseUtil.toTelecomDisconnectCause(
-                                            android.telephony.DisconnectCause.INVALID_NUMBER,
+                                            android.telephony.DisconnectCause
+                                                    .CDMA_ALREADY_ACTIVATED,
                                             "Tried to dial *228"));
                         }
                     }