Loading media/java/android/media/AudioManager.java +16 −13 Original line number Diff line number Diff line Loading @@ -428,7 +428,6 @@ public class AudioManager { public static final int USE_DEFAULT_STREAM_TYPE = Integer.MIN_VALUE; private static IAudioService sService; private MediaSessionLegacyHelper mSessionHelper; /** * @hide Loading @@ -439,9 +438,6 @@ public class AudioManager { com.android.internal.R.bool.config_useMasterVolume); mUseVolumeKeySounds = mContext.getResources().getBoolean( com.android.internal.R.bool.config_useVolumeKeySounds); if (USE_SESSIONS) { mSessionHelper = MediaSessionLegacyHelper.getHelper(context); } } private static IAudioService getService() Loading Loading @@ -478,6 +474,10 @@ public class AudioManager { * or {@link KeyEvent#KEYCODE_MEDIA_AUDIO_TRACK}. */ public void dispatchMediaKeyEvent(KeyEvent keyEvent) { if (USE_SESSIONS) { MediaSessionLegacyHelper helper = MediaSessionLegacyHelper.getHelper(mContext); helper.sendMediaButtonEvent(keyEvent, false); } else { IAudioService service = getService(); try { service.dispatchMediaKeyEvent(keyEvent); Loading @@ -485,6 +485,7 @@ public class AudioManager { Log.e(TAG, "dispatchMediaKeyEvent threw exception ", e); } } } /** * @hide Loading Loading @@ -2178,7 +2179,8 @@ public class AudioManager { Log.e(TAG, "Dead object in registerMediaButtonIntent"+e); } if (USE_SESSIONS) { mSessionHelper.addMediaButtonListener(pi, mContext); MediaSessionLegacyHelper helper = MediaSessionLegacyHelper.getHelper(mContext); helper.addMediaButtonListener(pi, mContext); } } Loading Loading @@ -2254,7 +2256,8 @@ public class AudioManager { Log.e(TAG, "Dead object in unregisterMediaButtonIntent"+e); } if (USE_SESSIONS) { mSessionHelper.removeMediaButtonListener(pi); MediaSessionLegacyHelper helper = MediaSessionLegacyHelper.getHelper(mContext); helper.removeMediaButtonListener(pi); } } Loading @@ -2281,7 +2284,7 @@ public class AudioManager { Log.e(TAG, "Dead object in registerRemoteControlClient"+e); } if (USE_SESSIONS) { rcClient.registerWithSession(mSessionHelper); rcClient.registerWithSession(MediaSessionLegacyHelper.getHelper(mContext)); } } Loading @@ -2303,7 +2306,7 @@ public class AudioManager { Log.e(TAG, "Dead object in unregisterRemoteControlClient"+e); } if (USE_SESSIONS) { rcClient.unregisterWithSession(mSessionHelper); rcClient.unregisterWithSession(MediaSessionLegacyHelper.getHelper(mContext)); } } Loading media/java/android/media/AudioService.java +25 −4 Original line number Diff line number Diff line Loading @@ -46,6 +46,7 @@ import android.database.ContentObserver; import android.hardware.usb.UsbManager; import android.media.MediaPlayer.OnCompletionListener; import android.media.MediaPlayer.OnErrorListener; import android.media.session.MediaSessionLegacyHelper; import android.os.Binder; import android.os.Build; import android.os.Environment; Loading Loading @@ -108,6 +109,10 @@ public class AudioService extends IAudioService.Stub { /** Debug volumes */ protected static final boolean DEBUG_VOL = false; /** Reroute calls to media session apis */ private static final boolean USE_SESSIONS = true; private static final boolean DEBUG_SESSIONS = true; /** How long to delay before persisting a change in volume/ringer mode. */ private static final int PERSIST_DELAY = 500; Loading Loading @@ -3472,7 +3477,7 @@ public class AudioService extends IAudioService.Stub { if (volume < 0) { volFloat = (float)Math.pow(10, (float)sSoundEffectVolumeDb/20); } else { volFloat = (float) volume / 1000.0f; volFloat = volume / 1000.0f; } if (SOUND_EFFECT_FILES_MAP[effectType][1] > 0) { Loading Loading @@ -3554,7 +3559,7 @@ public class AudioService extends IAudioService.Stub { } Settings.System.putFloatForUser(mContentResolver, Settings.System.VOLUME_MASTER, (float)msg.arg1 / (float)1000.0, msg.arg1 / (float)1000.0, UserHandle.USER_CURRENT); break; Loading Loading @@ -4325,12 +4330,28 @@ public class AudioService extends IAudioService.Stub { } public void dispatchMediaKeyEvent(KeyEvent keyEvent) { if (USE_SESSIONS) { if (DEBUG_SESSIONS) { int pid = getCallingPid(); Log.w(TAG, "Call to dispatchMediaKeyEvent from " + pid); } MediaSessionLegacyHelper.getHelper(mContext).sendMediaButtonEvent(keyEvent, false); } else { mMediaFocusControl.dispatchMediaKeyEvent(keyEvent); } } public void dispatchMediaKeyEventUnderWakelock(KeyEvent keyEvent) { if (USE_SESSIONS) { if (DEBUG_SESSIONS) { int pid = getCallingPid(); Log.w(TAG, "Call to dispatchMediaKeyEventUnderWakelock from " + pid); } MediaSessionLegacyHelper.getHelper(mContext).sendMediaButtonEvent(keyEvent, true); } else { mMediaFocusControl.dispatchMediaKeyEventUnderWakelock(keyEvent); } } //========================================================================================== // Audio Focus Loading media/java/android/media/session/ISessionCallback.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -28,7 +28,7 @@ import android.os.ResultReceiver; */ oneway interface ISessionCallback { void onCommand(String command, in Bundle extras, in ResultReceiver cb); void onMediaButton(in Intent mediaButtonIntent); void onMediaButton(in Intent mediaButtonIntent, in ResultReceiver cb); void onRequestRouteChange(in RouteInfo route); void onRouteConnected(in RouteInfo route, in RouteOptions options); void onRouteDisconnected(in RouteInfo route, int reason); Loading media/java/android/media/session/ISessionManager.aidl +2 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ import android.content.ComponentName; import android.media.session.ISession; import android.media.session.ISessionCallback; import android.os.Bundle; import android.view.KeyEvent; /** * Interface to the MediaSessionManagerService Loading @@ -27,4 +28,5 @@ import android.os.Bundle; interface ISessionManager { ISession createSession(String packageName, in ISessionCallback cb, String tag, int userId); List<IBinder> getSessions(in ComponentName compName, int userId); void dispatchMediaKeyEvent(in KeyEvent keyEvent, boolean needWakeLock); } No newline at end of file media/java/android/media/session/MediaSessionLegacyHelper.java +83 −18 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ import android.view.KeyEvent; */ public class MediaSessionLegacyHelper { private static final String TAG = "MediaSessionHelper"; private static final boolean DEBUG = true; private static final Object sLock = new Object(); private static MediaSessionLegacyHelper sInstance; Loading @@ -52,6 +53,9 @@ public class MediaSessionLegacyHelper { } public static MediaSessionLegacyHelper getHelper(Context context) { if (DEBUG) { Log.d(TAG, "Attempting to get helper with context " + context); } synchronized (sLock) { if (sInstance == null) { sInstance = new MediaSessionLegacyHelper(context); Loading @@ -65,12 +69,25 @@ public class MediaSessionLegacyHelper { return holder == null ? null : holder.mSession; } public void addRccListener(PendingIntent pi, TransportPerformer.Listener listener) { public void sendMediaButtonEvent(KeyEvent keyEvent, boolean needWakeLock) { mSessionManager.dispatchMediaKeyEvent(keyEvent, needWakeLock); if (DEBUG) { Log.d(TAG, "dispatched media key " + keyEvent); } } public void addRccListener(PendingIntent pi, TransportPerformer.Listener listener) { if (pi == null) { Log.w(TAG, "Pending intent was null, can't add rcc listener."); return; } SessionHolder holder = getHolder(pi, true); TransportPerformer performer = holder.mSession.getTransportPerformer(); if (holder.mRccListener != null) { if (holder.mRccListener == listener) { if (DEBUG) { Log.d(TAG, "addRccListener listener already added."); } // This is already the registered listener, ignore return; } Loading @@ -82,9 +99,15 @@ public class MediaSessionLegacyHelper { holder.mFlags |= Session.FLAG_HANDLES_TRANSPORT_CONTROLS; holder.mSession.setFlags(holder.mFlags); holder.update(); if (DEBUG) { Log.d(TAG, "Added rcc listener for " + pi + "."); } } public void removeRccListener(PendingIntent pi) { if (pi == null) { return; } SessionHolder holder = getHolder(pi, false); if (holder != null && holder.mRccListener != null) { holder.mSession.getTransportPerformer().removeListener(holder.mRccListener); Loading @@ -92,30 +115,56 @@ public class MediaSessionLegacyHelper { holder.mFlags &= ~Session.FLAG_HANDLES_TRANSPORT_CONTROLS; holder.mSession.setFlags(holder.mFlags); holder.update(); if (DEBUG) { Log.d(TAG, "Removed rcc listener for " + pi + "."); } } } public void addMediaButtonListener(PendingIntent pi, Context context) { if (pi == null) { Log.w(TAG, "Pending intent was null, can't addMediaButtonListener."); return; } SessionHolder holder = getHolder(pi, true); if (holder.mMediaButtonListener != null) { // Already have this listener registered // Already have this listener registered, but update it anyway as // the extras may have changed. if (DEBUG) { Log.d(TAG, "addMediaButtonListener already added " + pi); } return; } holder.mMediaButtonListener = new MediaButtonListener(pi, context); holder.mFlags |= Session.FLAG_HANDLES_MEDIA_BUTTONS; holder.mSession.setFlags(holder.mFlags); holder.mSession.getTransportPerformer().addListener(holder.mMediaButtonListener, mHandler); holder.mMediaButtonReceiver = new MediaButtonReceiver(pi, context); holder.mSession.addCallback(holder.mMediaButtonReceiver, mHandler); if (DEBUG) { Log.d(TAG, "addMediaButtonListener added " + pi); } } public void removeMediaButtonListener(PendingIntent pi) { if (pi == null) { return; } SessionHolder holder = getHolder(pi, false); if (holder != null && holder.mMediaButtonListener != null) { holder.mSession.getTransportPerformer().removeListener(holder.mMediaButtonListener); holder.mFlags &= ~Session.FLAG_HANDLES_MEDIA_BUTTONS; holder.mSession.setFlags(holder.mFlags); holder.mMediaButtonListener = null; holder.mSession.removeCallback(holder.mMediaButtonReceiver); holder.mMediaButtonReceiver = null; holder.update(); if (DEBUG) { Log.d(TAG, "removeMediaButtonListener removed " + pi); } } } Loading @@ -130,7 +179,32 @@ public class MediaSessionLegacyHelper { return holder; } public static class MediaButtonListener extends TransportPerformer.Listener { private static void sendKeyEvent(PendingIntent pi, Context context, Intent intent) { try { pi.send(context, 0, intent); } catch (CanceledException e) { Log.e(TAG, "Error sending media key down event:", e); // Don't bother sending up if down failed return; } } private static final class MediaButtonReceiver extends Session.Callback { private final PendingIntent mPendingIntent; private final Context mContext; public MediaButtonReceiver(PendingIntent pi, Context context) { mPendingIntent = pi; mContext = context; } @Override public void onMediaButton(Intent mediaButtonIntent) { MediaSessionLegacyHelper.sendKeyEvent(mPendingIntent, mContext, mediaButtonIntent); } } private static final class MediaButtonListener extends TransportPerformer.Listener { private final PendingIntent mPendingIntent; private final Context mContext; Loading Loading @@ -179,20 +253,14 @@ public class MediaSessionLegacyHelper { Intent intent = new Intent(Intent.ACTION_MEDIA_BUTTON); intent.putExtra(Intent.EXTRA_KEY_EVENT, ke); try { mPendingIntent.send(mContext, 0, intent); } catch (CanceledException e) { Log.e(TAG, "Error sending media key down event:", e); // Don't bother sending up if down failed return; } MediaSessionLegacyHelper.sendKeyEvent(mPendingIntent, mContext, intent); ke = new KeyEvent(KeyEvent.ACTION_UP, keyCode); intent.putExtra(Intent.EXTRA_KEY_EVENT, ke); try { mPendingIntent.send(mContext, 0, intent); } catch (CanceledException e) { Log.e(TAG, "Error sending media key up event:", e); MediaSessionLegacyHelper.sendKeyEvent(mPendingIntent, mContext, intent); if (DEBUG) { Log.d(TAG, "Sent " + keyCode + " to pending intent " + mPendingIntent); } } } Loading @@ -201,6 +269,7 @@ public class MediaSessionLegacyHelper { public final Session mSession; public final PendingIntent mPi; public MediaButtonListener mMediaButtonListener; public MediaButtonReceiver mMediaButtonReceiver; public TransportPerformer.Listener mRccListener; public int mFlags; Loading @@ -213,10 +282,6 @@ public class MediaSessionLegacyHelper { if (mMediaButtonListener == null && mRccListener == null) { mSession.release(); mSessions.remove(mPi); } else if (mMediaButtonListener != null && mRccListener != null) { // TODO set session to active } else { // TODO set session to inactive } } } Loading Loading
media/java/android/media/AudioManager.java +16 −13 Original line number Diff line number Diff line Loading @@ -428,7 +428,6 @@ public class AudioManager { public static final int USE_DEFAULT_STREAM_TYPE = Integer.MIN_VALUE; private static IAudioService sService; private MediaSessionLegacyHelper mSessionHelper; /** * @hide Loading @@ -439,9 +438,6 @@ public class AudioManager { com.android.internal.R.bool.config_useMasterVolume); mUseVolumeKeySounds = mContext.getResources().getBoolean( com.android.internal.R.bool.config_useVolumeKeySounds); if (USE_SESSIONS) { mSessionHelper = MediaSessionLegacyHelper.getHelper(context); } } private static IAudioService getService() Loading Loading @@ -478,6 +474,10 @@ public class AudioManager { * or {@link KeyEvent#KEYCODE_MEDIA_AUDIO_TRACK}. */ public void dispatchMediaKeyEvent(KeyEvent keyEvent) { if (USE_SESSIONS) { MediaSessionLegacyHelper helper = MediaSessionLegacyHelper.getHelper(mContext); helper.sendMediaButtonEvent(keyEvent, false); } else { IAudioService service = getService(); try { service.dispatchMediaKeyEvent(keyEvent); Loading @@ -485,6 +485,7 @@ public class AudioManager { Log.e(TAG, "dispatchMediaKeyEvent threw exception ", e); } } } /** * @hide Loading Loading @@ -2178,7 +2179,8 @@ public class AudioManager { Log.e(TAG, "Dead object in registerMediaButtonIntent"+e); } if (USE_SESSIONS) { mSessionHelper.addMediaButtonListener(pi, mContext); MediaSessionLegacyHelper helper = MediaSessionLegacyHelper.getHelper(mContext); helper.addMediaButtonListener(pi, mContext); } } Loading Loading @@ -2254,7 +2256,8 @@ public class AudioManager { Log.e(TAG, "Dead object in unregisterMediaButtonIntent"+e); } if (USE_SESSIONS) { mSessionHelper.removeMediaButtonListener(pi); MediaSessionLegacyHelper helper = MediaSessionLegacyHelper.getHelper(mContext); helper.removeMediaButtonListener(pi); } } Loading @@ -2281,7 +2284,7 @@ public class AudioManager { Log.e(TAG, "Dead object in registerRemoteControlClient"+e); } if (USE_SESSIONS) { rcClient.registerWithSession(mSessionHelper); rcClient.registerWithSession(MediaSessionLegacyHelper.getHelper(mContext)); } } Loading @@ -2303,7 +2306,7 @@ public class AudioManager { Log.e(TAG, "Dead object in unregisterRemoteControlClient"+e); } if (USE_SESSIONS) { rcClient.unregisterWithSession(mSessionHelper); rcClient.unregisterWithSession(MediaSessionLegacyHelper.getHelper(mContext)); } } Loading
media/java/android/media/AudioService.java +25 −4 Original line number Diff line number Diff line Loading @@ -46,6 +46,7 @@ import android.database.ContentObserver; import android.hardware.usb.UsbManager; import android.media.MediaPlayer.OnCompletionListener; import android.media.MediaPlayer.OnErrorListener; import android.media.session.MediaSessionLegacyHelper; import android.os.Binder; import android.os.Build; import android.os.Environment; Loading Loading @@ -108,6 +109,10 @@ public class AudioService extends IAudioService.Stub { /** Debug volumes */ protected static final boolean DEBUG_VOL = false; /** Reroute calls to media session apis */ private static final boolean USE_SESSIONS = true; private static final boolean DEBUG_SESSIONS = true; /** How long to delay before persisting a change in volume/ringer mode. */ private static final int PERSIST_DELAY = 500; Loading Loading @@ -3472,7 +3477,7 @@ public class AudioService extends IAudioService.Stub { if (volume < 0) { volFloat = (float)Math.pow(10, (float)sSoundEffectVolumeDb/20); } else { volFloat = (float) volume / 1000.0f; volFloat = volume / 1000.0f; } if (SOUND_EFFECT_FILES_MAP[effectType][1] > 0) { Loading Loading @@ -3554,7 +3559,7 @@ public class AudioService extends IAudioService.Stub { } Settings.System.putFloatForUser(mContentResolver, Settings.System.VOLUME_MASTER, (float)msg.arg1 / (float)1000.0, msg.arg1 / (float)1000.0, UserHandle.USER_CURRENT); break; Loading Loading @@ -4325,12 +4330,28 @@ public class AudioService extends IAudioService.Stub { } public void dispatchMediaKeyEvent(KeyEvent keyEvent) { if (USE_SESSIONS) { if (DEBUG_SESSIONS) { int pid = getCallingPid(); Log.w(TAG, "Call to dispatchMediaKeyEvent from " + pid); } MediaSessionLegacyHelper.getHelper(mContext).sendMediaButtonEvent(keyEvent, false); } else { mMediaFocusControl.dispatchMediaKeyEvent(keyEvent); } } public void dispatchMediaKeyEventUnderWakelock(KeyEvent keyEvent) { if (USE_SESSIONS) { if (DEBUG_SESSIONS) { int pid = getCallingPid(); Log.w(TAG, "Call to dispatchMediaKeyEventUnderWakelock from " + pid); } MediaSessionLegacyHelper.getHelper(mContext).sendMediaButtonEvent(keyEvent, true); } else { mMediaFocusControl.dispatchMediaKeyEventUnderWakelock(keyEvent); } } //========================================================================================== // Audio Focus Loading
media/java/android/media/session/ISessionCallback.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -28,7 +28,7 @@ import android.os.ResultReceiver; */ oneway interface ISessionCallback { void onCommand(String command, in Bundle extras, in ResultReceiver cb); void onMediaButton(in Intent mediaButtonIntent); void onMediaButton(in Intent mediaButtonIntent, in ResultReceiver cb); void onRequestRouteChange(in RouteInfo route); void onRouteConnected(in RouteInfo route, in RouteOptions options); void onRouteDisconnected(in RouteInfo route, int reason); Loading
media/java/android/media/session/ISessionManager.aidl +2 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ import android.content.ComponentName; import android.media.session.ISession; import android.media.session.ISessionCallback; import android.os.Bundle; import android.view.KeyEvent; /** * Interface to the MediaSessionManagerService Loading @@ -27,4 +28,5 @@ import android.os.Bundle; interface ISessionManager { ISession createSession(String packageName, in ISessionCallback cb, String tag, int userId); List<IBinder> getSessions(in ComponentName compName, int userId); void dispatchMediaKeyEvent(in KeyEvent keyEvent, boolean needWakeLock); } No newline at end of file
media/java/android/media/session/MediaSessionLegacyHelper.java +83 −18 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ import android.view.KeyEvent; */ public class MediaSessionLegacyHelper { private static final String TAG = "MediaSessionHelper"; private static final boolean DEBUG = true; private static final Object sLock = new Object(); private static MediaSessionLegacyHelper sInstance; Loading @@ -52,6 +53,9 @@ public class MediaSessionLegacyHelper { } public static MediaSessionLegacyHelper getHelper(Context context) { if (DEBUG) { Log.d(TAG, "Attempting to get helper with context " + context); } synchronized (sLock) { if (sInstance == null) { sInstance = new MediaSessionLegacyHelper(context); Loading @@ -65,12 +69,25 @@ public class MediaSessionLegacyHelper { return holder == null ? null : holder.mSession; } public void addRccListener(PendingIntent pi, TransportPerformer.Listener listener) { public void sendMediaButtonEvent(KeyEvent keyEvent, boolean needWakeLock) { mSessionManager.dispatchMediaKeyEvent(keyEvent, needWakeLock); if (DEBUG) { Log.d(TAG, "dispatched media key " + keyEvent); } } public void addRccListener(PendingIntent pi, TransportPerformer.Listener listener) { if (pi == null) { Log.w(TAG, "Pending intent was null, can't add rcc listener."); return; } SessionHolder holder = getHolder(pi, true); TransportPerformer performer = holder.mSession.getTransportPerformer(); if (holder.mRccListener != null) { if (holder.mRccListener == listener) { if (DEBUG) { Log.d(TAG, "addRccListener listener already added."); } // This is already the registered listener, ignore return; } Loading @@ -82,9 +99,15 @@ public class MediaSessionLegacyHelper { holder.mFlags |= Session.FLAG_HANDLES_TRANSPORT_CONTROLS; holder.mSession.setFlags(holder.mFlags); holder.update(); if (DEBUG) { Log.d(TAG, "Added rcc listener for " + pi + "."); } } public void removeRccListener(PendingIntent pi) { if (pi == null) { return; } SessionHolder holder = getHolder(pi, false); if (holder != null && holder.mRccListener != null) { holder.mSession.getTransportPerformer().removeListener(holder.mRccListener); Loading @@ -92,30 +115,56 @@ public class MediaSessionLegacyHelper { holder.mFlags &= ~Session.FLAG_HANDLES_TRANSPORT_CONTROLS; holder.mSession.setFlags(holder.mFlags); holder.update(); if (DEBUG) { Log.d(TAG, "Removed rcc listener for " + pi + "."); } } } public void addMediaButtonListener(PendingIntent pi, Context context) { if (pi == null) { Log.w(TAG, "Pending intent was null, can't addMediaButtonListener."); return; } SessionHolder holder = getHolder(pi, true); if (holder.mMediaButtonListener != null) { // Already have this listener registered // Already have this listener registered, but update it anyway as // the extras may have changed. if (DEBUG) { Log.d(TAG, "addMediaButtonListener already added " + pi); } return; } holder.mMediaButtonListener = new MediaButtonListener(pi, context); holder.mFlags |= Session.FLAG_HANDLES_MEDIA_BUTTONS; holder.mSession.setFlags(holder.mFlags); holder.mSession.getTransportPerformer().addListener(holder.mMediaButtonListener, mHandler); holder.mMediaButtonReceiver = new MediaButtonReceiver(pi, context); holder.mSession.addCallback(holder.mMediaButtonReceiver, mHandler); if (DEBUG) { Log.d(TAG, "addMediaButtonListener added " + pi); } } public void removeMediaButtonListener(PendingIntent pi) { if (pi == null) { return; } SessionHolder holder = getHolder(pi, false); if (holder != null && holder.mMediaButtonListener != null) { holder.mSession.getTransportPerformer().removeListener(holder.mMediaButtonListener); holder.mFlags &= ~Session.FLAG_HANDLES_MEDIA_BUTTONS; holder.mSession.setFlags(holder.mFlags); holder.mMediaButtonListener = null; holder.mSession.removeCallback(holder.mMediaButtonReceiver); holder.mMediaButtonReceiver = null; holder.update(); if (DEBUG) { Log.d(TAG, "removeMediaButtonListener removed " + pi); } } } Loading @@ -130,7 +179,32 @@ public class MediaSessionLegacyHelper { return holder; } public static class MediaButtonListener extends TransportPerformer.Listener { private static void sendKeyEvent(PendingIntent pi, Context context, Intent intent) { try { pi.send(context, 0, intent); } catch (CanceledException e) { Log.e(TAG, "Error sending media key down event:", e); // Don't bother sending up if down failed return; } } private static final class MediaButtonReceiver extends Session.Callback { private final PendingIntent mPendingIntent; private final Context mContext; public MediaButtonReceiver(PendingIntent pi, Context context) { mPendingIntent = pi; mContext = context; } @Override public void onMediaButton(Intent mediaButtonIntent) { MediaSessionLegacyHelper.sendKeyEvent(mPendingIntent, mContext, mediaButtonIntent); } } private static final class MediaButtonListener extends TransportPerformer.Listener { private final PendingIntent mPendingIntent; private final Context mContext; Loading Loading @@ -179,20 +253,14 @@ public class MediaSessionLegacyHelper { Intent intent = new Intent(Intent.ACTION_MEDIA_BUTTON); intent.putExtra(Intent.EXTRA_KEY_EVENT, ke); try { mPendingIntent.send(mContext, 0, intent); } catch (CanceledException e) { Log.e(TAG, "Error sending media key down event:", e); // Don't bother sending up if down failed return; } MediaSessionLegacyHelper.sendKeyEvent(mPendingIntent, mContext, intent); ke = new KeyEvent(KeyEvent.ACTION_UP, keyCode); intent.putExtra(Intent.EXTRA_KEY_EVENT, ke); try { mPendingIntent.send(mContext, 0, intent); } catch (CanceledException e) { Log.e(TAG, "Error sending media key up event:", e); MediaSessionLegacyHelper.sendKeyEvent(mPendingIntent, mContext, intent); if (DEBUG) { Log.d(TAG, "Sent " + keyCode + " to pending intent " + mPendingIntent); } } } Loading @@ -201,6 +269,7 @@ public class MediaSessionLegacyHelper { public final Session mSession; public final PendingIntent mPi; public MediaButtonListener mMediaButtonListener; public MediaButtonReceiver mMediaButtonReceiver; public TransportPerformer.Listener mRccListener; public int mFlags; Loading @@ -213,10 +282,6 @@ public class MediaSessionLegacyHelper { if (mMediaButtonListener == null && mRccListener == null) { mSession.release(); mSessions.remove(mPi); } else if (mMediaButtonListener != null && mRccListener != null) { // TODO set session to active } else { // TODO set session to inactive } } } Loading