diff options
| -rw-r--r-- | services/core/java/com/android/server/notification/ManagedServices.java | 21 | ||||
| -rw-r--r-- | services/core/java/com/android/server/notification/NotificationManagerService.java | 2 |
2 files changed, 20 insertions, 3 deletions
diff --git a/services/core/java/com/android/server/notification/ManagedServices.java b/services/core/java/com/android/server/notification/ManagedServices.java index 14e2ba3896d8..11cc52df180d 100644 --- a/services/core/java/com/android/server/notification/ManagedServices.java +++ b/services/core/java/com/android/server/notification/ManagedServices.java @@ -31,6 +31,7 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.ServiceConnection; import android.content.pm.ApplicationInfo; +import android.content.pm.IPackageManager; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.ResolveInfo; @@ -43,6 +44,7 @@ import android.os.Handler; import android.os.IBinder; import android.os.IInterface; import android.os.RemoteException; +import android.os.ServiceManager; import android.os.UserHandle; import android.os.UserManager; import android.provider.Settings; @@ -82,6 +84,7 @@ abstract public class ManagedServices { protected final Object mMutex; private final UserProfiles mUserProfiles; private final SettingsObserver mSettingsObserver; + private final IPackageManager mPm; private final Config mConfig; private ArraySet<String> mRestored; @@ -114,6 +117,7 @@ abstract public class ManagedServices { mContext = context; mMutex = mutex; mUserProfiles = userProfiles; + mPm = IPackageManager.Stub.asInterface(ServiceManager.getService("package")); mConfig = getConfig(); mSettingsObserver = new SettingsObserver(handler); @@ -575,8 +579,21 @@ abstract public class ManagedServices { for (int i = 0; i < nUserIds; ++i) { final Set<ComponentName> add = toAdd.get(userIds[i]); for (ComponentName component : add) { - Slog.v(TAG, "enabling " + getCaption() + " for " + userIds[i] + ": " + component); - registerService(component, userIds[i]); + try { + ServiceInfo info = mPm.getServiceInfo(component, + PackageManager.MATCH_DIRECT_BOOT_AWARE + | PackageManager.MATCH_DIRECT_BOOT_UNAWARE, userIds[i]); + if (!mConfig.bindPermission.equals(info.permission)) { + Slog.w(TAG, "Skipping " + getCaption() + " service " + component + + ": it does not require the permission " + mConfig.bindPermission); + continue; + } + Slog.v(TAG, + "enabling " + getCaption() + " for " + userIds[i] + ": " + component); + registerService(component, userIds[i]); + } catch (RemoteException e) { + e.rethrowFromSystemServer(); + } } } diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index a1aeeeaf7e06..3727a5b79440 100644 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -4938,7 +4938,7 @@ public class NotificationManagerService extends SystemService { private void notifyPosted(final ManagedServiceInfo info, final StatusBarNotification sbn, NotificationRankingUpdate rankingUpdate) { - final INotificationListener listener = (INotificationListener)info.service; + final INotificationListener listener = (INotificationListener) info.service; StatusBarNotificationHolder sbnHolder = new StatusBarNotificationHolder(sbn); try { listener.onNotificationPosted(sbnHolder, rankingUpdate); |