package com.marverenic.music.player;
import android.graphics.Bitmap;
import com.marverenic.music.data.store.ReadOnlyPreferenceStore;
import com.marverenic.music.model.Song;
import java.util.Collections;
import java.util.List;
import rx.Observable;
import rx.Single;
import rx.subjects.BehaviorSubject;
public class MockPlayerController implements PlayerController {
// TODO implement stubbed methods when a test requires interactions with a PlayerController
private BehaviorSubject<List<Song>> mQueue;
private BehaviorSubject<Integer> mQueueIndex;
public MockPlayerController() {
mQueue = BehaviorSubject.create(Collections.emptyList());
mQueueIndex = BehaviorSubject.create(0);
}
@Override
public Observable<String> getError() {
return Observable.never();
}
@Override
public Observable<String> getInfo() {
return Observable.never();
}
@Override
public Single<PlayerState> getPlayerState() {
throw new UnsupportedOperationException("Stub!");
}
@Override
public void restorePlayerState(PlayerState restoreState) {
throw new UnsupportedOperationException("Stub!");
}
@Override
public void stop() {
throw new UnsupportedOperationException("Stub!");
}
@Override
public void skip() {
mQueueIndex.onNext(mQueueIndex.getValue() + 1);
}
@Override
public void previous() {
mQueueIndex.onNext(mQueueIndex.getValue() - 1);
}
@Override
public void togglePlay() {
throw new UnsupportedOperationException("Stub!");
}
@Override
public void play() {
throw new UnsupportedOperationException("Stub!");
}
@Override
public void pause() {
throw new UnsupportedOperationException("Stub!");
}
@Override
public void updatePlayerPreferences(ReadOnlyPreferenceStore preferenceStore) {
throw new UnsupportedOperationException("Stub!");
}
@Override
public void setQueue(List<Song> newQueue, int newPosition) {
mQueue.onNext(newQueue);
mQueueIndex.onNext(newPosition);
}
@Override
public void clearQueue() {
setQueue(Collections.emptyList(), 0);
}
@Override
public void changeSong(int newPosition) {
mQueueIndex.onNext(newPosition);
}
@Override
public void editQueue(List<Song> queue, int newPosition) {
throw new UnsupportedOperationException("Stub!");
}
@Override
public void queueNext(Song song) {
throw new UnsupportedOperationException("Stub!");
}
@Override
public void queueNext(List<Song> songs) {
throw new UnsupportedOperationException("Stub!");
}
@Override
public void queueLast(Song song) {
throw new UnsupportedOperationException("Stub!");
}
@Override
public void queueLast(List<Song> songs) {
throw new UnsupportedOperationException("Stub!");
}
@Override
public void seek(int position) {
throw new UnsupportedOperationException("Stub!");
}
@Override
public Observable<Boolean> isPlaying() {
throw new UnsupportedOperationException("Stub!");
}
@Override
public Observable<Song> getNowPlaying() {
return Observable.combineLatest(mQueue, mQueueIndex, (queue, index) -> {
if (index >= queue.size()) {
return null;
} else {
return queue.get(index);
}
});
}
@Override
public Observable<List<Song>> getQueue() {
return mQueue;
}
@Override
public Observable<Integer> getQueuePosition() {
return mQueueIndex;
}
@Override
public Observable<Integer> getCurrentPosition() {
throw new UnsupportedOperationException("Stub!");
}
@Override
public Observable<Integer> getDuration() {
return getNowPlaying().map(Song::getSongDuration).cast(Integer.class);
}
@Override
public Observable<Boolean> isShuffleEnabled() {
throw new UnsupportedOperationException("Stub!");
}
@Override
public Observable<Integer> getRepeatMode() {
throw new UnsupportedOperationException("Stub!");
}
@Override
public void setMultiRepeatCount(int count) {
throw new UnsupportedOperationException("Stub!");
}
@Override
public Observable<Long> getSleepTimerEndTime() {
throw new UnsupportedOperationException("Stub!");
}
@Override
public void setSleepTimerEndTime(long timestampInMillis) {
throw new UnsupportedOperationException("Stub!");
}
@Override
public void disableSleepTimer() {
throw new UnsupportedOperationException("Stub!");
}
@Override
public Observable<Bitmap> getArtwork() {
throw new UnsupportedOperationException("Stub!");
}
}