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
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user