package com.wm.remusic.fragment;
import android.content.Intent;
import android.graphics.drawable.Animatable;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.Nullable;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import com.bilibili.magicasakura.utils.ThemeUtils;
import com.bilibili.magicasakura.widgets.TintImageView;
import com.bilibili.magicasakura.widgets.TintProgressBar;
import com.facebook.common.logging.FLog;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.drawee.controller.BaseControllerListener;
import com.facebook.drawee.controller.ControllerListener;
import com.facebook.drawee.interfaces.DraweeController;
import com.facebook.drawee.view.SimpleDraweeView;
import com.facebook.imagepipeline.image.ImageInfo;
import com.facebook.imagepipeline.image.QualityInfo;
import com.facebook.imagepipeline.request.ImageRequest;
import com.facebook.imagepipeline.request.ImageRequestBuilder;
import com.wm.remusic.MainApplication;
import com.wm.remusic.R;
import com.wm.remusic.activity.PlayingActivity;
import com.wm.remusic.handler.HandlerUtil;
import com.wm.remusic.service.MusicPlayer;
public class QuickControlsFragment extends BaseFragment {
private TintProgressBar mProgress;
public Runnable mUpdateProgress = new Runnable() {
@Override
public void run() {
long position = MusicPlayer.position();
long duration = MusicPlayer.duration();
if (duration > 0 && duration < 627080716){
mProgress.setProgress((int) (1000 * position / duration));
}
if (MusicPlayer.isPlaying()) {
mProgress.postDelayed(mUpdateProgress, 50);
}else {
mProgress.removeCallbacks(mUpdateProgress);
}
}
};
private TintImageView mPlayPause;
private TextView mTitle;
private TextView mArtist;
private SimpleDraweeView mAlbumArt;
private View rootView;
private ImageView playQueue, next;
private String TAG = "QuickControlsFragment";
private static QuickControlsFragment fragment;
public static QuickControlsFragment newInstance() {
return new QuickControlsFragment();
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.bottom_nav, container, false);
this.rootView = rootView;
mPlayPause = (TintImageView) rootView.findViewById(R.id.control);
mProgress = (TintProgressBar) rootView.findViewById(R.id.song_progress_normal);
mTitle = (TextView) rootView.findViewById(R.id.playbar_info);
mArtist = (TextView) rootView.findViewById(R.id.playbar_singer);
mAlbumArt = (SimpleDraweeView) rootView.findViewById(R.id.playbar_img);
next = (ImageView) rootView.findViewById(R.id.play_next);
playQueue = (ImageView) rootView.findViewById(R.id.play_list);
mProgress.setProgressTintList(ThemeUtils.getThemeColorStateList(mContext, R.color.theme_color_primary));
mProgress.postDelayed(mUpdateProgress,0);
mPlayPause.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mPlayPause.setImageResource(MusicPlayer.isPlaying() ? R.drawable.playbar_btn_pause
: R.drawable.playbar_btn_play);
mPlayPause.setImageTintList(R.color.theme_color_primary);
if (MusicPlayer.getQueueSize() == 0) {
Toast.makeText(MainApplication.context, getResources().getString(R.string.queue_is_empty),
Toast.LENGTH_SHORT).show();
} else {
HandlerUtil.getInstance(MainApplication.context).postDelayed(new Runnable() {
@Override
public void run() {
MusicPlayer.playOrPause();
}
}, 60);
}
}
});
next.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
MusicPlayer.next();
}
}, 60);
}
});
playQueue.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
PlayQueueFragment playQueueFragment = new PlayQueueFragment();
playQueueFragment.show(getFragmentManager(), "playqueueframent");
}
}, 60);
}
});
rootView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainApplication.context, PlayingActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
MainApplication.context.startActivity(intent);
}
});
return rootView;
}
public void updateNowplayingCard() {
mTitle.setText(MusicPlayer.getTrackName());
mArtist.setText(MusicPlayer.getArtistName());
ControllerListener controllerListener = new BaseControllerListener<ImageInfo>() {
@Override
public void onFinalImageSet(String id, @Nullable ImageInfo imageInfo, @Nullable Animatable anim) {
if (imageInfo == null) {
return;
}
QualityInfo qualityInfo = imageInfo.getQualityInfo();
FLog.d("Final image received! " +
"Size %d x %d",
"Quality level %d, good enough: %s, full quality: %s",
imageInfo.getWidth(),
imageInfo.getHeight(),
qualityInfo.getQuality(),
qualityInfo.isOfGoodEnoughQuality(),
qualityInfo.isOfFullQuality());
}
@Override
public void onIntermediateImageSet(String id, @Nullable ImageInfo imageInfo) {
//FLog.d("Intermediate image received");
}
@Override
public void onFailure(String id, Throwable throwable) {
mAlbumArt.setImageURI(Uri.parse("res:/" + R.drawable.placeholder_disk_210));
}
};
Uri uri = null;
try{
uri = Uri.parse(MusicPlayer.getAlbumPath());
}catch (Exception e){
e.printStackTrace();
}
if (uri != null) {
ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri).build();
DraweeController controller = Fresco.newDraweeControllerBuilder()
.setOldController(mAlbumArt.getController())
.setImageRequest(request)
.setControllerListener(controllerListener)
.build();
mAlbumArt.setController(controller);
} else {
mAlbumArt.setImageURI(Uri.parse("content://" + MusicPlayer.getAlbumPath()));
}
}
@Override
public void onStart() {
super.onStart();
}
@Override
public void onStop() {
super.onStop();
mProgress.removeCallbacks(mUpdateProgress);
}
@Override
public void onResume() {
super.onResume();
mProgress.setMax(1000);
mProgress.removeCallbacks(mUpdateProgress);
mProgress.postDelayed(mUpdateProgress,0);
updateNowplayingCard();
}
@Override
public void onDestroy() {
super.onDestroy();
}
public void updateState() {
if (MusicPlayer.isPlaying()) {
mPlayPause.setImageResource(R.drawable.playbar_btn_pause);
mPlayPause.setImageTintList(R.color.theme_color_primary);
mProgress.removeCallbacks(mUpdateProgress);
mProgress.postDelayed(mUpdateProgress,50);
} else {
mPlayPause.setImageResource(R.drawable.playbar_btn_play);
mPlayPause.setImageTintList(R.color.theme_color_primary);
mProgress.removeCallbacks(mUpdateProgress);
}
}
public void updateTrackInfo() {
updateNowplayingCard();
updateState();
}
@Override
public void changeTheme() {
super.changeTheme();
mProgress.setProgressTintList(ThemeUtils.getThemeColorStateList(mContext, R.color.theme_color_primary));
}
}