Merge "Replace using integer with UserHandle for user id"
This commit is contained in:
committed by
Android (Google) Code Review
commit
fcfb4c19e6
@@ -108,7 +108,7 @@ package android.media.session {
|
||||
}
|
||||
|
||||
public final class MediaSessionManager {
|
||||
method public void addOnActiveSessionsChangedListener(@NonNull android.media.session.MediaSessionManager.OnActiveSessionsChangedListener, @Nullable android.content.ComponentName, int, @Nullable android.os.Handler);
|
||||
method public void addOnActiveSessionsChangedListener(@NonNull android.media.session.MediaSessionManager.OnActiveSessionsChangedListener, @Nullable android.content.ComponentName, @NonNull android.os.UserHandle, @Nullable android.os.Handler);
|
||||
method public void dispatchMediaKeyEvent(@NonNull android.view.KeyEvent);
|
||||
method public void dispatchMediaKeyEvent(@NonNull android.view.KeyEvent, boolean);
|
||||
method public void dispatchMediaKeyEventAsSystemService(@NonNull android.view.KeyEvent);
|
||||
@@ -116,7 +116,7 @@ package android.media.session {
|
||||
method public void dispatchVolumeKeyEvent(@NonNull android.view.KeyEvent, int, boolean);
|
||||
method public void dispatchVolumeKeyEventAsSystemService(@NonNull android.view.KeyEvent, int);
|
||||
method public void dispatchVolumeKeyEventToSessionAsSystemService(@NonNull android.view.KeyEvent, @NonNull android.media.session.MediaSession.Token);
|
||||
method @NonNull public java.util.List<android.media.session.MediaController> getActiveSessionsForUser(@Nullable android.content.ComponentName, int);
|
||||
method @NonNull public java.util.List<android.media.session.MediaController> getActiveSessionsForUser(@Nullable android.content.ComponentName, @NonNull android.os.UserHandle);
|
||||
method public void registerRemoteSessionCallback(@NonNull java.util.concurrent.Executor, @NonNull android.media.session.MediaSessionManager.RemoteSessionCallback);
|
||||
method public void unregisterRemoteSessionCallback(@NonNull android.media.session.MediaSessionManager.RemoteSessionCallback);
|
||||
field public static final int RESULT_MEDIA_KEY_HANDLED = 1; // 0x1
|
||||
|
||||
@@ -138,7 +138,7 @@ public class PipMediaController {
|
||||
public void onActivityPinned() {
|
||||
// Once we enter PiP, try to find the active media controller for the top most activity
|
||||
resolveActiveMediaController(mMediaSessionManager.getActiveSessionsForUser(null,
|
||||
UserHandle.USER_CURRENT));
|
||||
UserHandle.CURRENT));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -245,7 +245,7 @@ public class PipMediaController {
|
||||
public void registerSessionListenerForCurrentUser() {
|
||||
mMediaSessionManager.removeOnActiveSessionsChangedListener(mSessionsChangedListener);
|
||||
mMediaSessionManager.addOnActiveSessionsChangedListener(mSessionsChangedListener, null,
|
||||
UserHandle.USER_CURRENT, null);
|
||||
UserHandle.CURRENT, null);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -140,6 +140,8 @@ public final class MediaSessionManager {
|
||||
@NonNull
|
||||
public ISession createSession(@NonNull MediaSession.CallbackStub cbStub, @NonNull String tag,
|
||||
@Nullable Bundle sessionInfo) {
|
||||
Objects.requireNonNull(cbStub, "cbStub shouldn't be null");
|
||||
Objects.requireNonNull(tag, "tag shouldn't be null");
|
||||
try {
|
||||
return mService.createSession(mContext.getPackageName(), cbStub, tag, sessionInfo,
|
||||
UserHandle.myUserId());
|
||||
@@ -163,9 +165,7 @@ public final class MediaSessionManager {
|
||||
* @param token newly created session2 token
|
||||
*/
|
||||
public void notifySession2Created(@NonNull Session2Token token) {
|
||||
if (token == null) {
|
||||
throw new IllegalArgumentException("token shouldn't be null");
|
||||
}
|
||||
Objects.requireNonNull(token, "token shouldn't be null");
|
||||
if (token.getType() != Session2Token.TYPE_SESSION) {
|
||||
throw new IllegalArgumentException("token's type should be TYPE_SESSION");
|
||||
}
|
||||
@@ -209,16 +209,24 @@ public final class MediaSessionManager {
|
||||
* retrieve sessions for user ids that do not belong to current process.
|
||||
*
|
||||
* @param notificationListener The enabled notification listener component. May be null.
|
||||
* @param userId The user id to fetch sessions for.
|
||||
* @param userHandle The user handle to fetch sessions for.
|
||||
* @return A list of controllers for ongoing sessions.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
|
||||
@SuppressLint("UserHandle")
|
||||
public @NonNull List<MediaController> getActiveSessionsForUser(
|
||||
@Nullable ComponentName notificationListener, int userId) {
|
||||
@Nullable ComponentName notificationListener, @NonNull UserHandle userHandle) {
|
||||
Objects.requireNonNull(userHandle, "userHandle shouldn't be null");
|
||||
return getActiveSessionsForUser(notificationListener, userHandle.getIdentifier());
|
||||
}
|
||||
|
||||
private List<MediaController> getActiveSessionsForUser(ComponentName notificationListener,
|
||||
int userId) {
|
||||
ArrayList<MediaController> controllers = new ArrayList<MediaController>();
|
||||
try {
|
||||
List<MediaSession.Token> tokens = mService.getSessions(notificationListener, userId);
|
||||
List<MediaSession.Token> tokens = mService.getSessions(notificationListener,
|
||||
userId);
|
||||
int size = tokens.size();
|
||||
for (int i = 0; i < size; i++) {
|
||||
MediaController controller = new MediaController(mContext, tokens.get(i));
|
||||
@@ -257,12 +265,19 @@ public final class MediaSessionManager {
|
||||
* {@link android.Manifest.permission#INTERACT_ACROSS_USERS_FULL} permission in order to
|
||||
* retrieve session tokens for user ids that do not belong to current process.
|
||||
*
|
||||
* @param userId The user id to fetch sessions for.
|
||||
* @param userHandle The user handle to fetch sessions for.
|
||||
* @return A list of {@link Session2Token}
|
||||
* @hide
|
||||
*/
|
||||
@NonNull
|
||||
public List<Session2Token> getSession2Tokens(int userId) {
|
||||
@SuppressLint("UserHandle")
|
||||
public List<Session2Token> getSession2Tokens(@NonNull UserHandle userHandle) {
|
||||
Objects.requireNonNull(userHandle, "userHandle shouldn't be null");
|
||||
return getSession2Tokens(userHandle.getIdentifier());
|
||||
|
||||
}
|
||||
|
||||
private List<Session2Token> getSession2Tokens(int userId) {
|
||||
try {
|
||||
ParceledListSlice slice = mService.getSession2Tokens(userId);
|
||||
return slice == null ? new ArrayList<>() : slice.getList();
|
||||
@@ -324,18 +339,26 @@ public final class MediaSessionManager {
|
||||
*
|
||||
* @param sessionListener The listener to add.
|
||||
* @param notificationListener The enabled notification listener component. May be null.
|
||||
* @param userId The userId to listen for changes on.
|
||||
* @param userHandle The user handle to listen for changes on.
|
||||
* @param handler The handler to post updates on.
|
||||
* @hide
|
||||
*/
|
||||
@SuppressLint({"ExecutorRegistration", "SamShouldBeLast"})
|
||||
@SuppressLint({"ExecutorRegistration", "SamShouldBeLast", "UserHandle"})
|
||||
@SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
|
||||
public void addOnActiveSessionsChangedListener(
|
||||
@NonNull OnActiveSessionsChangedListener sessionListener,
|
||||
@Nullable ComponentName notificationListener, int userId, @Nullable Handler handler) {
|
||||
if (sessionListener == null) {
|
||||
throw new IllegalArgumentException("listener may not be null");
|
||||
}
|
||||
@Nullable ComponentName notificationListener, @NonNull UserHandle userHandle,
|
||||
@Nullable Handler handler) {
|
||||
Objects.requireNonNull(userHandle, "userHandle shouldn't be null");
|
||||
addOnActiveSessionsChangedListener(sessionListener, notificationListener,
|
||||
userHandle.getIdentifier(), handler);
|
||||
}
|
||||
|
||||
private void addOnActiveSessionsChangedListener(
|
||||
@NonNull OnActiveSessionsChangedListener sessionListener,
|
||||
@Nullable ComponentName notificationListener, int userId,
|
||||
@Nullable Handler handler) {
|
||||
Objects.requireNonNull(sessionListener, "sessionListener shouldn't be null");
|
||||
if (handler == null) {
|
||||
handler = new Handler();
|
||||
}
|
||||
@@ -358,15 +381,13 @@ public final class MediaSessionManager {
|
||||
/**
|
||||
* Stop receiving active sessions updates on the specified listener.
|
||||
*
|
||||
* @param listener The listener to remove.
|
||||
* @param sessionListener The listener to remove.
|
||||
*/
|
||||
public void removeOnActiveSessionsChangedListener(
|
||||
@NonNull OnActiveSessionsChangedListener listener) {
|
||||
if (listener == null) {
|
||||
throw new IllegalArgumentException("listener may not be null");
|
||||
}
|
||||
@NonNull OnActiveSessionsChangedListener sessionListener) {
|
||||
Objects.requireNonNull(sessionListener, "sessionListener shouldn't be null");
|
||||
synchronized (mLock) {
|
||||
SessionsChangedWrapper wrapper = mListeners.remove(listener);
|
||||
SessionsChangedWrapper wrapper = mListeners.remove(sessionListener);
|
||||
if (wrapper != null) {
|
||||
try {
|
||||
mService.removeSessionsListener(wrapper.mStub);
|
||||
@@ -422,17 +443,23 @@ public final class MediaSessionManager {
|
||||
* {@link android.Manifest.permission#INTERACT_ACROSS_USERS_FULL} permission in order to
|
||||
* add listeners for user ids that do not belong to current process.
|
||||
*
|
||||
* @param userId The userId to listen for changes on
|
||||
* @param userHandle The userHandle to listen for changes on
|
||||
* @param listener The listener to add
|
||||
* @param handler The handler to call listener on. If {@code null}, calling thread's looper will
|
||||
* be used.
|
||||
* @hide
|
||||
*/
|
||||
public void addOnSession2TokensChangedListener(int userId,
|
||||
@NonNull OnSession2TokensChangedListener listener, @Nullable Handler handler) {
|
||||
if (listener == null) {
|
||||
throw new IllegalArgumentException("listener shouldn't be null");
|
||||
}
|
||||
@SuppressLint("UserHandle")
|
||||
public void addOnSession2TokensChangedListener(@NonNull UserHandle userHandle,
|
||||
@NonNull OnSession2TokensChangedListener listener, @NonNull Handler handler) {
|
||||
Objects.requireNonNull(userHandle, "userHandle shouldn't be null");
|
||||
addOnSession2TokensChangedListener(userHandle.getIdentifier(), listener, handler);
|
||||
}
|
||||
|
||||
private void addOnSession2TokensChangedListener(int userId,
|
||||
OnSession2TokensChangedListener listener, Handler handler) {
|
||||
Objects.requireNonNull(handler, "handler shouldn't be null");
|
||||
Objects.requireNonNull(listener, "listener shouldn't be null");
|
||||
synchronized (mLock) {
|
||||
if (mSession2TokensListeners.get(listener) != null) {
|
||||
Log.w(TAG, "Attempted to add session listener twice, ignoring.");
|
||||
@@ -462,9 +489,7 @@ public final class MediaSessionManager {
|
||||
*/
|
||||
public void removeOnSession2TokensChangedListener(
|
||||
@NonNull OnSession2TokensChangedListener listener) {
|
||||
if (listener == null) {
|
||||
throw new IllegalArgumentException("listener may not be null");
|
||||
}
|
||||
Objects.requireNonNull(listener, "listener shouldn't be null");
|
||||
final Session2TokensChangedWrapper wrapper;
|
||||
synchronized (mLock) {
|
||||
wrapper = mSession2TokensListeners.remove(listener);
|
||||
@@ -581,9 +606,7 @@ public final class MediaSessionManager {
|
||||
|
||||
private void dispatchMediaKeyEventInternal(KeyEvent keyEvent, boolean asSystemService,
|
||||
boolean needWakeLock) {
|
||||
if (keyEvent == null) {
|
||||
throw new NullPointerException("keyEvent shouldn't be null");
|
||||
}
|
||||
Objects.requireNonNull(keyEvent, "keyEvent shouldn't be null");
|
||||
try {
|
||||
mService.dispatchMediaKeyEvent(mContext.getPackageName(), asSystemService, keyEvent,
|
||||
needWakeLock);
|
||||
@@ -606,12 +629,8 @@ public final class MediaSessionManager {
|
||||
@SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
|
||||
public boolean dispatchMediaKeyEventToSessionAsSystemService(@NonNull KeyEvent keyEvent,
|
||||
@NonNull MediaSession.Token sessionToken) {
|
||||
if (sessionToken == null) {
|
||||
throw new NullPointerException("sessionToken shouldn't be null");
|
||||
}
|
||||
if (keyEvent == null) {
|
||||
throw new NullPointerException("keyEvent shouldn't be null");
|
||||
}
|
||||
Objects.requireNonNull(sessionToken, "sessionToken shouldn't be null");
|
||||
Objects.requireNonNull(keyEvent, "keyEvent shouldn't be null");
|
||||
if (!KeyEvent.isMediaSessionKey(keyEvent.getKeyCode())) {
|
||||
return false;
|
||||
}
|
||||
@@ -662,9 +681,7 @@ public final class MediaSessionManager {
|
||||
|
||||
private void dispatchVolumeKeyEventInternal(@NonNull KeyEvent keyEvent, int stream,
|
||||
boolean musicOnly, boolean asSystemService) {
|
||||
if (keyEvent == null) {
|
||||
throw new NullPointerException("keyEvent shouldn't be null");
|
||||
}
|
||||
Objects.requireNonNull(keyEvent, "keyEvent shouldn't be null");
|
||||
try {
|
||||
mService.dispatchVolumeKeyEvent(mContext.getPackageName(), mContext.getOpPackageName(),
|
||||
asSystemService, keyEvent, stream, musicOnly);
|
||||
@@ -686,12 +703,8 @@ public final class MediaSessionManager {
|
||||
@SystemApi(client = SystemApi.Client.MODULE_LIBRARIES)
|
||||
public void dispatchVolumeKeyEventToSessionAsSystemService(@NonNull KeyEvent keyEvent,
|
||||
@NonNull MediaSession.Token sessionToken) {
|
||||
if (sessionToken == null) {
|
||||
throw new NullPointerException("sessionToken shouldn't be null");
|
||||
}
|
||||
if (keyEvent == null) {
|
||||
throw new NullPointerException("keyEvent shouldn't be null");
|
||||
}
|
||||
Objects.requireNonNull(sessionToken, "sessionToken shouldn't be null");
|
||||
Objects.requireNonNull(keyEvent, "keyEvent shouldn't be null");
|
||||
try {
|
||||
mService.dispatchVolumeKeyEventToSessionAsSystemService(mContext.getPackageName(),
|
||||
mContext.getOpPackageName(), keyEvent, sessionToken);
|
||||
@@ -735,9 +748,7 @@ public final class MediaSessionManager {
|
||||
* {@code false} otherwise.
|
||||
*/
|
||||
public boolean isTrustedForMediaControl(@NonNull RemoteUserInfo userInfo) {
|
||||
if (userInfo == null) {
|
||||
throw new IllegalArgumentException("userInfo may not be null");
|
||||
}
|
||||
Objects.requireNonNull(userInfo, "userInfo shouldn't be null");
|
||||
if (userInfo.getPackageName() == null) {
|
||||
return false;
|
||||
}
|
||||
@@ -845,12 +856,8 @@ public final class MediaSessionManager {
|
||||
public void addOnMediaKeyEventDispatchedListener(
|
||||
@NonNull @CallbackExecutor Executor executor,
|
||||
@NonNull OnMediaKeyEventDispatchedListener listener) {
|
||||
if (executor == null) {
|
||||
throw new NullPointerException("executor shouldn't be null");
|
||||
}
|
||||
if (listener == null) {
|
||||
throw new NullPointerException("listener shouldn't be null");
|
||||
}
|
||||
Objects.requireNonNull(executor, "executor shouldn't be null");
|
||||
Objects.requireNonNull(listener, "listener shouldn't be null");
|
||||
synchronized (mLock) {
|
||||
try {
|
||||
mOnMediaKeyEventDispatchedListeners.put(listener, executor);
|
||||
@@ -874,9 +881,7 @@ public final class MediaSessionManager {
|
||||
@RequiresPermission(value = android.Manifest.permission.MEDIA_CONTENT_CONTROL)
|
||||
public void removeOnMediaKeyEventDispatchedListener(
|
||||
@NonNull OnMediaKeyEventDispatchedListener listener) {
|
||||
if (listener == null) {
|
||||
throw new NullPointerException("listener shouldn't be null");
|
||||
}
|
||||
Objects.requireNonNull(listener, "listener shouldn't be null");
|
||||
synchronized (mLock) {
|
||||
try {
|
||||
mOnMediaKeyEventDispatchedListeners.remove(listener);
|
||||
@@ -902,12 +907,8 @@ public final class MediaSessionManager {
|
||||
public void addOnMediaKeyEventSessionChangedListener(
|
||||
@NonNull @CallbackExecutor Executor executor,
|
||||
@NonNull OnMediaKeyEventSessionChangedListener listener) {
|
||||
if (executor == null) {
|
||||
throw new NullPointerException("executor shouldn't be null");
|
||||
}
|
||||
if (listener == null) {
|
||||
throw new NullPointerException("listener shouldn't be null");
|
||||
}
|
||||
Objects.requireNonNull(executor, "executor shouldn't be null");
|
||||
Objects.requireNonNull(listener, "listener shouldn't be null");
|
||||
synchronized (mLock) {
|
||||
try {
|
||||
mMediaKeyEventSessionChangedCallbacks.put(listener, executor);
|
||||
@@ -934,9 +935,7 @@ public final class MediaSessionManager {
|
||||
@RequiresPermission(value = android.Manifest.permission.MEDIA_CONTENT_CONTROL)
|
||||
public void removeOnMediaKeyEventSessionChangedListener(
|
||||
@NonNull OnMediaKeyEventSessionChangedListener listener) {
|
||||
if (listener == null) {
|
||||
throw new NullPointerException("listener shouldn't be null");
|
||||
}
|
||||
Objects.requireNonNull(listener, "listener shouldn't be null");
|
||||
synchronized (mLock) {
|
||||
try {
|
||||
mMediaKeyEventSessionChangedCallbacks.remove(listener);
|
||||
|
||||
@@ -504,7 +504,7 @@ public class NotificationMediaManager implements Dumpable {
|
||||
// TODO: Should this really be for all users? It appears that inactive users
|
||||
// can't have active sessions, which would mean it is fine.
|
||||
final List<MediaController> sessions =
|
||||
mMediaSessionManager.getActiveSessionsForUser(null, UserHandle.USER_ALL);
|
||||
mMediaSessionManager.getActiveSessionsForUser(null, UserHandle.ALL);
|
||||
|
||||
for (MediaController aController : sessions) {
|
||||
// now to see if we have one like this
|
||||
|
||||
Reference in New Issue
Block a user