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 
PlaylistItem(String qid, String iid, Uri uri, String mime, PendingIntent pi)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 
setRemoteItemId(String riid)50     public void setRemoteItemId(String riid) {
51         mRemoteItemId = riid;
52     }
53 
setState(int state)54     public void setState(int state) {
55         mPlaybackState = state;
56     }
57 
setPosition(long pos)58     public void setPosition(long pos) {
59         mContentPosition = pos;
60     }
61 
setTimestamp(long ts)62     public void setTimestamp(long ts) {
63         mTimestamp = ts;
64     }
65 
setDuration(long duration)66     public void setDuration(long duration) {
67         mContentDuration = duration;
68     }
69 
getSessionId()70     public String getSessionId() {
71         return mSessionId;
72     }
73 
getItemId()74     public String getItemId() {
75         return mItemId;
76     }
77 
getRemoteItemId()78     public String getRemoteItemId() {
79         return mRemoteItemId;
80     }
81 
getUri()82     public Uri getUri() {
83         return mUri;
84     }
85 
getUpdateReceiver()86     public PendingIntent getUpdateReceiver() {
87         return mUpdateReceiver;
88     }
89 
getState()90     public int getState() {
91         return mPlaybackState;
92     }
93 
getPosition()94     public long getPosition() {
95         return mContentPosition;
96     }
97 
getDuration()98     public long getDuration() {
99         return mContentDuration;
100     }
101 
getTimestamp()102     public long getTimestamp() {
103         return mTimestamp;
104     }
105 
getStatus()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
toString()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 }
131