package com.socks.jiandan.adapter;
import android.app.Activity;
import android.content.Intent;
import android.support.v7.widget.CardView;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.socks.jiandan.R;
import com.socks.jiandan.base.ConstantString;
import com.socks.jiandan.cache.FreshNewsCache;
import com.socks.jiandan.callback.LoadFinishCallBack;
import com.socks.jiandan.callback.LoadResultCallBack;
import com.socks.jiandan.model.FreshNews;
import com.socks.jiandan.net.JSONParser;
import com.socks.jiandan.net.Request4FreshNews;
import com.socks.jiandan.net.RequestManager;
import com.socks.jiandan.ui.FreshNewsDetailActivity;
import com.socks.jiandan.utils.NetWorkUtil;
import com.socks.jiandan.utils.ShareUtil;
import com.socks.jiandan.utils.ShowToast;
import com.socks.jiandan.view.imageloader.ImageLoadProxy;
import java.util.ArrayList;
import butterknife.ButterKnife;
import butterknife.InjectView;
import butterknife.Optional;
public class FreshNewsAdapter extends RecyclerView.Adapter<FreshNewsAdapter.ViewHolder> {
private int page;
private int lastPosition = -1;
private boolean isLargeMode;
private Activity mActivity;
private DisplayImageOptions options;
private ArrayList<FreshNews> mFreshNews;
private LoadFinishCallBack mLoadFinisCallBack;
private LoadResultCallBack mLoadResultCallBack;
public FreshNewsAdapter(Activity activity, LoadFinishCallBack loadFinisCallBack, LoadResultCallBack loadResultCallBack, boolean isLargeMode) {
this.mActivity = activity;
this.isLargeMode = isLargeMode;
this.mLoadFinisCallBack = loadFinisCallBack;
this.mLoadResultCallBack = loadResultCallBack;
mFreshNews = new ArrayList<>();
int loadingResource = isLargeMode ? R.drawable.ic_loading_large : R.drawable.ic_loading_small;
options = ImageLoadProxy.getOptions4PictureList(loadingResource);
}
private void setAnimation(View viewToAnimate, int position) {
if (position > lastPosition) {
Animation animation = AnimationUtils.loadAnimation(viewToAnimate.getContext(), R
.anim.item_bottom_in);
viewToAnimate.startAnimation(animation);
lastPosition = position;
}
}
@Override
public void onViewDetachedFromWindow(ViewHolder holder) {
if (isLargeMode) {
holder.card.clearAnimation();
} else {
holder.ll_content.clearAnimation();
}
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
int layoutId = isLargeMode ? R.layout.item_fresh_news : R.layout.item_fresh_news_small;
View v = LayoutInflater.from(parent.getContext())
.inflate(layoutId, parent, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
final FreshNews freshNews = mFreshNews.get(position);
ImageLoadProxy.displayImage(freshNews.getCustomFields().getThumb_m(), holder.img, options);
holder.tv_title.setText(freshNews.getTitle());
holder.tv_info.setText(freshNews.getAuthor().getName() + "@" + freshNews.getTags()
.getTitle());
holder.tv_views.setText("浏览" + freshNews.getCustomFields().getViews() + "次");
if (isLargeMode) {
holder.tv_share.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ShareUtil.shareText(mActivity, freshNews.getTitle() + " " + freshNews.getUrl());
}
});
holder.card.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
toDetailActivity(position);
}
});
setAnimation(holder.card, position);
} else {
holder.ll_content.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
toDetailActivity(position);
}
});
setAnimation(holder.ll_content, position);
}
}
private void toDetailActivity(int position) {
Intent intent = new Intent(mActivity, FreshNewsDetailActivity.class);
intent.putExtra(FreshNewsDetailActivity.DATA_FRESH_NEWS, mFreshNews);
intent.putExtra(FreshNewsDetailActivity.DATA_POSITION, position);
mActivity.startActivity(intent);
}
@Override
public int getItemCount() {
return mFreshNews.size();
}
public void loadFirst() {
page = 1;
loadDataByNetworkType();
}
public void loadNextPage() {
page++;
loadDataByNetworkType();
}
private void loadDataByNetworkType() {
if (NetWorkUtil.isNetWorkConnected(mActivity)) {
RequestManager.addRequest(new Request4FreshNews(FreshNews.getUrlFreshNews(page),
new Response.Listener<ArrayList<FreshNews>>() {
@Override
public void onResponse(ArrayList<FreshNews> response) {
mLoadResultCallBack.onSuccess(LoadResultCallBack.SUCCESS_OK, null);
mLoadFinisCallBack.loadFinish(null);
if (page == 1) {
mFreshNews.clear();
FreshNewsCache.getInstance(mActivity).clearAllCache();
}
mFreshNews.addAll(response);
notifyDataSetChanged();
FreshNewsCache.getInstance(mActivity).addResultCache(JSONParser.toString(response),
page);
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
mLoadResultCallBack.onError(LoadResultCallBack.ERROR_NET, error.getMessage());
mLoadFinisCallBack.loadFinish(null);
}
}), mActivity);
} else {
mLoadResultCallBack.onSuccess(LoadResultCallBack.SUCCESS_OK, null);
mLoadFinisCallBack.loadFinish(null);
if (page == 1) {
mFreshNews.clear();
ShowToast.Short(ConstantString.LOAD_NO_NETWORK);
}
mFreshNews.addAll(FreshNewsCache.getInstance(mActivity).getCacheByPage(page));
notifyDataSetChanged();
}
}
public static class ViewHolder extends RecyclerView.ViewHolder {
@InjectView(R.id.tv_title)
TextView tv_title;
@InjectView(R.id.tv_info)
TextView tv_info;
@InjectView(R.id.tv_views)
TextView tv_views;
@Optional
@InjectView(R.id.tv_share)
TextView tv_share;
@InjectView(R.id.img)
ImageView img;
@Optional
@InjectView(R.id.card)
CardView card;
@Optional
@InjectView(R.id.ll_content)
LinearLayout ll_content;
public ViewHolder(View contentView) {
super(contentView);
ButterKnife.inject(this, contentView);
}
}
}