From bdc3a46312dda68b4dfdf37a202fc791eb639610 Mon Sep 17 00:00:00 2001 From: Ye Wen Date: Tue, 11 Nov 2014 11:17:28 -0800 Subject: [PATCH] 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 --- .../com/android/server/MmsServiceBroker.java | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/services/core/java/com/android/server/MmsServiceBroker.java b/services/core/java/com/android/server/MmsServiceBroker.java index 9596b57a5e154..da507519676e4 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.os.SystemClock; 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 class MmsServiceBroker extends SystemService { } public void systemRunning() { - tryConnecting(); + Slog.i(TAG, "Delay connecting to MmsService until an API is called"); } private void tryConnecting() { @@ -206,7 +206,7 @@ public class MmsServiceBroker extends SystemService { * 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 @@ public class MmsServiceBroker extends SystemService { 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 class MmsServiceBroker extends SystemService { 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 @@ public class MmsServiceBroker extends SystemService { @Override public Bundle getCarrierConfigValues(int subId) throws RemoteException { + Slog.d(TAG, "getCarrierConfigValues() by " + getCallingPackageName()); return getServiceGuarded().getCarrierConfigValues(subId); }