PlayerSession.java revision bfa153b64b4e8c2faa39a15e87fc9f0300335f20
1package com.android.onemedia; 2 3import android.content.Context; 4import android.content.Intent; 5import android.media.MediaSession; 6import android.media.MediaSessionManager; 7import android.media.MediaSessionToken; 8import android.os.Bundle; 9import android.util.Log; 10import android.view.KeyEvent; 11 12import com.android.onemedia.playback.LocalRenderer; 13import com.android.onemedia.playback.Renderer; 14import com.android.onemedia.playback.RendererFactory; 15 16public class PlayerSession { 17 private static final String TAG = "PlayerController"; 18 19 protected MediaSession mSession; 20 protected Context mContext; 21 protected RendererFactory mRendererFactory; 22 protected LocalRenderer mRenderer; 23 protected ControllerCb mCallback; 24 protected RenderListener mRenderListener; 25 26 public PlayerSession(Context context) { 27 mContext = context; 28 mRendererFactory = new RendererFactory(); 29 mRenderer = new LocalRenderer(context, null); 30 mCallback = new ControllerCb(); 31 mRenderListener = new RenderListener(); 32 33 mRenderer.registerListener(mRenderListener); 34 } 35 36 public void createSession() { 37 if (mSession != null) { 38 mSession.release(); 39 } 40 MediaSessionManager man = (MediaSessionManager) mContext 41 .getSystemService(Context.MEDIA_SESSION_SERVICE); 42 Log.d(TAG, "Creating session for package " + mContext.getBasePackageName()); 43 mSession = man.createSession("OneMedia"); 44 mSession.addCallback(mCallback); 45 } 46 47 public void onDestroy() { 48 if (mSession != null) { 49 mSession.release(); 50 } 51 if (mRenderer != null) { 52 mRenderer.unregisterListener(mRenderListener); 53 mRenderer.onDestroy(); 54 } 55 } 56 57 public MediaSessionToken getSessionToken() { 58 return mSession.getSessionToken(); 59 } 60 61 public void setContent(Bundle request) { 62 mRenderer.setContent(request); 63 } 64 65 public void setNextContent(Bundle request) { 66 mRenderer.setNextContent(request); 67 } 68 69 protected class RenderListener implements Renderer.Listener { 70 71 @Override 72 public void onError(int type, int extra, Bundle extras, Throwable error) { 73 mSession.setPlaybackState(Renderer.STATE_ERROR); 74 } 75 76 @Override 77 public void onStateChanged(int newState) { 78 mSession.setPlaybackState(newState); 79 } 80 81 @Override 82 public void onBufferingUpdate(int percent) { 83 } 84 85 @Override 86 public void onFocusLost() { 87 mSession.setPlaybackState(Renderer.STATE_PAUSED); 88 } 89 90 @Override 91 public void onNextStarted() { 92 } 93 94 } 95 96 protected class ControllerCb extends MediaSession.Callback { 97 98 @Override 99 public void onMediaButton(Intent mediaRequestIntent) { 100 if (Intent.ACTION_MEDIA_BUTTON.equals(mediaRequestIntent.getAction())) { 101 KeyEvent event = (KeyEvent) mediaRequestIntent 102 .getParcelableExtra(Intent.EXTRA_KEY_EVENT); 103 switch (event.getKeyCode()) { 104 case KeyEvent.KEYCODE_MEDIA_PLAY: 105 Log.d(TAG, "play button received"); 106 mRenderer.onPlay(); 107 break; 108 case KeyEvent.KEYCODE_MEDIA_PAUSE: 109 Log.d(TAG, "pause button received"); 110 mRenderer.onPause(); 111 break; 112 } 113 } 114 } 115 } 116 117} 118