PlaylistItem.java revision a6bf581f7a7a6326505569f0d1215d0ba84779d7
157456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang/*
257456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang * Copyright (C) 2013 The Android Open Source Project
357456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang *
457456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang * Licensed under the Apache License, Version 2.0 (the "License");
557456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang * you may not use this file except in compliance with the License.
657456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang * You may obtain a copy of the License at
757456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang *
857456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang *      http://www.apache.org/licenses/LICENSE-2.0
957456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang *
1057456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang * Unless required by applicable law or agreed to in writing, software
1157456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang * distributed under the License is distributed on an "AS IS" BASIS,
1257456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1357456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang * See the License for the specific language governing permissions and
1457456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang * limitations under the License.
1557456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang */
1657456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang
1757456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhangpackage com.example.android.supportv7.media;
1857456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang
1957456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhangimport android.app.PendingIntent;
20a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhangimport android.net.Uri;
21a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhangimport android.os.SystemClock;
22a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhangimport android.support.v7.media.MediaItemStatus;
2357456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang
2457456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang/**
25a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang * PlaylistItem helps keep track of the current status of an media item.
2657456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang */
27a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhangfinal class PlaylistItem {
2857456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang    // immutables
2957456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang    private final String mSessionId;
3057456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang    private final String mItemId;
3157456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang    private final Uri mUri;
32a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang    private final String mMime;
3357456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang    private final PendingIntent mUpdateReceiver;
3457456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang    // changeable states
3557456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang    private int mPlaybackState = MediaItemStatus.PLAYBACK_STATE_PENDING;
3657456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang    private long mContentPosition;
3757456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang    private long mContentDuration;
38a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang    private long mTimestamp;
39a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang    private String mRemoteItemId;
4057456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang
41a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang    public PlaylistItem(String qid, String iid, Uri uri, String mime, PendingIntent pi) {
4257456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang        mSessionId = qid;
4357456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang        mItemId = iid;
4457456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang        mUri = uri;
45a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang        mMime = mime;
4657456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang        mUpdateReceiver = pi;
47a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang        setTimestamp(SystemClock.elapsedRealtime());
48a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang    }
49a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang
50a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang    public void setRemoteItemId(String riid) {
51a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang        mRemoteItemId = riid;
5257456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang    }
5357456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang
5457456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang    public void setState(int state) {
5557456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang        mPlaybackState = state;
5657456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang    }
5757456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang
58a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang    public void setPosition(long pos) {
5957456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang        mContentPosition = pos;
6057456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang    }
6157456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang
62a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang    public void setTimestamp(long ts) {
63a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang        mTimestamp = ts;
64a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang    }
65a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang
66a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang    public void setDuration(long duration) {
6757456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang        mContentDuration = duration;
6857456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang    }
6957456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang
7057456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang    public String getSessionId() {
7157456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang        return mSessionId;
7257456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang    }
7357456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang
7457456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang    public String getItemId() {
7557456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang        return mItemId;
7657456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang    }
7757456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang
78a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang    public String getRemoteItemId() {
79a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang        return mRemoteItemId;
80a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang    }
81a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang
8257456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang    public Uri getUri() {
8357456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang        return mUri;
8457456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang    }
8557456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang
8657456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang    public PendingIntent getUpdateReceiver() {
8757456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang        return mUpdateReceiver;
8857456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang    }
8957456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang
9057456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang    public int getState() {
9157456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang        return mPlaybackState;
9257456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang    }
9357456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang
94a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang    public long getPosition() {
9557456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang        return mContentPosition;
9657456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang    }
9757456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang
98a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang    public long getDuration() {
9957456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang        return mContentDuration;
10057456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang    }
10157456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang
102a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang    public long getTimestamp() {
103a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang        return mTimestamp;
104a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang    }
105a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang
10657456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang    public MediaItemStatus getStatus() {
10757456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang        return new MediaItemStatus.Builder(mPlaybackState)
10857456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang            .setContentPosition(mContentPosition)
10957456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang            .setContentDuration(mContentDuration)
110a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang            .setTimestamp(mTimestamp)
11157456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang            .build();
11257456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang    }
11357456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang
11457456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang    @Override
11557456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang    public String toString() {
11657456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang        String state[] = {
11757456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang            "PENDING",
11857456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang            "PLAYING",
11957456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang            "PAUSED",
12057456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang            "BUFFERING",
12157456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang            "FINISHED",
12257456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang            "CANCELED",
12357456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang            "INVALIDATED",
12457456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang            "ERROR"
12557456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang        };
12657456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang        return "[" + mSessionId + "|" + mItemId + "|"
127a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang            + (mRemoteItemId != null ? mRemoteItemId : "-") + "|"
12857456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang            + state[mPlaybackState] + "] " + mUri.toString();
12957456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang    }
13057456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang}