/*
* Copyright (c) 2015 [1076559197@qq.com | tchen0707@gmail.com]
*
* Licensed under the Apache License, Version 2.0 (the "Licenseā);
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.github.obsessive.simplifyreader.ui.fragment;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.SeekBar;
import android.widget.TextView;
import com.github.obsessive.library.blur.ImageBlurManager;
import com.github.obsessive.library.eventbus.EventCenter;
import com.github.obsessive.library.netstatus.NetUtils;
import com.github.obsessive.library.utils.CommonUtils;
import com.github.obsessive.simplifyreader.R;
import com.github.obsessive.simplifyreader.bean.MusicsListEntity;
import com.github.obsessive.simplifyreader.bean.ResponseMusicsListentity;
import com.github.obsessive.simplifyreader.common.Constants;
import com.github.obsessive.simplifyreader.player.MusicPlayService;
import com.github.obsessive.simplifyreader.player.MusicPlayState;
import com.github.obsessive.simplifyreader.presenter.MusicsPresenter;
import com.github.obsessive.simplifyreader.presenter.impl.MusicsPresenterImpl;
import com.github.obsessive.simplifyreader.ui.activity.base.BaseFragment;
import com.github.obsessive.simplifyreader.utils.UriHelper;
import com.github.obsessive.simplifyreader.view.MusicsView;
import com.github.obsessive.simplifyreader.widgets.PlayerDiscView;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.FailReason;
import com.nostra13.universalimageloader.core.listener.ImageLoadingListener;
import java.util.List;
import butterknife.InjectView;
/**
* Author: Tau.Chen
* Email: 1076559197@qq.com | tauchen1990@gmail.com
* Date: 2015/3/12.
* Description:
*/
public class MusicsFragment extends BaseFragment implements MusicsView {
@InjectView(R.id.musics_player_background)
ImageView mBackgroundImage;
@InjectView(R.id.musics_player_disc_view)
PlayerDiscView mPlayerDiscView;
@InjectView(R.id.musics_player_play_ctrl_btn)
ImageButton mPlayerCtrlBtn;
@InjectView(R.id.musics_player_play_next_btn)
ImageButton mPlayerNextBtn;
@InjectView(R.id.musics_player_play_prev_btn)
ImageButton mPlayerPrevBtn;
@InjectView(R.id.musics_player_seekbar)
SeekBar mPlayerSeekBar;
@InjectView(R.id.musics_player_name)
TextView mTitle;
@InjectView(R.id.musics_player_songer_name)
TextView mSonger;
@InjectView(R.id.musics_player_current_time)
TextView mCurrentTime;
@InjectView(R.id.musics_player_total_time)
TextView mTotalTime;
@InjectView(R.id.musics_player_loading_view)
View mLoadingTargetView;
private MusicsPresenter mMusicsPresenter = null;
private String mMusicsCollectId = UriHelper.URL_MUSICS_LIST_CHANNEL_ID;
private List<MusicsListEntity> mPlayListData;
private boolean isPlaying = true;
private static final int BLUR_RADIUS = 100;
private PlayBundleBroadCast mBundleBroadCast;
private PlayPositionBroadCast mPositionBroadCast;
private PlaySecondProgressBroadCast mSecondProgressBroadCast;
@Override
protected void onFirstUserVisible() {
toggleShowLoading(true, null);
mMusicsPresenter = new MusicsPresenterImpl(mContext, this);
if (NetUtils.isNetworkConnected(mContext)) {
mMusicsPresenter.loadListData(TAG_LOG, mMusicsCollectId, Constants.EVENT_REFRESH_DATA);
} else {
toggleNetworkError(true, new View.OnClickListener() {
@Override
public void onClick(View v) {
toggleShowLoading(true, null);
mMusicsPresenter.loadListData(TAG_LOG, mMusicsCollectId, Constants.EVENT_REFRESH_DATA);
}
});
}
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
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 onDetach() {
super.onDetach();
if(mMusicsPresenter != null) {
mMusicsPresenter.onStopPlay();
}
mContext.unregisterReceiver(mBundleBroadCast);
mContext.unregisterReceiver(mPositionBroadCast);
mContext.unregisterReceiver(mSecondProgressBroadCast);
}
@Override
protected void onUserVisible() {
}
@Override
protected void onUserInvisible() {
}
@Override
protected View getLoadingTargetView() {
return mLoadingTargetView;
}
@Override
protected void initViewsAndEvents() {
Bitmap bitmap = ImageBlurManager.doBlurJniArray(BitmapFactory.decodeResource(getResources(),
R.drawable.player_bg),
BLUR_RADIUS,
false);
mBackgroundImage.setImageBitmap(bitmap);
mPlayerCtrlBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (isPlaying) {
mMusicsPresenter.onPausePlay();
} else {
mMusicsPresenter.onRePlay();
}
}
});
mPlayerNextBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mMusicsPresenter.onNextClick();
}
});
mPlayerPrevBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mMusicsPresenter.onPrevClick();
}
});
}
@Override
protected int getContentViewLayoutID() {
return R.layout.fragment_musics;
}
@Override
protected void onEventComming(EventCenter eventCenter) {
if (null == mMusicsPresenter) {
return;
}
int eventCode = eventCenter.getEventCode();
switch (eventCode) {
case Constants.EVENT_START_PLAY_MUSIC:
mMusicsPresenter.onRePlay();
break;
case Constants.EVENT_STOP_PLAY_MUSIC:
mMusicsPresenter.onPausePlay();
break;
}
}
@Override
protected boolean isBindEventBusHere() {
return true;
}
@Override
public void refreshMusicsList(ResponseMusicsListentity data) {
if (null != data) {
mPlayListData = data.getSong();
if (null != mPlayListData && !mPlayListData.isEmpty()) {
MusicPlayService.refreshMusicList(mPlayListData);
mMusicsPresenter.onStartPlay();
}
}
}
@Override
public void addMoreMusicsList(ResponseMusicsListentity data) {
if (null != data) {
mPlayListData = data.getSong();
if (null != mPlayListData && !mPlayListData.isEmpty()) {
MusicPlayService.refreshMusicList(mPlayListData);
mContext.sendBroadcast(new Intent(MusicPlayState.ACTION_MUSIC_NEXT));
}
}
}
@Override
public void rePlayMusic() {
isPlaying = true;
mPlayerDiscView.rePlay();
mPlayerCtrlBtn.setImageResource(R.drawable.btn_pause_selector);
mContext.sendBroadcast(new Intent(MusicPlayState.ACTION_MUSIC_REPLAY));
}
@Override
public void startPlayMusic() {
isPlaying = true;
mPlayerCtrlBtn.setImageResource(R.drawable.btn_pause_selector);
mContext.sendBroadcast(new Intent(MusicPlayState.ACTION_MUSIC_PLAY));
}
@Override
public void stopPlayMusic() {
isPlaying = false;
mPlayerDiscView.pause();
mPlayerCtrlBtn.setImageResource(R.drawable.btn_play_selector);
mContext.sendBroadcast(new Intent(MusicPlayState.ACTION_MUSIC_STOP));
}
@Override
public void pausePlayMusic() {
isPlaying = false;
mPlayerDiscView.pause();
mPlayerCtrlBtn.setImageResource(R.drawable.btn_play_selector);
mContext.sendBroadcast(new Intent(MusicPlayState.ACTION_MUSIC_PAUSE));
}
@Override
public void playNextMusic() {
isPlaying = true;
mPlayerDiscView.next();
mPlayerCtrlBtn.setImageResource(R.drawable.btn_play_selector);
mMusicsPresenter.loadListData(TAG_LOG, mMusicsCollectId, Constants.EVENT_LOAD_MORE_DATA);
}
@Override
public void playPrevMusic() {
isPlaying = true;
mPlayerDiscView.next();
mPlayerCtrlBtn.setImageResource(R.drawable.btn_play_selector);
mContext.sendBroadcast(new Intent(MusicPlayState.ACTION_MUSIC_PREV));
}
@Override
public void seekToPosition(int 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) {
toggleShowLoading(false, null);
mPlayerDiscView.startPlay();
mPlayerCtrlBtn.setImageResource(R.drawable.btn_pause_selector);
if (null != entity) {
mTitle.setText(entity.getTitle());
StringBuilder sb = new StringBuilder();
sb.append("--\t");
sb.append(entity.getArtist());
sb.append("\t--");
mSonger.setText(sb.toString().trim());
}
if (totalDuration > 0) {
mPlayerSeekBar.setMax(totalDuration);
}
String imageUrl = entity.getPicture();
if (!CommonUtils.isEmpty(imageUrl)) {
mPlayerDiscView.loadAlbumCover(imageUrl);
ImageLoader.getInstance().loadImage(imageUrl, new ImageLoadingListener() {
@Override
public void onLoadingStarted(String imageUri, View view) {
}
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
}
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
Bitmap bitmap = ImageBlurManager.doBlurJniArray(loadedImage, BLUR_RADIUS, false);
mBackgroundImage.setImageBitmap(bitmap);
}
@Override
public void onLoadingCancelled(String imageUri, View view) {
}
});
} else {
Bitmap bitmap = ImageBlurManager.doBlurJniArray(BitmapFactory.decodeResource(getResources(),
R.drawable.player_bg),
BLUR_RADIUS,
false);
mBackgroundImage.setImageBitmap(bitmap);
}
String totalTime = CommonUtils.convertTime(totalDuration);
if (null != totalTime && !TextUtils.isEmpty(totalTime)) {
mTotalTime.setText(totalTime);
}
}
@Override
public void refreshPlayProgress(int progress) {
mPlayerSeekBar.setProgress(progress);
String currentTime = CommonUtils.convertTime(progress);
if (null != currentTime && !TextUtils.isEmpty(currentTime)) {
mCurrentTime.setText(currentTime);
}
}
@Override
public void refreshPlaySecondProgress(int progress) {
mPlayerSeekBar.setSecondaryProgress(progress);
}
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);
mMusicsPresenter.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);
mMusicsPresenter.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);
mMusicsPresenter.refreshSecondProgress(progress);
}
}
}
}
}
@Override
public void showError(String msg) {
toggleShowError(true, msg, new View.OnClickListener() {
@Override
public void onClick(View v) {
mMusicsPresenter.loadListData(TAG_LOG, mMusicsCollectId, Constants.EVENT_REFRESH_DATA);
}
});
}
}