package com.ywwxhz.data.impl;
import android.app.Activity;
import android.content.Intent;
import android.text.Html;
import android.view.View;
import android.widget.AdapterView;
import com.google.gson.reflect.TypeToken;
import com.loopj.android.http.ResponseHandlerInterface;
import com.ywwxhz.activitys.NewsDetailActivity;
import com.ywwxhz.adapters.NewsListAdapter;
import com.ywwxhz.cnbetareader.R;
import com.ywwxhz.entitys.NewsItem;
import com.ywwxhz.entitys.NewsListObject;
import com.ywwxhz.entitys.ResponseObject;
import com.ywwxhz.fragments.NewsDetailFragment;
import com.ywwxhz.lib.CroutonStyle;
import com.ywwxhz.lib.handler.BaseHttpResponseHandler;
import com.ywwxhz.lib.kits.FileCacheKit;
import com.ywwxhz.lib.kits.NetKit;
import com.ywwxhz.lib.kits.Toolkit;
import java.util.ArrayList;
import java.util.List;
/**
* cnBetaReader
* <p/>
* Created by 远望の无限(ywwxhz) on 2015/3/25 21:19.
*/
public abstract class NetNewsListDataProvider extends BaseNewsListDataProvider<NewsListAdapter> {
private int topSid;
private int current;
private ResponseHandlerInterface newsPage = new BaseHttpResponseHandler<NewsListObject>(new TypeToken<ResponseObject<NewsListObject>>() {
}){
@Override
protected void onSuccess(NewsListObject result) {
List<NewsItem> itemList = result.getList();
List<NewsItem> dataSet = getAdapter().getDataSet();
int size = 0;
boolean find = false;
for (int i = 0; i < itemList.size(); i++) {
NewsItem item = itemList.get(i);
if (itemList.get(i).getCounter() != null && item.getComments() != null) {
int num = Integer.parseInt(item.getCounter());
if (num > 9999) {
item.setCounter("9999+");
}
num = Integer.parseInt(item.getComments());
if (num > 999) {
item.setComments("999+");
}
} else {
item.setCounter("0");
item.setComments("0");
}
item.setTitle(item.getTitle().replaceAll("<.*?>", ""));
StringBuilder sb = new StringBuilder(Html.fromHtml(item.getHometext().replaceAll("<.*?>|[\\r|\\n]", "")));
if (sb.length() > 140) {
item.setSummary(sb.replace(140, sb.length(), "...").toString());
} else {
item.setSummary(sb.toString());
}
if (item.getThumb().contains("thumb")) {
item.setLargeImage(item.getThumb().replaceAll("(\\.\\w{3,4})?_100x100|thumb/mini/", ""));
}
if (!find && item.getSid() != topSid) {
size++;
} else if (!find) {
find = true;
}
}
if (!find) {
size++;
}
if (!hasCached || result.getPage() == 1) {
hasCached = true;
getAdapter().setDataSet(itemList);
if(itemList.size()>2) {
topSid = itemList.get(1).getSid();
}
showToastAndCache(itemList, size - 1);
} else {
dataSet.addAll(itemList);
}
current = result.getPage();
}
@Override
protected Activity getActivity() {
return NetNewsListDataProvider.this.getActivity();
}
@Override
public void onFinish() {
if(callback!=null){
callback.onLoadFinish(40);
}
}
};
public NetNewsListDataProvider(Activity mActivity) {
super(mActivity);
hasCached = false;
}
@Override
public NewsListAdapter newAdapter() {
return new NewsListAdapter(getActivity(), new ArrayList<NewsItem>());
}
@Override
public void loadNewData() {
makeRequest(1, getTypeKey(), newsPage);
}
@Override
public void loadNextData() {
makeRequest(current + 1, getTypeKey(), newsPage);
}
public void makeRequest(int page, String type, ResponseHandlerInterface handlerInterface){
NetKit.getInstance().getNewslistByPage(page, type, handlerInterface);
}
@Override
public AdapterView.OnItemClickListener getOnItemClickListener() {
return new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Intent intent = new Intent(getActivity(), NewsDetailActivity.class);
NewsItem item = getAdapter().getDataSetItem(i - 1);
intent.putExtra(NewsDetailFragment.NEWS_SID_KEY, item.getSid());
intent.putExtra(NewsDetailFragment.NEWS_TITLE_KEY,item.getTitle());
getActivity().startActivity(intent);
}
};
}
@Override
public void loadData(boolean startup) {
ArrayList<NewsItem> newsList = FileCacheKit.getInstance().getAsObject(getTypeKey().hashCode() + "", "list", new TypeToken<ArrayList<NewsItem>>() {
});
if (newsList != null) {
hasCached = true;
topSid = newsList.get(1).getSid();
getAdapter().setDataSet(newsList);
getAdapter().notifyDataSetChanged();
} else {
this.hasCached = false;
}
this.current = 1;
}
private void showToastAndCache(List<NewsItem> itemList, int size) {
if (size < 1) {
Toolkit.showCrouton(getActivity(), getActivity().getString(R.string.message_no_new_news), CroutonStyle.CONFIRM);
} else {
Toolkit.showCrouton(getActivity(), getActivity().getString(R.string.message_new_news, size), CroutonStyle.INFO);
}
FileCacheKit.getInstance().putAsync(getTypeKey().hashCode() + "", Toolkit.getGson().toJson(itemList), "list", null);
}
}