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