package com.lgq.rssreader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.Dictionary;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import com.google.gson.Gson;
import com.kanak.emptylayout.EmptyLayout;
import com.lgq.rssreader.adapter.BlogAdapter;
import com.lgq.rssreader.adapter.RecyclerBlogAdapter;
import com.lgq.rssreader.adapter.RecyclerItemClickListener;
import com.lgq.rssreader.controls.SwipeMenu;
import com.lgq.rssreader.controls.SwipeMenuAdapter;
import com.lgq.rssreader.controls.SwipeMenuCreator;
import com.lgq.rssreader.controls.SwipeMenuItem;
import com.lgq.rssreader.controls.SwipeMenuListView;
import com.lgq.rssreader.controls.SwipeMenuView;
import com.lgq.rssreader.controls.SystemBarTintManager;
import com.lgq.rssreader.controls.XListView.IXListViewListener;
import com.lgq.rssreader.core.ReaderApp;
import com.lgq.rssreader.dal.BlogDalHelper;
import com.lgq.rssreader.dal.SyncStateDalHelper;
import com.lgq.rssreader.entity.Blog;
import com.lgq.rssreader.entity.Channel;
import com.lgq.rssreader.entity.SyncState;
import com.lgq.rssreader.enums.RssAction;
import com.lgq.rssreader.parser.FeedlyParser;
import com.lgq.rssreader.parser.HttpResponseHandler;
import com.lgq.rssreader.utils.DateHelper;
import com.lgq.rssreader.utils.Helper;
import android.support.v4.app.Fragment;
import android.app.Activity;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.graphics.Color;
import android.graphics.Rect;
import android.graphics.drawable.ColorDrawable;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.NavUtils;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.util.TypedValue;
import android.view.KeyEvent;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.view.Window;
import android.view.WindowManager;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
/**
* An activity representing a single Blog detail screen. This
* activity is only used on handset devices. On tablet-size devices,
* item details are presented side-by-side with a list of items
* in a {@link MainActivity}.
* <p>
* This activity is mostly just a 'shell' activity containing nothing
* more than a {@link BlogContentFragment}.
*/
public class BlogListActivity extends BaseActivity implements IXListViewListener {
private boolean needUpdate;
/**
* The serialization (saved instance state) Bundle key representing the
* activated item position. Only used on tablets.
*/
private static final String STATE_ACTIVATED_POSITION = "activated_position";
/**
* The fragment argument representing the item ID that this fragment
* represents.
*/
public static final String ARG_ITEM_ID = "item_id";
/**
* The fragment's listview, which support pull down to refresh
* clicks.
*/
private SwipeMenuListView listView;
//private RecyclerView listView;
private SwipeRefreshLayout mSwipeRefreshLayout;
/**
* The fragment's title
*
*/
private TextView title;
/**
* The listview adapter
*/
private BlogAdapter adapter;
/**
* The listview page index
*/
private int pageIndex = 1;
/**
* The blog list
*/
private List<Blog> data;
/**
* Empty view for listview
*/
private EmptyLayout emptyLayout;
/**
* The Channel which this fragment presents
*/
private Channel channel;
/**
* The current activated item position. Only used on tablets.
*/
private int mActivatedPosition = ListView.INVALID_POSITION;
public static final int LOADDATA = 1;
public static final int UPDATESTATE = 2;
public static final int UPDATECOUNT = 3;
public static final int EMPTY = 4;
public static final int ONLOAD = 5;
public static final int SCROLLING = 6;
public Handler myHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
switch(msg.what){
case LOADDATA :
if(adapter == null){
data = (List<Blog>) msg.obj;
adapter = new BlogAdapter(
BlogListActivity.this,
data,
listView);
listView.setAdapter(adapter);
}else{
List<Blog> blogs = ((List<Blog>) msg.obj);
for(Blog b : blogs){
if(!data.contains(b)){
data.add(b);
}
}
Collections.sort(data, new Comparator<Blog>(){
public int compare(Blog arg0, Blog arg1) {
return (int)(arg1.TimeStamp - arg0.TimeStamp);
}
});
}
adapter.notifyDataSetChanged();
onLoad();
break;
case UPDATESTATE:
List<Blog> blogs = (List<Blog>)msg.obj;
if(data == null){
data = blogs;
}else{
for(Blog b : blogs){
int index = data.indexOf(b);
if(index != -1)
data.set(index, b);
}
}
Collections.sort(data, new Comparator<Blog>(){
public int compare(Blog arg0, Blog arg1) {
return (int)(arg1.TimeStamp - arg0.TimeStamp);
}
});
if(adapter == null){
adapter = new BlogAdapter(
BlogListActivity.this,
data,
listView);
listView.setAdapter(adapter);
}
if(blogs.size() == 0){
emptyLayout.setEmptyMessage(BlogListActivity.this.getResources().getString(R.string.list_empty_view));
emptyLayout.getEmptyView().setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
onRefresh();
}
});
emptyLayout.showEmpty();
}
adapter.notifyDataSetChanged();
break;
case UPDATECOUNT:
title.setText(channel.Title + "-" + String.valueOf(msg.obj));
break;
case EMPTY:
emptyLayout.setEmptyMessage(ReaderApp.getAppContext().getResources().getString(R.string.list_empty_view));
emptyLayout.getEmptyView().setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
onEmpty();
}
});
emptyLayout.showEmpty();
break;
case ONLOAD:
onLoad();
break;
case SCROLLING:
if(adapter != null)
adapter.clearPosition(-1);
break;
}
super.handleMessage(msg);
}
};
public BlogListActivity(){
super(R.drawable.translucent_status_bar);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_blog_list);
initViews();
}
private void initViews(){
if(getIntent().getExtras().containsKey(ARG_ITEM_ID)){
channel = (Channel)getIntent().getExtras().get(ARG_ITEM_ID);
new Thread(){
@Override
public void run() {
try {
final BlogDalHelper helper = new BlogDalHelper();
List<Blog> data = helper.GetBlogList(channel, 1, ReaderApp.getSettings().NumPerRequest, ReaderApp.getSettings().ShowAllItems);
helper.Close();
if(data.size() > 0){
Message m = myHandler.obtainMessage();
m.what = LOADDATA;
m.obj = data;
m.arg1 = 0;
myHandler.sendMessage(m);
}else{
onEmpty();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
}
LinearLayout fragment_blog_list_layout = (LinearLayout)findViewById(R.id.fragment_blog_list_layout);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
fragment_blog_list_layout.setPadding(0, Helper.getStatusBarHeight(), 0, 0);
}
listView = (SwipeMenuListView)findViewById(R.id.blog_list);
SwipeMenuCreator creator = new SwipeMenuCreator() {
@Override
public void create(SwipeMenu menu, int position) {
Blog entity = (Blog)adapter.getItem(position);
// create "open" item
SwipeMenuItem openItem = new SwipeMenuItem(getApplicationContext());
// set item background
openItem.setBackground(new ColorDrawable(Color.rgb(0x2D, 0xBD, 0x69)));
// set item width
openItem.setWidth(dp2px(90));
// set item icon
//openItem.setIcon(R.drawable.fav);
// if(!entity.IsStarred){
// openItem.setIcon(R.drawable.fav);
// openItem.setTitle("Fav");
// }
// else{
// openItem.setIcon(R.drawable.unstar);
// openItem.setTitle("Unstar");
// }
// add to menu
menu.addMenuItem(openItem);
SwipeMenuItem seerateItem = new SwipeMenuItem(getApplicationContext());
// set item background
seerateItem.setBackground(R.color.white);
// set item width
seerateItem.setWidth(dp2px(1));
// add to menu
menu.addMenuItem(seerateItem);
// create "delete" item
SwipeMenuItem deleteItem = new SwipeMenuItem(
getApplicationContext());
// set item background
deleteItem.setBackground(new ColorDrawable(Color.rgb(0x2D, 0xBD, 0x69)));
// set item width
deleteItem.setWidth(dp2px(90));
// set item icon
//deleteItem.setIcon(R.drawable.read);
// if(!entity.IsRead){
// deleteItem.setIcon(R.drawable.read);
// deleteItem.setTitle("read");
// }
// else{
// deleteItem.setIcon(R.drawable.unread);
// deleteItem.setTitle("unread");
// }
// add to menu
menu.addMenuItem(deleteItem);
}
};
// set creator
listView.setMenuCreator(creator);
//listView = (RecyclerView)findViewById(R.id.blog_list);
//listView.setHasFixedSize(true);
//final LinearLayoutManager layoutManager = new LinearLayoutManager(this);
//listView.setLayoutManager(layoutManager);
//mSwipeRefreshLayout = (SwipeRefreshLayout)findViewById(R.id.swipeRefreshLayout);
//mSwipeRefreshLayout.setColorSchemeResources(R.color.green);
// mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
// @Override
// public void onRefresh() {
// // Refresh items
// refreshItems();
// }
// });
listView.setPullLoadEnable(true);
listView.setPullRefreshEnable(true);
listView.setXListViewListener(this);
// emptyLayout = new EmptyLayout(this, listView);
// emptyLayout.setLoadingMessage(getResources().getString(R.string.content_loading));
// //emptyLayout.setLoadingAnimationViewId(emptyLayout.getLoadingAnimationViewId());
// //emptyLayout.setLoadingAnimation(AnimationUtils.loadAnimation(getActivity(), R.anim.rotate));
// emptyLayout.showLoading();
title = (TextView)findViewById(R.id.bloglist_channel_title);
title.setText(channel.Title + "-" + channel.UnreadCount);
title.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
//listView.setSelection(0);
listView.smoothScrollToPosition(0);
}
});
// listView.addOnItemTouchListener(
// new RecyclerItemClickListener(getBaseContext(), new RecyclerItemClickListener.OnItemClickListener() {
// @Override public void onItemClick(View view, int position) {
// RecyclerBlogAdapter adapter = (RecyclerBlogAdapter) listView.getAdapter();
//
// Intent detailIntent = new Intent(BlogListActivity.this, BlogContentActivity.class);
// Bundle arguments = new Bundle();
//
// arguments.putSerializable(BlogContentActivity.CURRENT, (Blog)adapter.getItem(position));
// arguments.putSerializable(BlogContentActivity.CHANNEL, (Channel)getIntent().getExtras().get(BlogListActivity.ARG_ITEM_ID));
// detailIntent.putExtras(arguments);
// startActivityForResult(detailIntent, 0);
// }
// })
// );
//
// listView.setOnScrollListener(new RecyclerView.OnScrollListener()
// {
// @Override
// public void onScrolled(RecyclerView recyclerView, int dx,int dy)
// {
// super.onScrolled(recyclerView, dx, dy);
// }
//
// @Override
// public void onScrollStateChanged(RecyclerView recyclerView,int newState)
// {
// int totalItemCount = layoutManager.getItemCount();
// int lastVisibleItem = layoutManager.findLastVisibleItemPosition();
//
// if (totalItemCount> 1)
// {
// if (lastVisibleItem >= totalItemCount - 1)
// {
// // End has been reached
// // do something
// onLoadMore();
// }
// }
// }
// });
if(channel.LastRefreshTime != null)
listView.setRefreshTime(DateHelper.DateToChineseString(channel.LastRefreshTime));
else
listView.setRefreshTime(DateHelper.DateToChineseString(channel.LastUpdateTime));
if (Build.VERSION.SDK_INT >= 11) {
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
}
listView.setOnSwipeListener(new com.lgq.rssreader.controls.SwipeMenuListView.OnSwipeListener() {
@Override
public void onSwipeStart(SwipeMenuView menuView, int position) {
// swipe start
//View view = listView.getChildAt(position);
Blog entity = (Blog)adapter.getItem(position - listView.getHeaderViewsCount());
//Toast.makeText(getApplicationContext(), entity.Title, Toast.LENGTH_SHORT).show();
if(entity != null){
//SwipeMenuView menuView = (SwipeMenuView)view.getTag();
SwipeMenu menu = menuView.getMenu();
if(menu != null){
SwipeMenuItem openItem = menu.getMenuItem(0);
SwipeMenuItem deleteItem = menu.getMenuItem(2);
if(!entity.IsStarred){
openItem.setIcon(R.drawable.fav);
openItem.setTitle("Fav");
}
else{
openItem.setIcon(R.drawable.unstar);
openItem.setTitle("Unstar");
}
if(!entity.IsRead){
deleteItem.setIcon(R.drawable.read);
deleteItem.setTitle("read");
}
else{
deleteItem.setIcon(R.drawable.unread);
deleteItem.setTitle("unread");
}
menuView.setMenu(menu);
}
}
}
@Override
public void onSwipeEnd(SwipeMenuView menuView, int position) {
// swipe end
}
});
// step 2. listener item click event
listView.setOnMenuItemClickListener(new com.lgq.rssreader.controls.SwipeMenuListView.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(int position, SwipeMenuView menuView, int index) {
Blog entity = (Blog)adapter.getItem(position);
RssAction action;
//Toast.makeText(getApplicationContext(), entity.Title, Toast.LENGTH_SHORT).show();
SwipeMenu menu = menuView.getMenu();
if(menu != null){
SwipeMenuItem openItem = menu.getMenuItem(0);
SwipeMenuItem deleteItem = menu.getMenuItem(2);
switch (index)
{
case 0:
Log.i("RssReader","设置收藏未收藏");
if(menu == null)
return false;;
action = deleteItem.getTitle().equals("Fav") ? RssAction.AsUnstar : RssAction.AsStar;
//RssAction action = title.getCurrentTextColor() == Color.GRAY ? RssAction.AsUnread : RssAction.AsRead;
//entity.IsRead = title.getCurrentTextColor() == Color.BLACK;
if(action.equals(RssAction.AsStar)){
openItem.setIcon(R.drawable.fav);
openItem.setTitle("Fav");
entity.IsStarred = true;
}
else{
openItem.setIcon(R.drawable.unstar);
openItem.setTitle("Unstar");
entity.IsStarred = false;
}
markTag(entity, action);
adapter.notifyDataSetChanged();
break;
case 2:
Log.i("RssReader","设置已读未读");
if(menu == null)
return false;;
//Toast.makeText(getApplicationContext(), "before" + entity.IsRead, Toast.LENGTH_SHORT).show();
action = deleteItem.getTitle().equals("read") ? RssAction.AsUnread : RssAction.AsRead;
//RssAction action = title.getCurrentTextColor() == Color.GRAY ? RssAction.AsUnread : RssAction.AsRead;
//entity.IsRead = title.getCurrentTextColor() == Color.BLACK;
if(entity.IsRead){
deleteItem.setIcon(R.drawable.read);
deleteItem.setTitle("read");
}
else{
deleteItem.setIcon(R.drawable.unread);
deleteItem.setTitle("unread");
}
markTag(entity, action);
entity.IsRead = !entity.IsRead;
adapter.notifyDataSetChanged();
break;
}
//Toast.makeText(getApplicationContext(), "after" + entity.IsRead, Toast.LENGTH_SHORT).show();
menuView.setMenu(menu);
}
return false;
}
});
listView.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
ListAdapter adapter = (ListAdapter) listView.getAdapter();
Intent detailIntent = new Intent(BlogListActivity.this, BlogContentActivity.class);
Bundle arguments = new Bundle();
arguments.putSerializable(BlogContentActivity.CURRENT, (Blog)adapter.getItem(position));
arguments.putSerializable(BlogContentActivity.CHANNEL, (Channel)getIntent().getExtras().get(BlogListActivity.ARG_ITEM_ID));
detailIntent.putExtras(arguments);
startActivityForResult(detailIntent, 0);
}});
//
// @Override
// public void onRightAutoClose(int position, View view){
// Log.i("RssReader","设置已读未读");
//
// if(view == null) return;
//
// Blog entity = (Blog)adapter.getItem(position- listView.getHeaderViewsCount());
//
// TextView btn = (TextView)view.findViewById(R.id.btnread);
// ImageView img = (ImageView)btn.getTag(R.id.tag_first);
// TextView title = (TextView)btn.getTag(R.id.tag_second);
//
// //RssAction action = entity.IsRead ? RssAction.AsUnread : RssAction.AsRead;
// RssAction action = title.getCurrentTextColor() == Color.GRAY ? RssAction.AsUnread : RssAction.AsRead;
// entity.IsRead = title.getCurrentTextColor() == Color.BLACK;
// markTag(entity, action);
//
//// if(entity.IsRead){
//// img.setVisibility(View.VISIBLE);
//// img.setImageResource(R.drawable.keepread);
//// title.setTextColor(Color.GRAY);
//// //btn.setText(R.string.blog_setunread);
//// btn.setText(R.string.empty);
//// Drawable drawable = ReaderApp.getAppContext().getResources().getDrawable(R.drawable.setunread);
//// drawable.setBounds(btn.getCompoundDrawables()[0].getBounds());
//// btn.setCompoundDrawables(drawable, null, null, null);
//// }
//// else{
//// title.setTextColor(Color.BLACK);
//// img.setVisibility(View.GONE);
//// //btn.setText(R.string.blog_setread);
//// btn.setText(R.string.empty);
//// Drawable drawable = ReaderApp.getAppContext().getResources().getDrawable(R.drawable.setread);
//// drawable.setBounds(btn.getCompoundDrawables()[0].getBounds());
//// btn.setCompoundDrawables(drawable, null, null, null);
//// }
//
// adapter.notifyDataSetChanged();
//
// }
//
// @Override
// public void onLeftAutoClose(int position, View view){
// Log.i("RssReader","设置收藏相关");
//
// if(view == null) return;
//
// Blog entity = (Blog)adapter.getItem(position - listView.getHeaderViewsCount());
// TextView btn = (TextView)view.findViewById(R.id.btnstar);
// ImageView img = (ImageView)btn.getTag();
//
// //RssAction action = entity.IsStarred ? RssAction.AsUnstar : RssAction.AsStar;
// RssAction action = img.getVisibility() == View.VISIBLE ? RssAction.AsUnstar : RssAction.AsStar;
// entity.IsStarred = img.getVisibility() == View.GONE;//!entity.IsStarred;
// markTag(entity, action);
//
//// if(entity.IsStarred){
//// img.setVisibility(View.VISIBLE);
//// img.setImageResource(R.drawable.star);
//// //btn.setText(R.string.blog_setunstar);
//// btn.setText(R.string.empty);
//// Drawable drawable = ReaderApp.getAppContext().getResources().getDrawable(R.drawable.setstar);
//// drawable.setBounds(btn.getCompoundDrawables()[0].getBounds());
//// btn.setCompoundDrawables(drawable, null, null, null);
//// }
//// else{
//// img.setVisibility(View.GONE);
//// //btn.setText(R.string.blog_setstar);
//// btn.setText(R.string.empty);
//// Drawable drawable = ReaderApp.getAppContext().getResources().getDrawable(R.drawable.setunstar);
//// drawable.setBounds(btn.getCompoundDrawables()[0].getBounds());
//// btn.setCompoundDrawables(drawable, null, null, null);
//// }
//
// adapter.notifyDataSetChanged();
// }
//});
}
private int dp2px(int dp) {
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp,
getResources().getDisplayMetrics());
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK ) {
Intent i = new Intent();
i.putExtra("NeedUpdate", needUpdate);
this.setResult(Activity.RESULT_OK, i);
}
return super.onKeyDown(keyCode, event);
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if (channel != null) {
// Serialize and persist the activated item position.
outState.putSerializable(BlogListActivity.ARG_ITEM_ID, channel);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
switch (resultCode)
{
case RESULT_OK:
String gson = data.getStringExtra("Blogs");
Gson g = new Gson();
final List<Blog> blogs = new ArrayList<Blog>();
final List<String> blogIDs = new ArrayList<String>();
for(String s : gson.split("____")){
if(s != null && s.length() > 0){
Blog b = g.fromJson(s, Blog.class);
blogs.add(b);
blogIDs.add(b.BlogId);
}
}
final FeedlyParser feedly = new FeedlyParser();
final int count = data.getIntExtra("Count", 0);
if(blogs.size() > 0){
new Thread(){
public void run(){
Message m = myHandler.obtainMessage();
m.what = BlogListActivity.UPDATECOUNT;
m.obj = channel.UnreadCount - count > 0 ? channel.UnreadCount - count : 0 ;//blogs.size();
myHandler.sendMessage(m);
Message msg = myHandler.obtainMessage();
msg.what = BlogListActivity.UPDATESTATE;
msg.obj = blogs;
myHandler.sendMessage(msg);
needUpdate = true;
channel.UnreadCount = channel.UnreadCount - count > 0 ? channel.UnreadCount - count : 0;
if(channel.IsDirectory){
//need to update sub channel unread count
Hashtable<String, Integer> groups = new Hashtable<String, Integer>();
for(Blog b : blogs){
if(groups.containsKey(b.ChannelId))
groups.put(b.ChannelId, groups.get(b.ChannelId) + 1);
else
groups.put(b.ChannelId, 1);
}
for(Iterator<String> it = groups.keySet().iterator(); it.hasNext(); ){
String id = it.next();
Integer count = groups.get(id);
for(Channel child : channel.Children){
if(child.Id.equals(id)){
child.UnreadCount = child.UnreadCount - count;
break;
}
}
}
}
Helper.updateChannels(channel.Id, channel.UnreadCount);
}
}.start();
}
break;
default:
break;
}
}
/**
* Turns on activate-on-click mode. When this mode is on, list items will be
* given the 'activated' state when touched.
*/
public void setActivateOnItemClick(boolean activateOnItemClick) {
// When setting CHOICE_MODE_SINGLE, ListView will automatically
// give items the 'activated' state when touched.
listView.setChoiceMode(activateOnItemClick
? ListView.CHOICE_MODE_SINGLE
: ListView.CHOICE_MODE_NONE);
}
private void setActivatedPosition(int position) {
if (position == ListView.INVALID_POSITION) {
listView.setItemChecked(mActivatedPosition, false);
} else {
listView.setItemChecked(position, true);
}
mActivatedPosition = position;
}
private void onLoad() {
listView.stopRefresh();
listView.stopLoadMore();
channel.LastRefreshTime = new Date();
Helper.updateChannels(channel.Id, channel.LastRefreshTime);
//mSwipeRefreshLayout.setRefreshing(false);
listView.setRefreshTime(DateHelper.getDaysBeforeNow(channel.LastRefreshTime) + ReaderApp.getAppContext().getResources().getString(R.string.list_refreshtime));
}
private void markTag(final Blog b, RssAction action){
final FeedlyParser feedly = new FeedlyParser();
feedly.markTag(b, action, new HttpResponseHandler(){
@Override
public <T> void onCallback(T action, boolean result, String msg){
if(!result){
Log.i("RssReader", msg);
SyncStateDalHelper helper = new SyncStateDalHelper();
List<SyncState> states = new ArrayList<SyncState>();
SyncState s = new SyncState();
s.BlogOriginId = b.BlogId;
s.Status = (com.lgq.rssreader.enums.RssAction) action;
s.TimeStamp = new Date();
states.add(s);
helper.SynchronyData2DB(states);
helper.Close();
Toast.makeText(ReaderApp.getAppContext(), R.string.feedly_failedupdatestatus, Toast.LENGTH_SHORT).show();
}else{
BlogDalHelper bHelper = new BlogDalHelper();
if(action == RssAction.AsRead)
bHelper.MarkAsRead(b.BlogId, true);
if(action == RssAction.AsUnread)
bHelper.MarkAsRead(b.BlogId, false);
if(action == RssAction.AsStar)
bHelper.MarkAsStar(b.BlogId, true);
if(action == RssAction.AsUnstar)
bHelper.MarkAsStar(b.BlogId, false);
bHelper.Close();
Toast.makeText(ReaderApp.getAppContext(), msg, Toast.LENGTH_SHORT).show();
}
}
});
}
private void onEmpty(){
final FeedlyParser feedly = new FeedlyParser();
Blog tmp = new Blog();
tmp.TimeStamp = 0;
tmp.PubDate = new Date();
feedly.getRssBlog(channel, tmp, 30, new HttpResponseHandler(){
@Override
public <Blog> void onCallback(List<Blog> blogs, boolean result, String msg, boolean hasMore){
if(result){
BlogDalHelper helper = new BlogDalHelper();
helper.SynchronyData2DB((List<com.lgq.rssreader.entity.Blog>) blogs);
helper.Close();
if(blogs.size() > 0){
Message m = myHandler.obtainMessage();
m.what = LOADDATA;
m.obj = blogs;
myHandler.sendMessage(m);
}
Helper.sound();
}else{
Message m = myHandler.obtainMessage();
m.what = EMPTY;
m.obj = blogs;
myHandler.sendMessage(m);
Toast.makeText(ReaderApp.getAppContext(), msg, Toast.LENGTH_SHORT).show();
}
}
});
}
@Override
public void onRefresh() {
Blog b = (Blog)adapter.getItem(0);
//listView.setSelection(0);
Helper.pulldown();
FeedlyParser parser = new FeedlyParser();
parser.getRssBlog(channel, b, ReaderApp.getSettings().NumPerRequest, new HttpResponseHandler(){
@Override
public <Blog> void onCallback(final List<Blog> blogs, boolean result, String msg, boolean hasMore){
if(result){
BlogDalHelper helper = new BlogDalHelper();
helper.SynchronyData2DB((List<com.lgq.rssreader.entity.Blog>) blogs);
helper.Close();
if(hasMore){
Toast.makeText(ReaderApp.getAppContext(), ReaderApp.getAppContext().getResources().getString(R.string.list_loadingmore), Toast.LENGTH_SHORT).show();
}else{
Message m = myHandler.obtainMessage();
m.what = ONLOAD;
myHandler.sendMessage(m);
Helper.sound();
Message s = myHandler.obtainMessage();
s.what = SCROLLING;
myHandler.sendMessage(s);
}
//only first page show in UI thread
if(blogs.size() > 0){
Message m = myHandler.obtainMessage();
m.what = LOADDATA;
m.obj = blogs;
myHandler.sendMessage(m);
}
}else{
Message m = myHandler.obtainMessage();
m.what = ONLOAD;
myHandler.sendMessage(m);
Toast.makeText(ReaderApp.getAppContext(), msg, Toast.LENGTH_SHORT).show();
}
}
});
}
@Override
public void onLoadMore() {
new Thread(){
public void run(){
final BlogDalHelper helper = new BlogDalHelper();
pageIndex = pageIndex + 1;
List<Blog> blogs = helper.GetBlogList(channel, pageIndex, ReaderApp.getSettings().NumPerRequest, ReaderApp.getSettings().ShowAllItems);
helper.Close();
if(blogs.size()>0){
Message m = myHandler.obtainMessage();
m.what = LOADDATA;
m.obj = blogs;
myHandler.sendMessage(m);
Message s = myHandler.obtainMessage();
s.what = SCROLLING;
myHandler.sendMessage(s);
}else{
Blog b = (Blog)adapter.getItem(adapter.getCount() - 1);
b.TimeStamp = -b.TimeStamp;
FeedlyParser parser = new FeedlyParser();
parser.getRssBlog(channel, b, ReaderApp.getSettings().NumPerRequest, new HttpResponseHandler(){
@Override
public <Blog> void onCallback(final List<Blog> blogs, boolean result, String msg, boolean hasMore){
if(result){
final BlogDalHelper save = new BlogDalHelper();
save.SynchronyData2DB((List<com.lgq.rssreader.entity.Blog>) blogs);
save.Close();
if(hasMore){
Toast.makeText(BlogListActivity.this, getResources().getString(R.string.list_loadingmore), Toast.LENGTH_SHORT).show();
}
else{
Message s = myHandler.obtainMessage();
s.what = SCROLLING;
myHandler.sendMessage(s);
Helper.sound();
}
if(blogs.size() > 0){
Message m = myHandler.obtainMessage();
m.what = LOADDATA;
m.obj = blogs;
myHandler.sendMessage(m);
}
}else{
Toast.makeText(BlogListActivity.this, msg, Toast.LENGTH_SHORT).show();
}
//onLoad();
}
});
}
}}.start();
//onLoad();
}
}