blob: 0819077c8b34838a7c20c78d307839ac86b36d92 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
package com.android.onemedia;
import android.app.Service;
import android.content.Intent;
import android.media.MediaSessionToken;
import android.os.Bundle;
import android.os.IBinder;
import android.os.RemoteException;
import com.android.onemedia.playback.IRequestCallback;
import com.android.onemedia.playback.RequestUtils;
import java.util.ArrayList;
public class PlayerService extends Service {
private static final String TAG = "PlayerService";
private PlayerBinder mBinder;
private PlayerSession mSession;
private Intent mIntent;
private ArrayList<IPlayerCallback> mCbs = new ArrayList<IPlayerCallback>();
@Override
public void onCreate() {
mIntent = onCreateServiceIntent();
mSession = onCreatePlayerController();
mSession.createSession();
}
@Override
public IBinder onBind(Intent intent) {
if (mBinder == null) {
mBinder = new PlayerBinder();
}
return mBinder;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
return START_STICKY;
}
@Override
public void onDestroy() {
mSession.onDestroy();
}
protected Intent onCreateServiceIntent() {
return new Intent(this, PlayerService.class).setPackage(getBasePackageName());
}
protected PlayerSession onCreatePlayerController() {
return new PlayerSession(this);
}
protected ArrayList<String> getAllowedPackages() {
return null;
}
public class PlayerBinder extends IPlayerService.Stub {
@Override
public void sendRequest(String action, Bundle params, IRequestCallback cb) {
if (RequestUtils.ACTION_SET_CONTENT.equals(action)) {
mSession.setContent(params);
} else if (RequestUtils.ACTION_SET_NEXT_CONTENT.equals(action)) {
mSession.setNextContent(params);
}
}
@Override
public void registerCallback(final IPlayerCallback cb) throws RemoteException {
if (!mCbs.contains(cb)) {
mCbs.add(cb);
cb.asBinder().linkToDeath(new IBinder.DeathRecipient() {
@Override
public void binderDied() {
mCbs.remove(cb);
}
}, 0);
}
try {
cb.onSessionChanged(getSessionToken());
} catch (RemoteException e) {
mCbs.remove(cb);
throw e;
}
}
@Override
public void unregisterCallback(IPlayerCallback cb) throws RemoteException {
mCbs.remove(cb);
}
@Override
public MediaSessionToken getSessionToken() throws RemoteException {
// TODO(epastern): Auto-generated method stub
return mSession.getSessionToken();
}
}
}
|