package me.wcy.music.activity;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.ImageSize;
import com.nostra13.universalimageloader.core.listener.SimpleImageLoadingListener;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import me.wcy.music.R;
import me.wcy.music.adapter.OnMoreClickListener;
import me.wcy.music.adapter.OnlineMusicAdapter;
import me.wcy.music.constants.Extras;
import me.wcy.music.enums.LoadStateEnum;
import me.wcy.music.executor.DownloadOnlineMusic;
import me.wcy.music.executor.PlayOnlineMusic;
import me.wcy.music.executor.ShareOnlineMusic;
import me.wcy.music.http.HttpCallback;
import me.wcy.music.http.HttpClient;
import me.wcy.music.model.Music;
import me.wcy.music.model.OnlineMusic;
import me.wcy.music.model.OnlineMusicList;
import me.wcy.music.model.SongListInfo;
import me.wcy.music.utils.FileUtils;
import me.wcy.music.utils.ImageUtils;
import me.wcy.music.utils.ScreenUtils;
import me.wcy.music.utils.ToastUtils;
import me.wcy.music.utils.ViewUtils;
import me.wcy.music.utils.binding.Bind;
import me.wcy.music.widget.AutoLoadListView;
public class OnlineMusicActivity extends BaseActivity implements OnItemClickListener
, OnMoreClickListener, AutoLoadListView.OnLoadListener {
private static final int MUSIC_LIST_SIZE = 20;
@Bind(R.id.lv_online_music_list)
private AutoLoadListView lvOnlineMusic;
@Bind(R.id.ll_loading)
private LinearLayout llLoading;
@Bind(R.id.ll_load_fail)
private LinearLayout llLoadFail;
private View vHeader;
private SongListInfo mListInfo;
private OnlineMusicList mOnlineMusicList;
private List<OnlineMusic> mMusicList = new ArrayList<>();
private OnlineMusicAdapter mAdapter = new OnlineMusicAdapter(mMusicList);
private ProgressDialog mProgressDialog;
private int mOffset = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_online_music);
if (!checkServiceAlive()) {
return;
}
mListInfo = (SongListInfo) getIntent().getSerializableExtra(Extras.MUSIC_LIST_TYPE);
setTitle(mListInfo.getTitle());
init();
onLoad();
}
private void init() {
vHeader = LayoutInflater.from(this).inflate(R.layout.activity_online_music_list_header, null);
AbsListView.LayoutParams params = new AbsListView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ScreenUtils.dp2px(150));
vHeader.setLayoutParams(params);
lvOnlineMusic.addHeaderView(vHeader, null, false);
lvOnlineMusic.setAdapter(mAdapter);
lvOnlineMusic.setOnLoadListener(this);
mProgressDialog = new ProgressDialog(this);
mProgressDialog.setMessage(getString(R.string.loading));
ViewUtils.changeViewState(lvOnlineMusic, llLoading, llLoadFail, LoadStateEnum.LOADING);
}
@Override
protected void setListener() {
lvOnlineMusic.setOnItemClickListener(this);
mAdapter.setOnMoreClickListener(this);
}
private void getMusic(final int offset) {
HttpClient.getSongListInfo(mListInfo.getType(), MUSIC_LIST_SIZE, offset, new HttpCallback<OnlineMusicList>() {
@Override
public void onSuccess(OnlineMusicList response) {
lvOnlineMusic.onLoadComplete();
mOnlineMusicList = response;
if (offset == 0 && response == null) {
ViewUtils.changeViewState(lvOnlineMusic, llLoading, llLoadFail, LoadStateEnum.LOAD_FAIL);
return;
} else if (offset == 0) {
initHeader();
ViewUtils.changeViewState(lvOnlineMusic, llLoading, llLoadFail, LoadStateEnum.LOAD_SUCCESS);
}
if (response == null || response.getSong_list() == null || response.getSong_list().size() == 0) {
lvOnlineMusic.setEnable(false);
return;
}
mOffset += MUSIC_LIST_SIZE;
mMusicList.addAll(response.getSong_list());
mAdapter.notifyDataSetChanged();
}
@Override
public void onFail(Exception e) {
lvOnlineMusic.onLoadComplete();
if (e instanceof RuntimeException) {
// 歌曲全部加载完成
lvOnlineMusic.setEnable(false);
return;
}
if (offset == 0) {
ViewUtils.changeViewState(lvOnlineMusic, llLoading, llLoadFail, LoadStateEnum.LOAD_FAIL);
} else {
ToastUtils.show(R.string.load_fail);
}
}
});
}
@Override
public void onLoad() {
getMusic(mOffset);
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
play((OnlineMusic) parent.getAdapter().getItem(position));
}
@Override
public void onMoreClick(int position) {
final OnlineMusic onlineMusic = mMusicList.get(position);
AlertDialog.Builder dialog = new AlertDialog.Builder(this);
dialog.setTitle(mMusicList.get(position).getTitle());
String path = FileUtils.getMusicDir() + FileUtils.getMp3FileName(onlineMusic.getArtist_name(), onlineMusic.getTitle());
File file = new File(path);
int itemsId = file.exists() ? R.array.online_music_dialog_without_download : R.array.online_music_dialog;
dialog.setItems(itemsId, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case 0:// 分享
share(onlineMusic);
break;
case 1:// 查看歌手信息
artistInfo(onlineMusic);
break;
case 2:// 下载
download(onlineMusic);
break;
}
}
});
dialog.show();
}
private void initHeader() {
final ImageView ivHeaderBg = (ImageView) vHeader.findViewById(R.id.iv_header_bg);
final ImageView ivCover = (ImageView) vHeader.findViewById(R.id.iv_cover);
TextView tvTitle = (TextView) vHeader.findViewById(R.id.tv_title);
TextView tvUpdateDate = (TextView) vHeader.findViewById(R.id.tv_update_date);
TextView tvComment = (TextView) vHeader.findViewById(R.id.tv_comment);
tvTitle.setText(mOnlineMusicList.getBillboard().getName());
tvUpdateDate.setText(getString(R.string.recent_update, mOnlineMusicList.getBillboard().getUpdate_date()));
tvComment.setText(mOnlineMusicList.getBillboard().getComment());
ImageSize imageSize = new ImageSize(200, 200);
ImageLoader.getInstance().loadImage(mOnlineMusicList.getBillboard().getPic_s640(), imageSize,
ImageUtils.getCoverDisplayOptions(), new SimpleImageLoadingListener() {
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
ivCover.setImageBitmap(loadedImage);
ivHeaderBg.setImageBitmap(ImageUtils.blur(loadedImage));
}
});
}
private void play(OnlineMusic onlineMusic) {
new PlayOnlineMusic(this, onlineMusic) {
@Override
public void onPrepare() {
mProgressDialog.show();
}
@Override
public void onExecuteSuccess(Music music) {
mProgressDialog.cancel();
getPlayService().play(music);
ToastUtils.show(getString(R.string.now_play, music.getTitle()));
}
@Override
public void onExecuteFail(Exception e) {
mProgressDialog.cancel();
ToastUtils.show(R.string.unable_to_play);
}
}.execute();
}
private void share(final OnlineMusic onlineMusic) {
new ShareOnlineMusic(this, onlineMusic.getTitle(), onlineMusic.getSong_id()) {
@Override
public void onPrepare() {
mProgressDialog.show();
}
@Override
public void onExecuteSuccess(Void aVoid) {
mProgressDialog.cancel();
}
@Override
public void onExecuteFail(Exception e) {
mProgressDialog.cancel();
}
}.execute();
}
private void artistInfo(OnlineMusic onlineMusic) {
ArtistInfoActivity.start(this, onlineMusic.getTing_uid());
}
private void download(final OnlineMusic onlineMusic) {
new DownloadOnlineMusic(this, onlineMusic) {
@Override
public void onPrepare() {
mProgressDialog.show();
}
@Override
public void onExecuteSuccess(Void aVoid) {
mProgressDialog.cancel();
ToastUtils.show(getString(R.string.now_download, onlineMusic.getTitle()));
}
@Override
public void onExecuteFail(Exception e) {
mProgressDialog.cancel();
ToastUtils.show(R.string.unable_to_download);
}
}.execute();
}
}