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; 22def582a5836579a3fadabfdbe4413cb1652bf098Aurimas Liutikas 23ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikasimport androidx.mediarouter.media.MediaItemStatus; 2457456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang 2557456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang/** 26a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang * PlaylistItem helps keep track of the current status of an media item. 2757456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang */ 28a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhangfinal class PlaylistItem { 2957456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang // immutables 3057456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang private final String mSessionId; 3157456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang private final String mItemId; 3257456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang private final Uri mUri; 3370f3627685b55b2bc1b3f0c17c9c30aa3a7fd062Donghyun Cho private final String mTitle; 34a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang private final String mMime; 3557456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang private final PendingIntent mUpdateReceiver; 3657456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang // changeable states 3757456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang private int mPlaybackState = MediaItemStatus.PLAYBACK_STATE_PENDING; 3857456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang private long mContentPosition; 3957456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang private long mContentDuration; 40a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang private long mTimestamp; 41a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang private String mRemoteItemId; 4257456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang 4370f3627685b55b2bc1b3f0c17c9c30aa3a7fd062Donghyun Cho public PlaylistItem(String qid, String iid, String title, Uri uri, String mime, 4470f3627685b55b2bc1b3f0c17c9c30aa3a7fd062Donghyun Cho PendingIntent pi) { 4557456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang mSessionId = qid; 4657456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang mItemId = iid; 4770f3627685b55b2bc1b3f0c17c9c30aa3a7fd062Donghyun Cho mTitle = title; 4857456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang mUri = uri; 49a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang mMime = mime; 5057456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang mUpdateReceiver = pi; 51a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang setTimestamp(SystemClock.elapsedRealtime()); 52a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang } 53a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang 54a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang public void setRemoteItemId(String riid) { 55a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang mRemoteItemId = riid; 5657456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang } 5757456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang 5857456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang public void setState(int state) { 5957456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang mPlaybackState = state; 6057456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang } 6157456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang 62a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang public void setPosition(long pos) { 6357456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang mContentPosition = pos; 6457456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang } 6557456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang 66a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang public void setTimestamp(long ts) { 67a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang mTimestamp = ts; 68a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang } 69a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang 70a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang public void setDuration(long duration) { 7157456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang mContentDuration = duration; 7257456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang } 7357456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang 7457456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang public String getSessionId() { 7557456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang return mSessionId; 7657456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang } 7757456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang 7857456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang public String getItemId() { 7957456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang return mItemId; 8057456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang } 8157456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang 82a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang public String getRemoteItemId() { 83a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang return mRemoteItemId; 84a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang } 85a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang 8670f3627685b55b2bc1b3f0c17c9c30aa3a7fd062Donghyun Cho public String getTitle() { 8770f3627685b55b2bc1b3f0c17c9c30aa3a7fd062Donghyun Cho return mTitle; 8870f3627685b55b2bc1b3f0c17c9c30aa3a7fd062Donghyun Cho } 8970f3627685b55b2bc1b3f0c17c9c30aa3a7fd062Donghyun Cho 9057456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang public Uri getUri() { 9157456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang return mUri; 9257456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang } 9357456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang 9457456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang public PendingIntent getUpdateReceiver() { 9557456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang return mUpdateReceiver; 9657456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang } 9757456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang 9857456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang public int getState() { 9957456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang return mPlaybackState; 10057456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang } 10157456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang 102a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang public long getPosition() { 10357456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang return mContentPosition; 10457456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang } 10557456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang 106a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang public long getDuration() { 10757456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang return mContentDuration; 10857456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang } 10957456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang 110a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang public long getTimestamp() { 111a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang return mTimestamp; 112a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang } 113a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang 11457456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang public MediaItemStatus getStatus() { 11557456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang return new MediaItemStatus.Builder(mPlaybackState) 11657456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang .setContentPosition(mContentPosition) 11757456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang .setContentDuration(mContentDuration) 118a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang .setTimestamp(mTimestamp) 11957456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang .build(); 12057456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang } 12157456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang 12257456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang @Override 12357456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang public String toString() { 12457456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang String state[] = { 12557456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang "PENDING", 12657456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang "PLAYING", 12757456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang "PAUSED", 12857456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang "BUFFERING", 12957456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang "FINISHED", 13057456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang "CANCELED", 13157456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang "INVALIDATED", 13257456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang "ERROR" 13357456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang }; 13457456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang return "[" + mSessionId + "|" + mItemId + "|" 135a6bf581f7a7a6326505569f0d1215d0ba84779d7Chong Zhang + (mRemoteItemId != null ? mRemoteItemId : "-") + "|" 13670f3627685b55b2bc1b3f0c17c9c30aa3a7fd062Donghyun Cho + state[mPlaybackState] + "] " + mTitle + ": " + mUri.toString(); 13757456222f52fbfc1dcfb1b99030aad6acc02ad23Chong Zhang } 13870f3627685b55b2bc1b3f0c17c9c30aa3a7fd062Donghyun Cho} 139