1
/*
2
* Copyright (C) 2013 The Android Open Source Project
3
*
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
* you may not use this file except in compliance with the License.
6
* You may obtain a copy of the License at
7
*
8
* http://www.apache.org/licenses/LICENSE-2.0
9
*
10
* Unless required by applicable law or agreed to in writing, software
11
* distributed under the License is distributed on an "AS IS" BASIS,
12
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
* See the License for the specific language governing permissions and
14
* limitations under the License.
15
*/
16
17
package com.example.android.mediarouter.player;
18
19
import android.app.PendingIntent;
20
import android.net.Uri;
21
import android.os.SystemClock;
22
import android.support.v7.media.MediaItemStatus;
23
24
/**
25
* PlaylistItem helps keep track of the current status of an media item.
26
*/
27
public final class PlaylistItem {
28
// immutables
29
private final String mSessionId;
30
private final String mItemId;
31
private final Uri mUri;
32
private final String mMime;
33
private final PendingIntent mUpdateReceiver;
34
// changeable states
35
private int mPlaybackState = MediaItemStatus.PLAYBACK_STATE_PENDING;
36
private long mContentPosition;
37
private long mContentDuration;
38
private long mTimestamp;
39
private String mRemoteItemId;
40
41
public PlaylistItem(String qid, String iid, Uri uri, String mime, PendingIntent pi) {
42
mSessionId = qid;
43
mItemId = iid;
44
mUri = uri;
45
mMime = mime;
46
mUpdateReceiver = pi;
47
setTimestamp(SystemClock.elapsedRealtime());
48
}
49
50
public void setRemoteItemId(String riid) {
51
mRemoteItemId = riid;
52
}
53
54
public void setState(int state) {
55
mPlaybackState = state;
56
}
57
58
public void setPosition(long pos) {
59
mContentPosition = pos;
60
}
61
62
public void setTimestamp(long ts) {
63
mTimestamp = ts;
64
}
65
66
public void setDuration(long duration) {
67
mContentDuration = duration;
68
}
69
70
public String getSessionId() {
71
return mSessionId;
72
}
73
74
public String getItemId() {
75
return mItemId;
76
}
77
78
public String getRemoteItemId() {
79
return mRemoteItemId;
80
}
81
82
public Uri getUri() {
83
return mUri;
84
}
85
86
public PendingIntent getUpdateReceiver() {
87
return mUpdateReceiver;
88
}
89
90
public int getState() {
91
return mPlaybackState;
92
}
93
94
public long getPosition() {
95
return mContentPosition;
96
}
97
98
public long getDuration() {
99
return mContentDuration;
100
}
101
102
public long getTimestamp() {
103
return mTimestamp;
104
}
105
106
public MediaItemStatus getStatus() {
107
return new MediaItemStatus.Builder(mPlaybackState)
108
.setContentPosition(mContentPosition)
109
.setContentDuration(mContentDuration)
110
.setTimestamp(mTimestamp)
111
.build();
112
}
113
114
@Override
115
public String toString() {
116
String state[] = {
117
"PENDING",
118
"PLAYING",
119
"PAUSED",
120
"BUFFERING",
121
"FINISHED",
122
"CANCELED",
123
"INVALIDATED",
124
"ERROR"
125
};
126
return "[" + mSessionId + "|" + mItemId + "|"
127
+ (mRemoteItemId != null ? mRemoteItemId : "-") + "|"
128
+ state[mPlaybackState] + "] " + mUri.toString();
129
}
130
}