Merge "MediaSessionManager: Apply API council review" into pi-dev

am: 628f59aa45

Change-Id: Ia9b5171cd720f87842bbc95ab318d199ffa35e8f
This commit is contained in:
Jaewan Kim
2018-04-04 22:42:12 -07:00
committed by android-build-merger
2 changed files with 30 additions and 2 deletions

View File

@@ -47,6 +47,7 @@ import android.view.KeyEvent;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.Executor;
/**
@@ -342,12 +343,16 @@ public final class MediaSessionManager {
}
/**
* Returns whether the app is trusted.
* Checks whether the remote user is a trusted app.
* <p>
* An app is trusted if the app holds the android.Manifest.permission.MEDIA_CONTENT_CONTROL
* permission or has an enabled notification listener.
*
* @param userInfo The remote user info
* @param userInfo The remote user info from either
* {@link MediaSession#getCurrentControllerInfo()} or
* {@link MediaBrowserService#getCurrentBrowserInfo()}.
* @return {@code true} if the remote user is trusted and its package name matches with the UID.
* {@code false} otherwise.
*/
public boolean isTrustedForMediaControl(RemoteUserInfo userInfo) {
if (userInfo.getPackageName() == null) {
@@ -814,6 +819,11 @@ public final class MediaSessionManager {
&& mPid == otherUserInfo.mPid
&& mUid == otherUserInfo.mUid;
}
@Override
public int hashCode() {
return Objects.hash(mPackageName, mPid, mUid);
}
}
private static final class SessionsChangedWrapper {

View File

@@ -1515,6 +1515,24 @@ public class MediaSessionService extends SystemService implements Monitor {
final int uid = Binder.getCallingUid();
final long token = Binder.clearCallingIdentity();
try {
int controllerUserId = UserHandle.getUserId(controllerUid);
int controllerUidFromPackageName;
try {
controllerUidFromPackageName = getContext().getPackageManager()
.getPackageUidAsUser(controllerPackageName, controllerUserId);
} catch (NameNotFoundException e) {
if (DEBUG) {
Log.d(TAG, "Package " + controllerPackageName + " doesn't exist");
}
return false;
}
if (controllerUidFromPackageName != controllerUid) {
if (DEBUG) {
Log.d(TAG, "Package name " + controllerPackageName
+ " doesn't match with the uid " + controllerUid);
}
return false;
}
return hasMediaControlPermission(UserHandle.getUserId(uid), controllerPackageName,
controllerPid, controllerUid);
} finally {