package io.hefuyi.listener.mvp.presenter;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.support.v7.graphics.Palette;
import android.text.TextUtils;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.request.animation.GlideAnimation;
import com.bumptech.glide.request.target.SimpleTarget;
import java.io.File;
import io.hefuyi.listener.MusicPlayer;
import io.hefuyi.listener.R;
import io.hefuyi.listener.mvp.contract.QuickControlsContract;
import io.hefuyi.listener.mvp.usecase.GetLyric;
import io.hefuyi.listener.util.ATEUtil;
import io.hefuyi.listener.util.ListenerUtil;
import rx.Subscriber;
import rx.Subscription;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
import rx.subscriptions.CompositeSubscription;
/**
* Created by hefuyi on 2016/11/8.
*/
public class QuickControlsPresenter implements QuickControlsContract.Presenter {
private GetLyric mGetLyric;
private CompositeSubscription mCompositeSubscription;
private QuickControlsContract.View mView;
private boolean mDuetoplaypause = false;
public QuickControlsPresenter(GetLyric getLyric) {
this.mGetLyric = getLyric;
}
@Override
public void attachView(QuickControlsContract.View view) {
this.mView = view;
mCompositeSubscription = new CompositeSubscription();
}
@Override
public void subscribe() {
}
@Override
public void unsubscribe() {
mCompositeSubscription.clear();
}
@Override
public void onPlayPauseClick() {
mDuetoplaypause = true;
new AsyncTask<Void, Void, Boolean>() {
@Override
protected Boolean doInBackground(final Void... unused) {
boolean isPlaying = MusicPlayer.isPlaying();
MusicPlayer.playOrPause();
return isPlaying;
}
@Override
protected void onPostExecute(Boolean isPlaying) {
if (isPlaying) {
mView.setPlayPauseButton(false);
} else {
mView.setPlayPauseButton(true);
}
}
}.execute();
}
@Override
public void onPreviousClick() {
MusicPlayer.previous(mView.getContext(), true);
}
@Override
public void loadLyric() {
mCompositeSubscription.clear();
String title = MusicPlayer.getTrackName();
String artist = MusicPlayer.getArtistName();
long duration = MusicPlayer.duration();
if (TextUtils.isEmpty(title) || TextUtils.isEmpty(artist)) {
return;
}
Subscription subscription = mGetLyric.execute(new GetLyric.RequestValues(title, artist, duration))
.getLyricFile()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<File>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
mView.showLyric(null);
}
@Override
public void onNext(File file) {
if (file == null) {
mView.showLyric(null);
} else {
mView.showLyric(file);
}
}
});
mCompositeSubscription.add(subscription);
}
@Override
public void onNextClick() {
MusicPlayer.next();
}
@Override
public void updateNowPlayingCard() {
if (MusicPlayer.isPlaying()) {
if (!mView.getPlayPauseStatus()) {//true表示按钮为待暂停状态
mView.setPlayPauseButton(true);
}
} else {
if (mView.getPlayPauseStatus()) {
mView.setPlayPauseButton(false);
}
}
final String title = MusicPlayer.getTrackName();
final String artist = MusicPlayer.getArtistName();
if (TextUtils.isEmpty(title) || TextUtils.isEmpty(artist)) {
mView.setTitle(mView.getContext().getResources().getString(R.string.app_name));
mView.setArtist("");
} else {
mView.setTitle(title);
mView.setArtist(artist);
}
if (!mDuetoplaypause){
Glide.with(mView.getContext())
.load(ListenerUtil.getAlbumArtUri(MusicPlayer.getCurrentAlbumId()).toString())
.asBitmap()
.error(ATEUtil.getDefaultAlbumDrawable(mView.getContext()))
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.into(new SimpleTarget<Bitmap>(){
@Override
public void onLoadFailed(Exception e, Drawable errorDrawable) {
mView.setAlbumArt(errorDrawable);
if (!TextUtils.isEmpty(title) || !TextUtils.isEmpty(artist)) {
new Palette.Builder(((BitmapDrawable) errorDrawable).getBitmap()).generate(new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(Palette palette) {
mView.setPalette(palette);
}
});
}
}
@Override
public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
mView.setAlbumArt(resource);
new Palette.Builder(resource).generate(new Palette.PaletteAsyncListener() {
@Override
public void onGenerated(Palette palette) {
mView.setPalette(palette);
}
});
}
});
}
mDuetoplaypause = false;
mView.setProgressMax((int) MusicPlayer.duration());
mView.startUpdateProgress();
}
}