Loading media/java/android/media/session/MediaSessionManager.java +1 −0 Original line number Diff line number Diff line Loading @@ -61,6 +61,7 @@ import java.util.concurrent.Executor; * @see MediaSession * @see MediaController */ // TODO: (jinpark) Add API for getting and setting session policies from MediaSessionService. @SystemService(Context.MEDIA_SESSION_SERVICE) public final class MediaSessionManager { private static final String TAG = "SessionManager"; Loading services/core/java/com/android/server/media/MediaKeyDispatcher.java 0 → 100644 +39 −0 Original line number Diff line number Diff line /* * Copyright 2020 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.server.media; import android.annotation.NonNull; import android.annotation.Nullable; import android.media.session.MediaSession; import android.view.KeyEvent; /** * Provides a way to customize behavior for media key events. */ public interface MediaKeyDispatcher { /** * Implement this to customize the logic for which MediaSession should consume which key event. * * @param keyEvent a non-null KeyEvent whose key code is one of the supported media buttons. * @param asSystemService {@code true} if the event came from the system service via hardware * devices. {@code false} if the event came from the app process through key injection. * @return a {@link MediaSession.Token} instance that should consume the given key event. */ @Nullable MediaSession.Token getSessionForKeyEvent(@NonNull KeyEvent keyEvent, boolean asSystemService); } services/core/java/com/android/server/media/MediaSession2Record.java +19 −1 Original line number Diff line number Diff line Loading @@ -50,15 +50,18 @@ public class MediaSession2Record implements MediaSessionRecordImpl { private final MediaSessionService mService; @GuardedBy("mLock") private boolean mIsConnected; @GuardedBy("mLock") private int mPolicies; public MediaSession2Record(Session2Token sessionToken, MediaSessionService service, Looper handlerLooper) { Looper handlerLooper, int policies) { mSessionToken = sessionToken; mService = service; mHandlerExecutor = new HandlerExecutor(new Handler(handlerLooper)); mController = new MediaController2.Builder(service.getContext(), sessionToken) .setControllerCallback(mHandlerExecutor, new Controller2Callback()) .build(); mPolicies = policies; } @Override Loading Loading @@ -129,6 +132,21 @@ public class MediaSession2Record implements MediaSessionRecordImpl { return false; } @Override public int getSessionPolicies() { synchronized (mLock) { return mPolicies; } } @Override public void setSessionPolicies(int policies) { synchronized (mLock) { mPolicies = policies; } } @Override public void dump(PrintWriter pw, String prefix) { pw.println(prefix + "token=" + mSessionToken); Loading services/core/java/com/android/server/media/MediaSessionRecord.java +22 −1 Original line number Diff line number Diff line Loading @@ -159,9 +159,12 @@ public class MediaSessionRecord implements IBinder.DeathRecipient, MediaSessionR private long mDuration = -1; private String mMetadataDescription; private int mPolicies; public MediaSessionRecord(int ownerPid, int ownerUid, int userId, String ownerPackageName, ISessionCallback cb, String tag, Bundle sessionInfo, MediaSessionService service, Looper handlerLooper) throws RemoteException { MediaSessionService service, Looper handlerLooper, int policies) throws RemoteException { mOwnerPid = ownerPid; mOwnerUid = ownerUid; mUserId = userId; Loading @@ -178,6 +181,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient, MediaSessionR mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE); mAudioManagerInternal = LocalServices.getService(AudioManagerInternal.class); mAudioAttrs = DEFAULT_ATTRIBUTES; mPolicies = policies; // May throw RemoteException if the session app is killed. mSessionCb.mCb.asBinder().linkToDeath(this, 0); Loading Loading @@ -437,6 +441,20 @@ public class MediaSessionRecord implements IBinder.DeathRecipient, MediaSessionR cb); } @Override public int getSessionPolicies() { synchronized (mLock) { return mPolicies; } } @Override public void setSessionPolicies(int policies) { synchronized (mLock) { mPolicies = policies; } } @Override public void dump(PrintWriter pw, String prefix) { pw.println(prefix + mTag + " " + this); Loading Loading @@ -808,6 +826,9 @@ public class MediaSessionRecord implements IBinder.DeathRecipient, MediaSessionR @Override public void setMediaButtonReceiver(PendingIntent pi) throws RemoteException { if ((mPolicies & SessionPolicyProvider.SESSION_POLICY_IGNORE_BUTTON_RECEIVER) == 1) { return; } mMediaButtonReceiver = pi; final long token = Binder.clearCallingIdentity(); try { Loading services/core/java/com/android/server/media/MediaSessionRecordImpl.java +14 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,8 @@ import android.media.AudioManager; import android.os.ResultReceiver; import android.view.KeyEvent; import com.android.server.media.SessionPolicyProvider.SessionPolicy; import java.io.PrintWriter; /** Loading Loading @@ -127,6 +129,18 @@ public interface MediaSessionRecordImpl extends AutoCloseable { boolean sendMediaButton(String packageName, int pid, int uid, boolean asSystemService, KeyEvent ke, int sequenceId, ResultReceiver cb); /** * Get session policies from custom policy provider set when MediaSessionRecord is instantiated. * If custom policy does not exist, will return null. */ @SessionPolicy int getSessionPolicies(); /** * Overwrite session policies that have been set when MediaSessionRecord is instantiated. */ void setSessionPolicies(@SessionPolicy int policies); /** * Dumps internal state * Loading Loading
media/java/android/media/session/MediaSessionManager.java +1 −0 Original line number Diff line number Diff line Loading @@ -61,6 +61,7 @@ import java.util.concurrent.Executor; * @see MediaSession * @see MediaController */ // TODO: (jinpark) Add API for getting and setting session policies from MediaSessionService. @SystemService(Context.MEDIA_SESSION_SERVICE) public final class MediaSessionManager { private static final String TAG = "SessionManager"; Loading
services/core/java/com/android/server/media/MediaKeyDispatcher.java 0 → 100644 +39 −0 Original line number Diff line number Diff line /* * Copyright 2020 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.server.media; import android.annotation.NonNull; import android.annotation.Nullable; import android.media.session.MediaSession; import android.view.KeyEvent; /** * Provides a way to customize behavior for media key events. */ public interface MediaKeyDispatcher { /** * Implement this to customize the logic for which MediaSession should consume which key event. * * @param keyEvent a non-null KeyEvent whose key code is one of the supported media buttons. * @param asSystemService {@code true} if the event came from the system service via hardware * devices. {@code false} if the event came from the app process through key injection. * @return a {@link MediaSession.Token} instance that should consume the given key event. */ @Nullable MediaSession.Token getSessionForKeyEvent(@NonNull KeyEvent keyEvent, boolean asSystemService); }
services/core/java/com/android/server/media/MediaSession2Record.java +19 −1 Original line number Diff line number Diff line Loading @@ -50,15 +50,18 @@ public class MediaSession2Record implements MediaSessionRecordImpl { private final MediaSessionService mService; @GuardedBy("mLock") private boolean mIsConnected; @GuardedBy("mLock") private int mPolicies; public MediaSession2Record(Session2Token sessionToken, MediaSessionService service, Looper handlerLooper) { Looper handlerLooper, int policies) { mSessionToken = sessionToken; mService = service; mHandlerExecutor = new HandlerExecutor(new Handler(handlerLooper)); mController = new MediaController2.Builder(service.getContext(), sessionToken) .setControllerCallback(mHandlerExecutor, new Controller2Callback()) .build(); mPolicies = policies; } @Override Loading Loading @@ -129,6 +132,21 @@ public class MediaSession2Record implements MediaSessionRecordImpl { return false; } @Override public int getSessionPolicies() { synchronized (mLock) { return mPolicies; } } @Override public void setSessionPolicies(int policies) { synchronized (mLock) { mPolicies = policies; } } @Override public void dump(PrintWriter pw, String prefix) { pw.println(prefix + "token=" + mSessionToken); Loading
services/core/java/com/android/server/media/MediaSessionRecord.java +22 −1 Original line number Diff line number Diff line Loading @@ -159,9 +159,12 @@ public class MediaSessionRecord implements IBinder.DeathRecipient, MediaSessionR private long mDuration = -1; private String mMetadataDescription; private int mPolicies; public MediaSessionRecord(int ownerPid, int ownerUid, int userId, String ownerPackageName, ISessionCallback cb, String tag, Bundle sessionInfo, MediaSessionService service, Looper handlerLooper) throws RemoteException { MediaSessionService service, Looper handlerLooper, int policies) throws RemoteException { mOwnerPid = ownerPid; mOwnerUid = ownerUid; mUserId = userId; Loading @@ -178,6 +181,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient, MediaSessionR mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE); mAudioManagerInternal = LocalServices.getService(AudioManagerInternal.class); mAudioAttrs = DEFAULT_ATTRIBUTES; mPolicies = policies; // May throw RemoteException if the session app is killed. mSessionCb.mCb.asBinder().linkToDeath(this, 0); Loading Loading @@ -437,6 +441,20 @@ public class MediaSessionRecord implements IBinder.DeathRecipient, MediaSessionR cb); } @Override public int getSessionPolicies() { synchronized (mLock) { return mPolicies; } } @Override public void setSessionPolicies(int policies) { synchronized (mLock) { mPolicies = policies; } } @Override public void dump(PrintWriter pw, String prefix) { pw.println(prefix + mTag + " " + this); Loading Loading @@ -808,6 +826,9 @@ public class MediaSessionRecord implements IBinder.DeathRecipient, MediaSessionR @Override public void setMediaButtonReceiver(PendingIntent pi) throws RemoteException { if ((mPolicies & SessionPolicyProvider.SESSION_POLICY_IGNORE_BUTTON_RECEIVER) == 1) { return; } mMediaButtonReceiver = pi; final long token = Binder.clearCallingIdentity(); try { Loading
services/core/java/com/android/server/media/MediaSessionRecordImpl.java +14 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,8 @@ import android.media.AudioManager; import android.os.ResultReceiver; import android.view.KeyEvent; import com.android.server.media.SessionPolicyProvider.SessionPolicy; import java.io.PrintWriter; /** Loading Loading @@ -127,6 +129,18 @@ public interface MediaSessionRecordImpl extends AutoCloseable { boolean sendMediaButton(String packageName, int pid, int uid, boolean asSystemService, KeyEvent ke, int sequenceId, ResultReceiver cb); /** * Get session policies from custom policy provider set when MediaSessionRecord is instantiated. * If custom policy does not exist, will return null. */ @SessionPolicy int getSessionPolicies(); /** * Overwrite session policies that have been set when MediaSessionRecord is instantiated. */ void setSessionPolicies(@SessionPolicy int policies); /** * Dumps internal state * Loading