1/*
2 * Copyright 2018 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package androidx.media.test.client;
18
19import androidx.media.MediaItem2;
20import androidx.media.MediaMetadata2;
21import androidx.media.MediaPlaylistAgent;
22
23import java.util.List;
24import java.util.concurrent.CountDownLatch;
25
26/**
27 * A mock implementation of {@link MediaPlaylistAgent} for testing.
28 * <p>
29 * Do not use mockito for {@link MediaPlaylistAgent}. Instead, use this.
30 * Mocks created from mockito should not be shared across different threads.
31 */
32public class MockPlaylistAgent extends MediaPlaylistAgent {
33    public final CountDownLatch mCountDownLatch = new CountDownLatch(1);
34
35    public List<MediaItem2> mPlaylist;
36    public MediaMetadata2 mMetadata;
37    public MediaItem2 mCurrentMediaItem;
38    public MediaItem2 mItem;
39    public int mIndex = -1;
40    public @RepeatMode int mRepeatMode = -1;
41    public @ShuffleMode int mShuffleMode = -1;
42
43    public boolean mSetPlaylistCalled;
44    public boolean mUpdatePlaylistMetadataCalled;
45    public boolean mAddPlaylistItemCalled;
46    public boolean mRemovePlaylistItemCalled;
47    public boolean mReplacePlaylistItemCalled;
48    public boolean mSkipToPlaylistItemCalled;
49    public boolean mSkipToPreviousItemCalled;
50    public boolean mSkipToNextItemCalled;
51    public boolean mSetRepeatModeCalled;
52    public boolean mSetShuffleModeCalled;
53
54    @Override
55    public List<MediaItem2> getPlaylist() {
56        return mPlaylist;
57    }
58
59    @Override
60    public void setPlaylist(List<MediaItem2> list, MediaMetadata2 metadata) {
61        mSetPlaylistCalled = true;
62        mPlaylist = list;
63        mMetadata = metadata;
64        mCountDownLatch.countDown();
65    }
66
67    @Override
68    public MediaMetadata2 getPlaylistMetadata() {
69        return mMetadata;
70    }
71
72    @Override
73    public void updatePlaylistMetadata(MediaMetadata2 metadata) {
74        mUpdatePlaylistMetadataCalled = true;
75        mMetadata = metadata;
76        mCountDownLatch.countDown();
77    }
78
79    @Override
80    public MediaItem2 getCurrentMediaItem() {
81        return mCurrentMediaItem;
82    }
83
84    @Override
85    public void addPlaylistItem(int index, MediaItem2 item) {
86        mAddPlaylistItemCalled = true;
87        mIndex = index;
88        mItem = item;
89        mCountDownLatch.countDown();
90    }
91
92    @Override
93    public void removePlaylistItem(MediaItem2 item) {
94        mRemovePlaylistItemCalled = true;
95        mItem = item;
96        mCountDownLatch.countDown();
97    }
98
99    @Override
100    public void replacePlaylistItem(int index, MediaItem2 item) {
101        mReplacePlaylistItemCalled = true;
102        mIndex = index;
103        mItem = item;
104        mCountDownLatch.countDown();
105    }
106
107    @Override
108    public void skipToPlaylistItem(MediaItem2 item) {
109        mSkipToPlaylistItemCalled = true;
110        mItem = item;
111        mCountDownLatch.countDown();
112    }
113
114    @Override
115    public void skipToPreviousItem() {
116        mSkipToPreviousItemCalled = true;
117        mCountDownLatch.countDown();
118    }
119
120    @Override
121    public void skipToNextItem() {
122        mSkipToNextItemCalled = true;
123        mCountDownLatch.countDown();
124    }
125
126    @Override
127    public int getRepeatMode() {
128        return mRepeatMode;
129    }
130
131    @Override
132    public void setRepeatMode(int repeatMode) {
133        mSetRepeatModeCalled = true;
134        mRepeatMode = repeatMode;
135        mCountDownLatch.countDown();
136    }
137
138    @Override
139    public int getShuffleMode() {
140        return mShuffleMode;
141    }
142
143    @Override
144    public void setShuffleMode(int shuffleMode) {
145        mSetShuffleModeCalled = true;
146        mShuffleMode = shuffleMode;
147        mCountDownLatch.countDown();
148    }
149}
150