package com.wm.remusic.fragmentnet;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.ImageSpan;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.TextView;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.drawee.interfaces.DraweeController;
import com.facebook.drawee.view.SimpleDraweeView;
import com.facebook.imagepipeline.common.ResizeOptions;
import com.facebook.imagepipeline.request.ImageRequest;
import com.facebook.imagepipeline.request.ImageRequestBuilder;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.wm.remusic.R;
import com.wm.remusic.activity.PlaylistActivity;
import com.wm.remusic.fragment.AttachFragment;
import com.wm.remusic.json.GedanInfo;
import com.wm.remusic.net.BMA;
import com.wm.remusic.net.HttpUtil;
import java.util.ArrayList;
/**
* Created by wm on 2016/5/15.
*/
public class AllPlaylistFragment extends AttachFragment {
FrameLayout frameLayout;
View view;
private GridLayoutManager gridLayoutManager;
private RecommendAdapter recomendAdapter;
private RecyclerView recyclerView;
private int lastVisibleItem;
private ArrayList<GedanInfo> recommendList = new ArrayList<>();
int pageCount = 1;
Gson gson;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.load_framelayout, container, false);
frameLayout = (FrameLayout) view.findViewById(R.id.loadframe);
View loadView = LayoutInflater.from(mContext).inflate(R.layout.loading, frameLayout, false);
frameLayout.addView(loadView);
return view;
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
if (view == null) {
view = LayoutInflater.from(mContext).inflate(R.layout.recommend_all_playlist, frameLayout, false);
recyclerView = (RecyclerView) view.findViewById(R.id.recommend_playlist_recyclerview);
gridLayoutManager = new GridLayoutManager(mContext, 2);
recyclerView.setLayoutManager(gridLayoutManager);
recyclerView.setHasFixedSize(true);
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (newState == RecyclerView.SCROLL_STATE_IDLE && lastVisibleItem + 1 == recomendAdapter.getItemCount()) {
new MAsyncTask(++pageCount).execute();
}
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
lastVisibleItem = gridLayoutManager.findLastVisibleItemPosition();
}
});
loadData();
}
}
}
class MAsyncTask extends AsyncTask {
private int next;
public MAsyncTask(int next) {
this.next = next;
}
@Override
protected Object doInBackground(Object[] params) {
JsonObject result = HttpUtil.getResposeJsonObject(BMA.GeDan.geDan(next, 10));
if (result == null) {
return null;
}
//热门歌单
JsonArray pArray = result.get("content").getAsJsonArray();
if (pArray == null) {
return null;
}
int plen = pArray.size();
for (int i = 0; i < plen; i++) {
GedanInfo gedanInfo = gson.fromJson(pArray.get(i), GedanInfo.class);
recommendList.add(gedanInfo);
}
return null;
}
@Override
protected void onPostExecute(Object o) {
super.onPostExecute(o);
recomendAdapter.update(recommendList);
}
}
private void loadData() {
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
gson = new Gson();
JsonObject result = HttpUtil.getResposeJsonObject(BMA.GeDan.geDan(1, 10));
if (result == null) {
return null;
}
//热门歌单
JsonArray pArray = result.get("content").getAsJsonArray();
if (pArray == null) {
return null;
}
int plen = pArray.size();
for (int i = 0; i < plen; i++) {
GedanInfo GedanInfo = gson.fromJson(pArray.get(i), GedanInfo.class);
recommendList.add(GedanInfo);
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
recomendAdapter = new RecommendAdapter(recommendList);
recyclerView.setAdapter(recomendAdapter);
frameLayout.removeAllViews();
frameLayout.addView(view);
}
}.execute();
}
class RecommendAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private ArrayList<GedanInfo> mList;
public int TYPE_ITEM = 0;
public int TYPE_FOOTER = 1;
SpannableString spanString;
public RecommendAdapter(ArrayList<GedanInfo> list) {
mList = list;
Bitmap b = BitmapFactory.decodeResource(getResources(), R.mipmap.index_icn_earphone);
ImageSpan imgSpan = new ImageSpan(mContext, b, ImageSpan.ALIGN_BASELINE);
spanString = new SpannableString("icon");
spanString.setSpan(imgSpan, 0, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
public void update(ArrayList<GedanInfo> list) {
mList = list;
notifyDataSetChanged();
}
@Override
public int getItemViewType(int position) {
if (position + 1 == mList.size() + 1) {
return TYPE_FOOTER;
}
return TYPE_ITEM;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
if (viewType == TYPE_ITEM) {
return new ItemView(layoutInflater.inflate(R.layout.recommend_all_playlist_item, parent, false));
} else {
return new Footer(layoutInflater.inflate(R.layout.loading, parent, false));
}
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (holder instanceof ItemView) {
final GedanInfo info = mList.get(position);
ImageRequest request = ImageRequestBuilder.newBuilderWithSource(Uri.parse(info.getPic_300()))
.setResizeOptions(new ResizeOptions(300, 300))
.build();
DraweeController controller = Fresco.newDraweeControllerBuilder()
.setOldController(((ItemView) holder).art.getController())
.setImageRequest(request)
.build();
((ItemView) holder).art.setController(controller);
//((ItemView) holder).art.setImageURI(Uri.parse(info.getPic_300()));
((ItemView) holder).name.setText(info.getTitle());
((ItemView) holder).count.setText(spanString);
int count = Integer.parseInt(info.getListenum());
if (count > 10000) {
count = count / 10000;
((ItemView) holder).count.append(" " + count + "万");
} else {
((ItemView) holder).count.append(" " + info.getListenum());
}
((ItemView) holder).itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(mContext, PlaylistActivity.class);
intent.putExtra("playlistid", info.getListid());
intent.putExtra("islocal", false);
intent.putExtra("albumart", info.getPic_300());
intent.putExtra("playlistname", info.getTitle());
intent.putExtra("playlistDetail", info.getTag());
intent.putExtra("playlistcount", info.getListenum());
mContext.startActivity(intent);
}
});
}
}
@Override
public int getItemCount() {
if (mList == null) {
return 0;
}
return mList.size() + 1;
}
class Footer extends RecyclerView.ViewHolder {
public Footer(View itemView) {
super(itemView);
}
}
class ItemView extends RecyclerView.ViewHolder {
private SimpleDraweeView art;
private TextView name, count;
public ItemView(View itemView) {
super(itemView);
art = (SimpleDraweeView) itemView.findViewById(R.id.playlist_art);
name = (TextView) itemView.findViewById(R.id.playlist_name);
count = (TextView) itemView.findViewById(R.id.playlist_listen_count);
}
}
}
}