package com.wm.remusic.fragment;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.SimpleItemAnimator;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.bilibili.magicasakura.widgets.TintImageView;
import com.facebook.drawee.view.SimpleDraweeView;
import com.wm.remusic.R;
import com.wm.remusic.info.ArtistInfo;
import com.wm.remusic.lastfmapi.LastFmClient;
import com.wm.remusic.lastfmapi.callbacks.ArtistInfoListener;
import com.wm.remusic.lastfmapi.models.ArtistQuery;
import com.wm.remusic.lastfmapi.models.LastfmArtist;
import com.wm.remusic.service.MusicPlayer;
import com.wm.remusic.uitl.Comparator.ArtistComparator;
import com.wm.remusic.uitl.IConstants;
import com.wm.remusic.uitl.MusicUtils;
import com.wm.remusic.uitl.PreferencesUtility;
import com.wm.remusic.uitl.SortOrder;
import com.wm.remusic.widget.DividerItemDecoration;
import com.wm.remusic.widget.SideBar;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
/**
* Created by wm on 2016/1/17.
*/
public class ArtistFragment extends BaseFragment {
private List<ArtistInfo> artistInfos;
private RecyclerView recyclerView;
private LinearLayoutManager layoutManager;
private ArtistAdapter mAdapter;
private PreferencesUtility mPreferences;
private RecyclerView.ItemDecoration itemDecoration;
private boolean isAZSort = true;
private HashMap<String, Integer> positionMap = new HashMap<>();
private SideBar sideBar;
private TextView dialogText;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.recylerview, container, false);
recyclerView = (RecyclerView) view.findViewById(R.id.recyclerview);
layoutManager = new LinearLayoutManager(mContext);
recyclerView.setLayoutManager(layoutManager);
//fastScroller = (FastScroller) view.findViewById(R.id.fastscroller);
//new loadArtists().execute("");
mAdapter = new ArtistAdapter(null);
recyclerView.setAdapter(mAdapter);
recyclerView.setHasFixedSize(true);
((SimpleItemAnimator) recyclerView.getItemAnimator()).setSupportsChangeAnimations(false);
setItemDecoration();
isAZSort = mPreferences.getArtistSortOrder().equals(SortOrder.ArtistSortOrder.ARTIST_A_Z);
dialogText = (TextView) view.findViewById(R.id.dialog_text);
sideBar = (SideBar) view.findViewById(R.id.sidebar);
sideBar.setOnTouchingLetterChangedListener(new SideBar.OnTouchingLetterChangedListener() {
@Override
public void onTouchingLetterChanged(String s) {
dialogText.setText(s);
sideBar.setView(dialogText);
Log.e("scrol", " " + s);
if (positionMap.get(s) != null) {
int i = positionMap.get(s);
Log.e("scrolget", " " + i);
((LinearLayoutManager) recyclerView.getLayoutManager()).scrollToPositionWithOffset(i, 0);
}
}
});
reloadAdapter();
return view;
}
private RecyclerView.OnScrollListener scrollListener = new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (newState == RecyclerView.SCROLL_STATE_DRAGGING) {
sideBar.setVisibility(View.VISIBLE);
}
}
};
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mPreferences = PreferencesUtility.getInstance(mContext);
}
@Override
public void onActivityCreated(final Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.artist_sort_by, menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_sort_by_az:
mPreferences.setArtistSortOrder(SortOrder.ArtistSortOrder.ARTIST_A_Z);
reloadAdapter();
return true;
case R.id.menu_sort_by_number_of_songs:
mPreferences.setArtistSortOrder(SortOrder.ArtistSortOrder.ARTIST_NUMBER_OF_SONGS);
reloadAdapter();
return true;
}
return super.onOptionsItemSelected(item);
}
//设置分割线
private void setItemDecoration() {
itemDecoration = new DividerItemDecoration(mContext, DividerItemDecoration.VERTICAL_LIST);
recyclerView.addItemDecoration(itemDecoration);
}
//更新adapter界面
public void reloadAdapter() {
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(final Void... unused) {
isAZSort = mPreferences.getArtistSortOrder().equals(SortOrder.ArtistSortOrder.ARTIST_A_Z);
List<ArtistInfo> artList = MusicUtils.queryArtist(mContext);
if (isAZSort) {
Collections.sort(artList, new ArtistComparator());
for (int i = 0; i < artList.size(); i++) {
if (positionMap.get(artList.get(i).artist_sort) == null)
positionMap.put(artList.get(i).artist_sort, i);
}
}
if (artList != null)
mAdapter.updateDataSet(artList);
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
if (isAZSort) {
recyclerView.addOnScrollListener(scrollListener);
} else {
sideBar.setVisibility(View.INVISIBLE);
recyclerView.removeOnScrollListener(scrollListener);
}
mAdapter.notifyDataSetChanged();
}
}.execute();
}
//异步加载recyclerview界面
private class loadArtists extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
if (mContext != null) {
artistInfos = MusicUtils.queryArtist(mContext);
if (artistInfos != null)
mAdapter = new ArtistAdapter(artistInfos);
}
return "Executed";
}
@Override
protected void onPostExecute(String result) {
recyclerView.setAdapter(mAdapter);
if (mContext != null) {
setItemDecoration();
}
}
@Override
protected void onPreExecute() {
}
}
public class ArtistAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private List<ArtistInfo> mList;
public ArtistAdapter(List<ArtistInfo> list) {
// if (list == null) {
// throw new IllegalArgumentException("model Data must not be null");
// }
mList = list;
}
//更新adpter的数据
public void updateDataSet(List<ArtistInfo> list) {
this.mList = list;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View itemView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.recyclerview_common_item, viewGroup, false);
return new ListItemViewHolder(itemView);
}
@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, int i) {
ArtistInfo model = mList.get(i);
//设置条目状态
((ListItemViewHolder) holder).mainTitle.setText(model.artist_name);
((ListItemViewHolder) holder).title.setText(model.number_of_tracks + "首");
//根据播放中歌曲的歌手名判断当前歌手专辑条目是否有播放的歌曲
if (MusicPlayer.getCurrentArtistId() == (model.artist_id)) {
((ListItemViewHolder) holder).moreOverflow.setImageResource(R.drawable.song_play_icon);
((ListItemViewHolder) holder).moreOverflow.setImageTintList(R.color.theme_color_primary);
} else {
((ListItemViewHolder) holder).moreOverflow.setImageResource(R.drawable.list_icn_more);
}
//lastFm api加载歌手图片
LastFmClient.getInstance(mContext).getArtistInfo(new ArtistQuery(model.artist_name.toString()), new ArtistInfoListener() {
@Override
public void artistInfoSucess(LastfmArtist artist) {
if (artist != null && artist.mArtwork != null) {
((ListItemViewHolder) holder).draweeView.setImageURI(Uri.parse(artist.mArtwork.get(2).mUrl));
} else {
}
}
@Override
public void artistInfoFailed() {
}
});
}
@Override
public int getItemCount() {
return mList == null ? 0 : mList.size();
}
public class ListItemViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
//ViewHolder
SimpleDraweeView draweeView;
TextView mainTitle, title;
TintImageView moreOverflow;
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.draweeView = (SimpleDraweeView) view.findViewById(R.id.viewpager_list_img);
this.moreOverflow = (TintImageView) view.findViewById(R.id.viewpager_list_button);
//弹出frament菜单
this.moreOverflow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
MoreFragment morefragment = new MoreFragment().newInstance(mList.get(getAdapterPosition()).artist_id + "", IConstants.ARTISTOVERFLOW);
morefragment.show(getFragmentManager(), "");
}
});
//为每个条目设置监听
view.setOnClickListener(this);
}
//加载歌手专辑界面fragment
@Override
public void onClick(View v) {
if(getAdapterPosition() != -1){
FragmentTransaction transaction = ((AppCompatActivity) mContext).getSupportFragmentManager().beginTransaction();
ArtistDetailFragment fragment = ArtistDetailFragment.newInstance(mList.get(getAdapterPosition()).artist_id);
transaction.hide(((AppCompatActivity) mContext).getSupportFragmentManager().findFragmentById(R.id.tab_container));
transaction.add(R.id.tab_container, fragment);
transaction.addToBackStack(null).commit();
}
}
}
}
}