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