package com.bczm.widgetcollections.ui.fragment; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.Bundle; import android.text.TextUtils; import android.view.View; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.SeekBar; import android.widget.TextView; import com.bczm.widgetcollections.R; import com.bczm.widgetcollections.bean.MusicsListEntity; import com.bczm.widgetcollections.bean.MusicsListPackage; import com.bczm.widgetcollections.common.Constants; import com.bczm.widgetcollections.controller.AudioController; import com.bczm.widgetcollections.controller.AudioControllerImp; import com.bczm.widgetcollections.controller.AudioDeclare; import com.bczm.widgetcollections.http.protocol.AudioProtocol; import com.bczm.widgetcollections.player.MusicPlayService; import com.bczm.widgetcollections.player.MusicPlayState; import com.bczm.widgetcollections.ui.widget.LoadingPage; import com.bczm.widgetcollections.ui.widget.MarqueTextView; import com.bczm.widgetcollections.utils.AnimationUtil; import com.bczm.widgetcollections.utils.LogUtils; import com.bczm.widgetcollections.utils.StringUtils; import com.bczm.widgetcollections.utils.TimeUtils; import com.bczm.widgetcollections.utils.UIUtils; import java.util.List; import butterknife.Bind; import butterknife.ButterKnife; /** * 听音乐 * * @author:Jorge on 2015/9/28 12:42 * <p/> * step1 请求 音乐数据 * step 2 加载布局 */ public class TabThirdFragment extends BaseFragment implements AudioDeclare, View.OnClickListener { MusicsListPackage responseMusicsListentity; @Bind(R.id.iv_cover) // 封面背景 ImageView ivCover; @Bind(R.id.ll_content) // 封面背景 LinearLayout llCover; @Bind(R.id.musics_player_play_prev_btn) // 上一首 ImageButton musicsPlayerPlayPrevBtn; @Bind(R.id.musics_player_play_ctrl_btn) // 播放按钮 ImageButton musicsPlayerPlayCtrlBtn; @Bind(R.id.musics_player_play_next_btn) // 下一首 ImageButton musicsPlayerPlayNextBtn; @Bind(R.id.ll_controller) // 播放器按钮布局 LinearLayout llController; @Bind(R.id.musics_player_current_time) // 当前播放时间 TextView musicsPlayerCurrentTime; @Bind(R.id.musics_player_seekbar) // 进度条 SeekBar musicsPlayerSeekbar; @Bind(R.id.musics_player_total_time) // 总时间 TextView musicsPlayerTotalTime; @Bind(R.id.musics_player_progress_container) // 进度条容器 LinearLayout musicsPlayerProgressContainer; @Bind(R.id.tv_singer) TextView tvSinger; @Bind(R.id.tv_song) MarqueTextView tvSong; //是否正在播放 private boolean isPlaying = false; private AudioProtocol audioProtocol; private AudioController audioContoller; private Context mContext = null; private PlayBundleBroadCast mBundleBroadCast; private PlayPositionBroadCast mPositionBroadCast; private PlaySecondProgressBroadCast mSecondProgressBroadCast; //当前界面是否显示在最前面 private boolean isVisible; @Override protected void initViewsAndEvents() { //监听 上一首 musicsPlayerPlayPrevBtn.setOnClickListener(this); // 下一首 musicsPlayerPlayNextBtn.setOnClickListener(this); //播放 musicsPlayerPlayCtrlBtn.setOnClickListener(this); } @Override protected LoadingPage.LoadResult load() { // 获取数据 audioProtocol = new AudioProtocol(); responseMusicsListentity = audioProtocol.load(0, false); return check(responseMusicsListentity); } @Override protected View createLoadedView() { View view = UIUtils.inflate(R.layout.fragment_audio); ButterKnife.bind(this, view); //mvp模式 audioContoller = new AudioControllerImp(UIUtils.getContext(), this); if (responseMusicsListentity != null) { refreshMusicsList(responseMusicsListentity); } AnimationUtil.runAnimation(ivCover); return view; } @Override public void onAttach(Activity activity) { super.onAttach(activity); mContext = activity; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); LogUtils.e("87:" + (responseMusicsListentity == null)); // 监听广播 mBundleBroadCast = new PlayBundleBroadCast(); IntentFilter bundleFilter = new IntentFilter(); bundleFilter.addAction(Constants.ACTION_MUSIC_BUNDLE_BROADCAST); mContext.registerReceiver(mBundleBroadCast, bundleFilter); mPositionBroadCast = new PlayPositionBroadCast(); IntentFilter posFilter = new IntentFilter(); posFilter.addAction(Constants.ACTION_MUSIC_CURRENT_PROGRESS_BROADCAST); mContext.registerReceiver(mPositionBroadCast, posFilter); mSecondProgressBroadCast = new PlaySecondProgressBroadCast(); IntentFilter secondProgressFilter = new IntentFilter(); secondProgressFilter.addAction(Constants.ACTION_MUSIC_SECOND_PROGRESS_BROADCAST); mContext.registerReceiver(mSecondProgressBroadCast, secondProgressFilter); mContext.startService(new Intent(mContext, MusicPlayService.class)); } @Override public void onDestroyView() { super.onDestroyView(); ButterKnife.unbind(this); } @Override public void refreshMusicsList(MusicsListPackage data) { if (null != data) { List<MusicsListEntity> mPlayListData = data.getSong(); if (null != mPlayListData && !mPlayListData.isEmpty()) { MusicPlayService.refreshMusicList(mPlayListData); audioContoller.onStartPlay(); } } } @Override public void addMoreMusicsList(MusicsListPackage data) { } @Override public void rePlayMusic() { isPlaying = true; musicsPlayerPlayCtrlBtn.setImageResource(R.drawable.btn_audio_pause_selector); mContext.sendBroadcast(new Intent(MusicPlayState.ACTION_MUSIC_REPLAY)); } @Override public void startPlayMusic() { isPlaying = true; musicsPlayerPlayCtrlBtn.setImageResource(R.drawable.btn_audio_pause_selector); mContext.sendBroadcast(new Intent(MusicPlayState.ACTION_MUSIC_PLAY)); } @Override public void stopPlayMusic() { if(musicsPlayerPlayCtrlBtn!=null){ isPlaying = false; mContext.sendBroadcast(new Intent(MusicPlayState.ACTION_MUSIC_STOP)); musicsPlayerPlayCtrlBtn.setImageResource(R.drawable.btn_audio_play_selector); } } @Override public void pausePlayMusic() { if(musicsPlayerPlayCtrlBtn!=null){ isPlaying = false; musicsPlayerPlayCtrlBtn.setImageResource(R.drawable.btn_audio_play_selector); mContext.sendBroadcast(new Intent(MusicPlayState.ACTION_MUSIC_PAUSE)); } } @Override public void playNextMusic() { isPlaying = true; musicsPlayerPlayCtrlBtn.setImageResource(R.drawable.btn_audio_play_selector); if (audioProtocol == null) { audioProtocol = new AudioProtocol(); } refreshMusicsList(audioProtocol.load(0, false)); } @Override public void playPrevMusic() { isPlaying = true; musicsPlayerPlayCtrlBtn.setImageResource(R.drawable.btn_audio_play_selector); if (audioProtocol == null) { audioProtocol = new AudioProtocol(); } refreshMusicsList(audioProtocol.load(0, false)); } @Override public void seekToPosition(int position) { LogUtils.e("seekToPosition-------------------->>:" + position); mContext.sendBroadcast(new Intent(MusicPlayState.ACTION_SEEK_TO).putExtra(Constants.KEY_PLAYER_SEEK_TO_PROGRESS, position)); } @Override public void refreshPageInfo(MusicsListEntity entity, int totalDuration) { if (null != entity) { tvSong.setText(entity.getTitle()); StringBuilder sb = new StringBuilder(); sb.append("--\t"); sb.append(entity.getArtist()); sb.append("\t--"); tvSinger.setText(sb.toString().trim()); } if (totalDuration > 0) { musicsPlayerSeekbar.setMax(totalDuration); } String imageUrl = entity.getPicture(); if (!StringUtils.isEmpty(imageUrl)) { } else { } String totalTime = TimeUtils.convertTime(totalDuration); if (null != totalTime && !TextUtils.isEmpty(totalTime)) { musicsPlayerTotalTime.setText(totalTime); } } @Override public void refreshPlayProgress(int progress) { musicsPlayerSeekbar.setProgress(progress); String currentTime = TimeUtils.convertTime(progress); if (null != currentTime && !TextUtils.isEmpty(currentTime)) { musicsPlayerCurrentTime.setText(currentTime); } } @Override public void refreshPlaySecondProgress(int progress) { musicsPlayerSeekbar.setSecondaryProgress(progress); } @Override public void onDetach() { super.onDetach(); mContext.unregisterReceiver(mBundleBroadCast); mContext.unregisterReceiver(mPositionBroadCast); mContext.unregisterReceiver(mSecondProgressBroadCast); if(audioContoller!=null) audioContoller.onStopPlay(); } @Override public void onPause() { super.onPause(); if(audioContoller!=null) audioContoller.onPausePlay(); } @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); isVisible=isVisibleToUser; if(isVisibleToUser&&audioContoller!=null){ audioContoller.onRePlay(); }else{ if(audioContoller!=null) audioContoller.onPausePlay(); } } @Override public void onClick(View view) { switch (view.getId()) { case R.id.musics_player_play_prev_btn: audioContoller.onPrevClick(); break; case R.id.musics_player_play_ctrl_btn: if (isPlaying) { audioContoller.onPausePlay(); } else { audioContoller.onRePlay(); } break; case R.id.musics_player_play_next_btn: audioContoller.onNextClick(); break; } } private class PlayBundleBroadCast extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (null != action && !TextUtils.isEmpty(action)) { if (action.equals(Constants.ACTION_MUSIC_BUNDLE_BROADCAST)) { Bundle extras = intent.getExtras(); if (null != extras) { MusicsListEntity entity = extras.getParcelable(Constants.KEY_MUSIC_PARCELABLE_DATA); int totalDuration = extras.getInt(Constants.KEY_MUSIC_TOTAL_DURATION); audioContoller.refreshPageInfo(entity, totalDuration); } } } } } private class PlayPositionBroadCast extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (null != action && !TextUtils.isEmpty(action)) { if (action.equals(Constants.ACTION_MUSIC_CURRENT_PROGRESS_BROADCAST)) { Bundle extras = intent.getExtras(); if (null != extras) { int progress = extras.getInt(Constants.KEY_MUSIC_CURRENT_DUTATION); audioContoller.refreshProgress(progress); } } } } } private class PlaySecondProgressBroadCast extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (null != action && !TextUtils.isEmpty(action)) { if (action.equals(Constants.ACTION_MUSIC_SECOND_PROGRESS_BROADCAST)) { Bundle extras = intent.getExtras(); if (null != extras) { int progress = extras.getInt(Constants.KEY_MUSIC_SECOND_PROGRESS); audioContoller.refreshSecondProgress(progress); } } } } } }