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; 3270f3627685b55b2bc1b3f0c17c9c30aa3a7fd062Donghyun Cho private final String mTitle; 33a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang private final String mMime; 3457456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang private final PendingIntent mUpdateReceiver; 3557456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang // changeable states 3657456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang private int mPlaybackState = MediaItemStatus.PLAYBACK_STATE_PENDING; 3757456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang private long mContentPosition; 3857456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang private long mContentDuration; 39a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang private long mTimestamp; 40a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang private String mRemoteItemId; 4157456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang 4270f3627685b55b2bc1b3f0c17c9c30aa3a7fd062Donghyun Cho public PlaylistItem(String qid, String iid, String title, Uri uri, String mime, 4370f3627685b55b2bc1b3f0c17c9c30aa3a7fd062Donghyun Cho PendingIntent pi) { 4457456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang mSessionId = qid; 4557456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang mItemId = iid; 4670f3627685b55b2bc1b3f0c17c9c30aa3a7fd062Donghyun Cho mTitle = title; 4757456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang mUri = uri; 48a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang mMime = mime; 4957456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang mUpdateReceiver = pi; 50a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang setTimestamp(SystemClock.elapsedRealtime()); 51a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang } 52a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang 53a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang public void setRemoteItemId(String riid) { 54a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang mRemoteItemId = riid; 5557456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang } 5657456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang 5757456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang public void setState(int state) { 5857456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang mPlaybackState = state; 5957456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang } 6057456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang 61a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang public void setPosition(long pos) { 6257456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang mContentPosition = pos; 6357456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang } 6457456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang 65a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang public void setTimestamp(long ts) { 66a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang mTimestamp = ts; 67a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang } 68a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang 69a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang public void setDuration(long duration) { 7057456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang mContentDuration = duration; 7157456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang } 7257456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang 7357456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang public String getSessionId() { 7457456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang return mSessionId; 7557456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang } 7657456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang 7757456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang public String getItemId() { 7857456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang return mItemId; 7957456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang } 8057456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang 81a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang public String getRemoteItemId() { 82a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang return mRemoteItemId; 83a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang } 84a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang 8570f3627685b55b2bc1b3f0c17c9c30aa3a7fd062Donghyun Cho public String getTitle() { 8670f3627685b55b2bc1b3f0c17c9c30aa3a7fd062Donghyun Cho return mTitle; 8770f3627685b55b2bc1b3f0c17c9c30aa3a7fd062Donghyun Cho } 8870f3627685b55b2bc1b3f0c17c9c30aa3a7fd062Donghyun Cho 8957456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang public Uri getUri() { 9057456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang return mUri; 9157456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang } 9257456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang 9357456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang public PendingIntent getUpdateReceiver() { 9457456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang return mUpdateReceiver; 9557456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang } 9657456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang 9757456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang public int getState() { 9857456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang return mPlaybackState; 9957456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang } 10057456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang 101a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang public long getPosition() { 10257456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang return mContentPosition; 10357456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang } 10457456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang 105a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang public long getDuration() { 10657456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang return mContentDuration; 10757456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang } 10857456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang 109a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang public long getTimestamp() { 110a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang return mTimestamp; 111a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang } 112a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang 11357456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang public MediaItemStatus getStatus() { 11457456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang return new MediaItemStatus.Builder(mPlaybackState) 11557456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang .setContentPosition(mContentPosition) 11657456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang .setContentDuration(mContentDuration) 117a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang .setTimestamp(mTimestamp) 11857456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang .build(); 11957456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang } 12057456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang 12157456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang @Override 12257456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang public String toString() { 12357456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang String state[] = { 12457456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang "PENDING", 12557456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang "PLAYING", 12657456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang "PAUSED", 12757456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang "BUFFERING", 12857456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang "FINISHED", 12957456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang "CANCELED", 13057456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang "INVALIDATED", 13157456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang "ERROR" 13257456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang }; 13357456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang return "[" + mSessionId + "|" + mItemId + "|" 134a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang + (mRemoteItemId != null ? mRemoteItemId : "-") + "|" 13570f3627685b55b2bc1b3f0c17c9c30aa3a7fd062Donghyun Cho + state[mPlaybackState] + "] " + mTitle + ": " + mUri.toString(); 13657456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang } 13770f3627685b55b2bc1b3f0c17c9c30aa3a7fd062Donghyun Cho} 138