/*
* Copyright (C) 2013 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.example.android.mediarouter.player;
import android.app.PendingIntent;
import android.net.Uri;
import android.os.SystemClock;
import android.support.v7.media.MediaItemStatus;
/**
* PlaylistItem helps keep track of the current status of an media item.
*/
public final class PlaylistItem {
// immutables
private final String mSessionId;
private final String mItemId;
private final Uri mUri;
private final String mMime;
private final PendingIntent mUpdateReceiver;
// changeable states
private int mPlaybackState = MediaItemStatus.PLAYBACK_STATE_PENDING;
private long mContentPosition;
private long mContentDuration;
private long mTimestamp;
private String mRemoteItemId;
public PlaylistItem(String qid, String iid, Uri uri, String mime, PendingIntent pi) {
mSessionId = qid;
mItemId = iid;
mUri = uri;
mMime = mime;
mUpdateReceiver = pi;
setTimestamp(SystemClock.elapsedRealtime());
}
public void setRemoteItemId(String riid) {
mRemoteItemId = riid;
}
public void setState(int state) {
mPlaybackState = state;
}
public void setPosition(long pos) {
mContentPosition = pos;
}
public void setTimestamp(long ts) {
mTimestamp = ts;
}
public void setDuration(long duration) {
mContentDuration = duration;
}
public String getSessionId() {
return mSessionId;
}
public String getItemId() {
return mItemId;
}
public String getRemoteItemId() {
return mRemoteItemId;
}
public Uri getUri() {
return mUri;
}
public PendingIntent getUpdateReceiver() {
return mUpdateReceiver;
}
public int getState() {
return mPlaybackState;
}
public long getPosition() {
return mContentPosition;
}
public long getDuration() {
return mContentDuration;
}
public long getTimestamp() {
return mTimestamp;
}
public MediaItemStatus getStatus() {
return new MediaItemStatus.Builder(mPlaybackState)
.setContentPosition(mContentPosition)
.setContentDuration(mContentDuration)
.setTimestamp(mTimestamp)
.build();
}
@Override
public String toString() {
String state[] = {
"PENDING",
"PLAYING",
"PAUSED",
"BUFFERING",
"FINISHED",
"CANCELED",
"INVALIDATED",
"ERROR"
};
return "[" + mSessionId + "|" + mItemId + "|"
+ (mRemoteItemId != null ? mRemoteItemId : "-") + "|"
+ state[mPlaybackState] + "] " + mUri.toString();
}
}