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);
}