Delay connecting to MmsService until APIs are called for imms

Eagerly connecting to MmsService in MmsServiceBroker during system
bootup caused a 2-second delay. Removing the connection in this CL. The
connection will be made when any of the API is called.

b/18085396

Change-Id: I201abcb5f8c5ac69e347e2c69fd20b8215bb0654
diff --git a/services/core/java/com/android/server/MmsServiceBroker.java b/services/core/java/com/android/server/MmsServiceBroker.java
index 9596b57..da50751 100644
--- a/services/core/java/com/android/server/MmsServiceBroker.java
+++ b/services/core/java/com/android/server/MmsServiceBroker.java
@@ -16,8 +16,6 @@
 
 package com.android.server;
 
-import com.android.internal.telephony.IMms;
-
 import android.Manifest;
 import android.app.AppOpsManager;
 import android.app.PendingIntent;
@@ -38,6 +36,8 @@
 import android.telephony.TelephonyManager;
 import android.util.Slog;
 
+import com.android.internal.telephony.IMms;
+
 /**
  * This class is a proxy for MmsService APIs. We need this because MmsService runs
  * in phone process and may crash anytime. This manages a connection to the actual
@@ -118,7 +118,7 @@
     }
 
     public void systemRunning() {
-        tryConnecting();
+        Slog.i(TAG, "Delay connecting to MmsService until an API is called");
     }
 
     private void tryConnecting() {
@@ -206,7 +206,7 @@
      * Throws a security exception unless the caller has carrier privilege.
      */
     private void enforceCarrierPrivilege() {
-        String[] packages = getPackageManager().getPackagesForUid(Binder.getCallingUid());
+        final String[] packages = getPackageManager().getPackagesForUid(Binder.getCallingUid());
         for (String pkg : packages) {
             if (getTelephonyManager().checkCarrierPrivilegesForPackage(pkg) ==
                     TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS) {
@@ -216,12 +216,21 @@
         throw new SecurityException("No carrier privilege");
     }
 
+    private String getCallingPackageName() {
+        final String[] packages = getPackageManager().getPackagesForUid(Binder.getCallingUid());
+        if (packages != null && packages.length > 0) {
+            return packages[0];
+        }
+        return "unknown";
+    }
+
     // Service API calls implementation, proxied to the real MmsService in "com.android.mms.service"
     private final class BinderService extends IMms.Stub {
         @Override
         public void sendMessage(int subId, String callingPkg, Uri contentUri,
                 String locationUrl, Bundle configOverrides, PendingIntent sentIntent)
                         throws RemoteException {
+            Slog.d(TAG, "sendMessage() by " + callingPkg);
             mContext.enforceCallingPermission(Manifest.permission.SEND_SMS, "Send MMS message");
             if (getAppOpsManager().noteOp(AppOpsManager.OP_SEND_SMS, Binder.getCallingUid(),
                     callingPkg) != AppOpsManager.MODE_ALLOWED) {
@@ -235,6 +244,7 @@
         public void downloadMessage(int subId, String callingPkg, String locationUrl,
                 Uri contentUri, Bundle configOverrides,
                 PendingIntent downloadedIntent) throws RemoteException {
+            Slog.d(TAG, "downloadMessage() by " + callingPkg);
             mContext.enforceCallingPermission(Manifest.permission.RECEIVE_MMS,
                     "Download MMS message");
             if (getAppOpsManager().noteOp(AppOpsManager.OP_RECEIVE_MMS, Binder.getCallingUid(),
@@ -260,6 +270,7 @@
 
         @Override
         public Bundle getCarrierConfigValues(int subId) throws RemoteException {
+            Slog.d(TAG, "getCarrierConfigValues() by " + getCallingPackageName());
             return getServiceGuarded().getCarrierConfigValues(subId);
         }