summaryrefslogtreecommitdiff
path: root/android/media/MockPlayer.java
blob: fd693092ca99eb83e2e993db87df06f043dddd01 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
/*
 * Copyright 2018 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.media;

import android.media.MediaSession2.PlaylistParam;
import android.media.session.PlaybackState;
import android.os.Handler;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Executor;

/**
 * A mock implementation of {@link MediaPlayerBase} for testing.
 */
public class MockPlayer extends MediaPlayerBase {
    public final CountDownLatch mCountDownLatch;

    public boolean mPlayCalled;
    public boolean mPauseCalled;
    public boolean mStopCalled;
    public boolean mSkipToPreviousCalled;
    public boolean mSkipToNextCalled;
    public List<PlaybackListenerHolder> mListeners = new ArrayList<>();
    private PlaybackState2 mLastPlaybackState;

    public MockPlayer(int count) {
        mCountDownLatch = (count > 0) ? new CountDownLatch(count) : null;
    }

    @Override
    public void play() {
        mPlayCalled = true;
        if (mCountDownLatch != null) {
            mCountDownLatch.countDown();
        }
    }

    @Override
    public void pause() {
        mPauseCalled = true;
        if (mCountDownLatch != null) {
            mCountDownLatch.countDown();
        }
    }

    @Override
    public void stop() {
        mStopCalled = true;
        if (mCountDownLatch != null) {
            mCountDownLatch.countDown();
        }
    }

    @Override
    public void skipToPrevious() {
        mSkipToPreviousCalled = true;
        if (mCountDownLatch != null) {
            mCountDownLatch.countDown();
        }
    }

    @Override
    public void skipToNext() {
        mSkipToNextCalled = true;
        if (mCountDownLatch != null) {
            mCountDownLatch.countDown();
        }
    }



    @Nullable
    @Override
    public PlaybackState2 getPlaybackState() {
        return mLastPlaybackState;
    }

    @Override
    public void addPlaybackListener(@NonNull Executor executor,
            @NonNull PlaybackListener listener) {
        mListeners.add(new PlaybackListenerHolder(executor, listener));
    }

    @Override
    public void removePlaybackListener(@NonNull PlaybackListener listener) {
        int index = PlaybackListenerHolder.indexOf(mListeners, listener);
        if (index >= 0) {
            mListeners.remove(index);
        }
    }

    public void notifyPlaybackState(final PlaybackState2 state) {
        mLastPlaybackState = state;
        for (int i = 0; i < mListeners.size(); i++) {
            mListeners.get(i).postPlaybackChange(state);
        }
    }

    // No-op. Should be added for test later.
    @Override
    public void prepare() {
    }

    @Override
    public void seekTo(long pos) {
    }

    @Override
    public void fastFoward() {
    }

    @Override
    public void rewind() {
    }

    @Override
    public AudioAttributes getAudioAttributes() {
        return null;
    }

    @Override
    public void setPlaylist(List<MediaItem2> item, PlaylistParam param) {
    }

    @Override
    public void setCurrentPlaylistItem(int index) {
    }
}