summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jaewan Kim <jaewan@google.com> 2020-09-02 17:47:34 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2020-09-02 17:47:34 +0000
commitc9e9c31236d667bb58cf1abe12bd38654443e9c9 (patch)
treee03380d6b2bfb62e0223ba9f9284066edde26815
parent3874b25361a2251af1efc4624938cb3ef7b005f1 (diff)
parent170c118b8105c9bb55d801e2eb4e6c12a89ac80c (diff)
DO NOT MERGE: Fix incorrect use of UserHandle#getUserHandleForUid(int uid) am: 170c118b81
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/12400346 Change-Id: Ia7eb73ca3583ab0a9f8e9a01ea7cf8030924926f
-rw-r--r--services/core/java/com/android/server/media/MediaSessionService.java21
1 files changed, 11 insertions, 10 deletions
diff --git a/services/core/java/com/android/server/media/MediaSessionService.java b/services/core/java/com/android/server/media/MediaSessionService.java
index 9e91a9f0ab68..5867f63fba94 100644
--- a/services/core/java/com/android/server/media/MediaSessionService.java
+++ b/services/core/java/com/android/server/media/MediaSessionService.java
@@ -1937,7 +1937,8 @@ public class MediaSessionService extends SystemService implements Monitor {
// Context#getPackageName() for getting package name that matches with the PID/UID,
// but it doesn't tell which package has created the MediaController, so useless.
return hasMediaControlPermission(controllerPid, controllerUid)
- || hasEnabledNotificationListener(userId, controllerPackageName);
+ || hasEnabledNotificationListener(
+ userId, controllerPackageName, controllerUid);
} finally {
Binder.restoreCallingIdentity(token);
}
@@ -2001,29 +2002,29 @@ public class MediaSessionService extends SystemService implements Monitor {
return resolvedUserId;
}
- private boolean hasEnabledNotificationListener(int resolvedUserId, String packageName)
- throws RemoteException {
- // You may not access another user's content as an enabled listener.
- final int userId = UserHandle.getUserId(resolvedUserId);
- if (resolvedUserId != userId) {
+ private boolean hasEnabledNotificationListener(int callingUserId,
+ String controllerPackageName, int controllerUid) throws RemoteException {
+ int controllerUserId = UserHandle.getUserHandleForUid(controllerUid).getIdentifier();
+ if (callingUserId != controllerUserId) {
+ // Enabled notification listener only works within the same user.
return false;
}
// TODO(jaewan): (Post-P) Propose NotificationManager#hasEnabledNotificationListener(
// String pkgName) to notification team for optimization
final List<ComponentName> enabledNotificationListeners =
- mNotificationManager.getEnabledNotificationListeners(userId);
+ mNotificationManager.getEnabledNotificationListeners(controllerUserId);
if (enabledNotificationListeners != null) {
for (int i = 0; i < enabledNotificationListeners.size(); i++) {
- if (TextUtils.equals(packageName,
+ if (TextUtils.equals(controllerPackageName,
enabledNotificationListeners.get(i).getPackageName())) {
return true;
}
}
}
if (DEBUG) {
- Log.d(TAG, packageName + " (uid=" + resolvedUserId + ") doesn't have an enabled "
- + "notification listener");
+ Log.d(TAG, controllerPackageName + " (uid=" + controllerUid
+ + ") doesn't have an enabled notification listener");
}
return false;
}