package com.wm.remusic.fragment;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.app.Fragment;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.wm.remusic.R;
import com.wm.remusic.provider.RecentStore;
import com.wm.remusic.recent.Song;
import com.wm.remusic.recent.SongLoader;
import com.wm.remusic.recent.TopTracksLoader;
import com.wm.remusic.service.MediaService;
import com.wm.remusic.service.MusicPlayer;
import com.wm.remusic.uitl.CommonUtils;
import com.wm.remusic.uitl.IConstants;
import com.wm.remusic.widget.DividerItemDecoration;
import java.lang.reflect.Field;
import java.util.List;
/**
* Created by wm on 2016/3/9.
*/
public class RecentFragment extends Fragment {
private int currentlyPlayingPosition = 0;
private Adapter mAdapter;
private RecentStore recentStore;
private Toolbar toolbar;
private List<Song> mList;
private RecyclerView recyclerView;
private LinearLayoutManager layoutManager;
//接受歌曲播放变化和列表变化广播,刷新列表
private BroadcastReceiver mStatusListener = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(MediaService.META_CHANGED)) {
reloadAdapter();
} else if (action.equals(MediaService.PLAYLIST_CHANGED)) {
reloadAdapter();
}
}
};
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
recentStore = RecentStore.getInstance(getContext());
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_recent, container, false);
TopTracksLoader recentloader = new TopTracksLoader(getActivity(), TopTracksLoader.QueryType.RecentSongs);
List<Song> recentsongs = SongLoader.getSongsForCursor(TopTracksLoader.getCursor());
int songCountInt = recentsongs.size();
mList = recentsongs;
recyclerView = (RecyclerView) view.findViewById(R.id.recyclerview);
layoutManager = new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(layoutManager);
toolbar = (Toolbar) view.findViewById(R.id.toolbar);
toolbar.setPadding(0, CommonUtils.getStatusHeight(getActivity()), 0, 0);
((AppCompatActivity) getActivity()).setSupportActionBar(toolbar);
final ActionBar ab = ((AppCompatActivity) getActivity()).getSupportActionBar();
ab.setHomeAsUpIndicator(R.drawable.actionbar_back);
ab.setDisplayHomeAsUpEnabled(true);
ab.setTitle("最近播放");
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getActivity().onBackPressed();
}
});
new loadSongs().execute("");
return view;
}
@Override
public void onResume() {
super.onResume();
//注册广播
IntentFilter f = new IntentFilter();
f.addAction(MediaService.META_CHANGED);
getActivity().registerReceiver(mStatusListener, f);
}
@Override
public void onPause() {
getActivity().unregisterReceiver(mStatusListener);
super.onPause();
}
//去除界面重叠
@Override
public void onDetach() {
super.onDetach();
try {
//参数是固定写法
Field childFragmentManager = Fragment.class.getDeclaredField("mChildFragmentManager");
childFragmentManager.setAccessible(true);
childFragmentManager.set(this, null);
} catch (NoSuchFieldException e) {
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
throw new RuntimeException(e);
}
}
//刷新列表
private void reloadAdapter() {
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(final Void... unused) {
//List<MusicInfo> songList = MusicUtils.getMusicLists(getContext(), recentStore.getRecentIds());
//mAdapter.updateDataSet(songList);
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
mAdapter.notifyDataSetChanged();
}
}.execute();
}
//异步加载recyclerview界面
private class loadSongs extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
if (getActivity() != null)
mAdapter = new Adapter(mList);
return "Executed";
}
@Override
protected void onPostExecute(String result) {
recyclerView.setAdapter(mAdapter);
if (getActivity() != null)
recyclerView.addItemDecoration(new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL_LIST));
}
@Override
protected void onPreExecute() {
}
}
public class Adapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
final static int FIRST_ITEM = 0;
final static int ITEM = 1;
private List<Song> mList;
public Adapter(List<Song> list) {
if (list == null) {
throw new IllegalArgumentException("model Data must not be null");
}
mList = list;
}
//更新adpter的数据
public void updateDataSet(List<Song> list) {
this.mList = list;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
if (viewType == FIRST_ITEM)
return new CommonItemViewHolder(LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.common_item, viewGroup, false));
else {
return new ListItemViewHolder(LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.fragment_musci_common_item, viewGroup, false));
}
}
//判断布局类型
@Override
public int getItemViewType(int position) {
return position == FIRST_ITEM ? FIRST_ITEM : ITEM;
}
//将数据与界面进行绑定
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
Song model = null;
if (position > 0) {
model = mList.get(position - 1);
}
if (holder instanceof ListItemViewHolder) {
((ListItemViewHolder) holder).mainTitle.setText(model.title.toString());
((ListItemViewHolder) holder).title.setText(model.artistName.toString());
//判断该条目音乐是否在播放
if (MusicPlayer.getCurrentAudioId() == model.id) {
((ListItemViewHolder) holder).playState.setVisibility(View.VISIBLE);
((ListItemViewHolder) holder).playState.setImageResource(R.drawable.song_play_icon);
currentlyPlayingPosition = position;
} else {
((ListItemViewHolder) holder).playState.setVisibility(View.GONE);
}
} else if (holder instanceof CommonItemViewHolder) {
((CommonItemViewHolder) holder).textView.setText("(共" + mList.size() + "首)");
((CommonItemViewHolder) holder).select.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Intent intent = new Intent(getActivity(), SelectActivity.class);
// intent.putParcelableArrayListExtra("ids", (ArrayList) mList);
// getActivity().startActivity(intent);
}
});
}
}
@Override
public int getItemCount() {
return (null != mList ? mList.size() + 1 : 0);
}
public class CommonItemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView textView;
ImageView select;
CommonItemViewHolder(View view) {
super(view);
this.textView = (TextView) view.findViewById(R.id.play_all_number);
this.select = (ImageView) view.findViewById(R.id.select);
view.setOnClickListener(this);
}
public void onClick(View v) {
//// TODO: 2016/1/20
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
long[] list = new long[mList.size()];
for (int i = 0; i < mList.size(); i++) {
list[i] = mList.get(i).id;
}
MusicPlayer.playAll(null, list, 0, false);
}
}, 100);
}
}
public class ListItemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
//ViewHolder
ImageView moreOverflow, playState;
TextView mainTitle, title;
ListItemViewHolder(View view) {
super(view);
this.mainTitle = (TextView) view.findViewById(R.id.viewpager_list_toptext);
this.title = (TextView) view.findViewById(R.id.viewpager_list_bottom_text);
this.playState = (ImageView) view.findViewById(R.id.play_state);
this.moreOverflow = (ImageView) view.findViewById(R.id.viewpager_list_button);
moreOverflow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MoreFragment morefragment = MoreFragment.newInstance(mList.get(getAdapterPosition() - 1).id + "", IConstants.MUSICOVERFLOW);
morefragment.show(getFragmentManager(), "music");
}
});
view.setOnClickListener(this);
}
@Override
public void onClick(View v) {
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
// MusicPlayer.play(mList.get(getAdapterPosition() - 1).songId);
// long[] ids = new long[1];
// ids[0] = mList.get(getAdapterPosition() - 1).songId;
// long[] list = MusicPlayer.getQueue();
// for(int i = 0; i<list.length;i++){
// if(list[i] == ids[0]){
// MusicPlayer.playAll(getContext(),list,i,false);
// return;
// }
// }
// MusicPlayer.playNext(getContext(), ids, -1);
long[] list = new long[mList.size()];
for (int i = 0; i < mList.size(); i++) {
list[i] = mList.get(i).id;
}
if (getAdapterPosition() > 0)
MusicPlayer.playAll(null, list, getAdapterPosition() - 1, false);
Handler handler1 = new Handler();
handler1.postDelayed(new Runnable() {
@Override
public void run() {
notifyItemChanged(currentlyPlayingPosition);
notifyItemChanged(getAdapterPosition());
}
}, 50);
}
}, 100);
}
}
}
}