package com.konka.music.ui.fragment;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.FragmentTransaction;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.SeekBar;
import android.widget.TextView;
import com.konka.lrc.ISetLrcProgress;
import com.konka.lrc.LyricObject;
import com.konka.lrc.LyricView;
import com.konka.lrcUtil.LrcUtil;
import com.konka.music.R;
import com.konka.music.adapter.PopupAdapter;
import com.konka.music.listener.MusicPlayerAction;
import com.konka.music.musicexception.DownLoadException;
import com.konka.music.player.MusicPalyModel;
import com.konka.music.pojo.MusicInfo;
import com.konka.music.service.MusicInfoManager;
import com.konka.music.ui.fragment.abstractfragment.AbstractKBaseFragment;
import com.konka.music.util.CreateViewUtil;
import com.konka.music.util.MusicInfoUtil;
import com.konka.music.util.TimeHelper;
import com.konka.music.util.Util;
import com.konka.music.util.ViewTag;
import com.konka.music.util.ViewUtility;
@SuppressWarnings({ "rawtypes", "unchecked" })
public class MusicPlayFragment extends AbstractKBaseFragment implements OnItemClickListener, ISetLrcProgress, MusicPlayerAction {
public static final String TAG = AbstractKBaseFragment.class.getName();
private MusicPlayViewHolder mMusicPlayViewHolder = new MusicPlayViewHolder();
private View rootView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
rootView = CreateViewUtil.onCreateView(inflater, container, savedInstanceState, rootView, R.layout.player_fragment);
return rootView;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
mLyricView = (LyricView) view.findViewById(R.id.lyricshow);
try{
initViewHolder(mMusicPlayViewHolder);
}
catch(Exception e)
{
e.printStackTrace();
}
mLyricView.setLrcInterface(this);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
if (fACallBack != null) {
fACallBack.registerListener(this);
}
}
@Override
public void onDetach() {
super.onDetach();
if (fACallBack != null) {
fACallBack.unRegisterListener(this);
}
}
@Override
public void onServiceBindComplete() {
// initPlaybuttonView();
assignViewHolderDisplay(getMusicInfo());
}
@Override
public void onMusicPlaybackProgress(int progress) {
mMusicPlayViewHolder.play_progress.setProgress(progress);
mLyricView.setCurPosition(getCurPosition());
}
private void instanceDownBtn(MusicInfo musicInfo) {
if (musicInfo.getData().startsWith("http")) {
try {
MusicInfoUtil.checkMusicInfoDownload(musicInfo);
mMusicPlayViewHolder.player_btn_download.setImageResource(R.drawable.btn_download_default_1);
mMusicPlayViewHolder.player_btn_download.setEnabled(true);
return;
} catch (DownLoadException e) {
// 已经下载过了,不用重新下载
}
}
mMusicPlayViewHolder.player_btn_download.setImageResource(R.drawable.btn_download_default_2);
mMusicPlayViewHolder.player_btn_download.setEnabled(false);
}
private void assignViewHolderDisplay(MusicInfo musicInfo) {
mMusicPlayViewHolder.play_mode.setImageResource(musicPalyModels[index]);
instanceLikeBtn(musicInfo);
showLrc(musicInfo);
initPlaybuttonView();
if (musicInfo != null) {
mMusicPlayViewHolder.play_current_time.setText(TimeHelper.milliSecondsToFormatTimeString(getCurPosition()));
mMusicPlayViewHolder.play_song_total_time.setText(TimeHelper.milliSecondsToFormatTimeString(getDuration()));
mMusicPlayViewHolder.play_song_title.setText(musicInfo.getMusicname());
mMusicPlayViewHolder.play_song_songer.setText(musicInfo.getSinger());
instanceDownBtn(musicInfo);
} else {
mMusicPlayViewHolder.play_current_time.setText(TimeHelper.milliSecondsToFormatTimeString(0));
mMusicPlayViewHolder.play_song_total_time.setText(TimeHelper.milliSecondsToFormatTimeString(0));
mMusicPlayViewHolder.play_song_title.setText("");
mMusicPlayViewHolder.play_song_songer.setText("");
mMusicPlayViewHolder.player_btn_download.setImageResource(R.drawable.btn_download_default_2);
mMusicPlayViewHolder.player_btn_download.setEnabled(false);
}
}
private void initViewHolder(MusicPlayViewHolder musicPlayViewHolder) {
musicPlayViewHolder.play_playbutton = ViewUtility.findViewById(getActivity(), R.id.player_playback_toggle, this);
// initPlaybuttonView();
musicPlayViewHolder.play_playbutton.setTag(ViewTag.PLAY);
musicPlayViewHolder.play_playnext = ViewUtility.findViewById(getActivity(), R.id.player_playback_next, this);
musicPlayViewHolder.play_playnext.setTag(ViewTag.NEXT);
musicPlayViewHolder.play_playprevious = ViewUtility.findViewById(getActivity(), R.id.player_playback_prev, this);
musicPlayViewHolder.play_playprevious.setTag(ViewTag.PREV);
musicPlayViewHolder.play_progress = ViewUtility.findViewById(getActivity(), R.id.player_seeker);
musicPlayViewHolder.play_progress.setOnSeekBarChangeListener(this);
musicPlayViewHolder.play_mode = ViewUtility.findViewById(getActivity(), R.id.player_playback_mode, this);
musicPlayViewHolder.play_list = ViewUtility.findViewById(getActivity(), R.id.player_btn_current_playlist, this);
musicPlayViewHolder.player_btn_back = ViewUtility.findViewById(getActivity(), R.id.player_btn_back, this);
musicPlayViewHolder.play_current_time = ViewUtility.findViewById(getActivity(), R.id.player_current_time);
musicPlayViewHolder.play_song_total_time = ViewUtility.findViewById(getActivity(), R.id.player_total_time);
musicPlayViewHolder.play_song_title = ViewUtility.findViewById(getActivity(), R.id.player_song_name);
musicPlayViewHolder.play_song_songer = ViewUtility.findViewById(getActivity(), R.id.player_singer_name);
// musicPlayViewHolder.player_btn_share = ViewUtility.findViewById(getActivity(), R.id.player_btn_share, this);
musicPlayViewHolder.player_btn_like = ViewUtility.findViewById(getActivity(), R.id.player_btn_like, this);
musicPlayViewHolder.player_btn_download = ViewUtility.findViewById(getActivity(), R.id.player_btn_download, this);
}
/**
* 第一次初始化view状态
*/
private void initPlaybuttonView() {
updataView(isPlaying() ? R.drawable.ic_player_pause : R.drawable.ic_player_play);
}
List<LyricObject> lyricObjects;
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.play_playbutton:
break;
case R.id.play_playnext:
mLyricView.setLyricObjects(null);
break;
case R.id.play_playprevious:
mLyricView.setLyricObjects(null);
break;
case R.id.player_playback_mode:
index = ++index % 4;
setMusicPalyModel(musicPalyModels[index]);
mMusicPlayViewHolder.play_mode.setImageResource(musicPalyModels[index]);
break;
case R.id.play_button_back:
getActivity().finish();
return;
case R.id.player_btn_current_playlist: // 播放列表
FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
ft.add(android.R.id.content, new PlayerQueueListFragment(), "");
ft.addToBackStack(null);
ft.commit();
break;
// case R.id.play_list:
// case R.id.play_more_functions:
// break;
case R.id.player_btn_download:
MusicInfo musicInfo = getMusicInfo();
if (musicInfo != null) {
Util.downLoadMusic(getActivity(), musicInfo);
instanceDownBtn(musicInfo);
}
break;
case R.id.player_btn_like:// 我喜欢
doClickMyLike();
break;
case R.id.player_btn_back:// 我喜欢
getActivity().finish();
break;
}
super.onClick(v);
}
private void doClickMyLike() {
MusicInfo musicInfo = getMusicInfo();
if (musicInfo != null) {
musicInfo.setFavourite(~musicInfo.getFavourite());
MusicInfoUtil.setMusicInfoToLike(musicInfo);
instanceLikeBtn(musicInfo);
}
}
private void instanceLikeBtn(MusicInfo musicInfo) {
if (musicInfo != null) {
MusicInfoUtil.handleMyLikeFromDb(musicInfo);
mMusicPlayViewHolder.player_btn_like.setImageResource(musicInfo.getFavourite() == 0 ? R.drawable.ic_player_like : R.drawable.ic_player_liked);
} else {
mMusicPlayViewHolder.player_btn_like.setImageResource(R.drawable.ic_player_like);
}
}
PopupAdapter adapter;
private static int index = 0;
private int[] musicPalyModels = { MusicPalyModel.REPEAT, MusicPalyModel.SINGLE_LOOP, MusicPalyModel.RANDOM, MusicPalyModel.SEQUENCE };
private LyricView mLyricView;
private class MusicPlayViewHolder {
public ImageButton play_playbutton;// 开关 ok
public ImageButton play_playnext;// 下一首歌ok
public ImageButton play_playprevious;// 上一首歌ok
public SeekBar play_progress;// ok
public ImageView play_mode;// 播放模式(单曲循环...)ok
public ImageView play_list;// 播放列表play_listok
public ImageView player_btn_back;// 返回ok
public TextView play_current_time;// 当前播放时长ok
public TextView play_song_total_time;// 过去总时间ok
public TextView play_song_title;// 播放歌曲的标题ok
public TextView play_song_songer;// 作者
// public ImageButton player_btn_share;
public ImageButton player_btn_like;
public ImageButton player_btn_current_playlist;
public ImageButton player_btn_download;// 下载按钮
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
super.onProgressChanged(seekBar, progress, fromUser);
mMusicPlayViewHolder.play_current_time.setText(TimeHelper.milliSecondsToFormatTimeString//
(progress * getDuration() / seekBar.getMax()));
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
MusicInfo musicInfo = adapter.getItem(position);
MusicInfoManager.addMusic2PlayList(getActivity(), musicInfo, true);
}
@Override
public void onMusicPaly(MusicInfo musicInfo) {
updataView(R.drawable.ic_player_pause);
mMusicPlayViewHolder.play_song_total_time.setText(TimeHelper.milliSecondsToFormatTimeString(getDuration()));
}
@Override
public void introductionData(MusicInfo musicInfo) {
mMusicPlayViewHolder.play_current_time.setText(TimeHelper.milliSecondsToFormatTimeString(0));
mMusicPlayViewHolder.play_song_total_time.setText(TimeHelper.milliSecondsToFormatTimeString(getDuration()));
mMusicPlayViewHolder.play_song_title.setText(musicInfo.getMusicname());
mMusicPlayViewHolder.play_song_songer.setText(musicInfo.getSinger());
mMusicPlayViewHolder.play_progress.setProgress(0);
mMusicPlayViewHolder.play_progress.setSecondaryProgress(0);
updataView(R.drawable.ic_player_pause);
instanceLikeBtn(musicInfo);
showLrc(musicInfo);
instanceDownBtn(musicInfo);
// mLyricView.setLyricObjects(lrcList);
}
private void showLrc(MusicInfo musicInfo) {
if (musicInfo != null) {
String lrcUrl = musicInfo.getLrc_url();
if (TextUtils.isEmpty(lrcUrl)) {
LrcUtil.showLrc(mLyricView, musicInfo.getMusicname(), musicInfo.getSinger());
} else {
LrcUtil.showOnlineLrc(mLyricView, musicInfo.getMusicname(), lrcUrl);
}
} else {
mLyricView.setLyricObjects(null);
}
}
@Override
public void onMusicPause() {
updataView(R.drawable.ic_player_play);
}
@Override
public void onMusicStop() {
assignViewHolderDisplay(null);
updataView(R.drawable.ic_player_play);
}
private void updataView(int resId) {
mMusicPlayViewHolder.play_playbutton.setImageResource(resId);
}
@Override
public void setLrcProgress(int progress) {
seekTo(progress);
}
@Override
public void onMusicBufferingUpdateProgress(int progress) {
mMusicPlayViewHolder.play_progress.setSecondaryProgress(progress);
}
}