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