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}