diff options
| author | Andrew Dolgov <fox@madoka.volgo-balt.ru> | 2012-09-17 13:27:27 +0400 |
|---|---|---|
| committer | Andrew Dolgov <fox@madoka.volgo-balt.ru> | 2012-09-17 13:27:27 +0400 |
| commit | 219531f1384f18ac04c6a61a940329580d02863e (patch) | |
| tree | f0e18d0ee2a73fa4a8bddcd11ba282e9dec054f8 /src/org/fox/ttrss/ArticlePager.java | |
| parent | 4f8cc7aeebe6794319b9fc8a63406ed6a38d9747 (diff) | |
implement background loading in ArticlePager
various loading and state related fixes
Diffstat (limited to 'src/org/fox/ttrss/ArticlePager.java')
| -rw-r--r-- | src/org/fox/ttrss/ArticlePager.java | 73 |
1 files changed, 69 insertions, 4 deletions
diff --git a/src/org/fox/ttrss/ArticlePager.java b/src/org/fox/ttrss/ArticlePager.java index f9f7b1bd..a7ecaaa5 100644 --- a/src/org/fox/ttrss/ArticlePager.java +++ b/src/org/fox/ttrss/ArticlePager.java @@ -1,7 +1,13 @@ package org.fox.ttrss;
+import java.util.HashMap;
+
import org.fox.ttrss.types.Article;
import org.fox.ttrss.types.ArticleList;
+import org.fox.ttrss.types.Feed;
+import org.fox.ttrss.util.HeadlinesRequest;
+
+import com.google.gson.JsonElement;
import android.app.Activity;
import android.os.Bundle;
@@ -9,6 +15,7 @@ import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -20,6 +27,8 @@ public class ArticlePager extends Fragment { private HeadlinesEventListener m_onlineServices;
private Article m_article;
private ArticleList m_articles;
+ private OnlineActivity m_activity;
+ private String m_searchQuery = "";
private class PagerAdapter extends FragmentStatePagerAdapter {
@@ -54,6 +63,10 @@ public class ArticlePager extends Fragment { m_article = article;
}
+
+ public void setSearchQuery(String searchQuery) {
+ m_searchQuery = searchQuery;
+ }
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
@@ -98,9 +111,8 @@ public class ArticlePager extends Fragment { //Log.d(TAG, "Page #" + position + "/" + m_adapter.getCount());
if (position == m_adapter.getCount() - 5) {
- // FIXME load more articles somehow
- //m_hf.refresh(true);
- m_adapter.notifyDataSetChanged();
+ Log.d(TAG, "loading more articles...");
+ loadMoreArticles();
}
}
}
@@ -109,6 +121,58 @@ public class ArticlePager extends Fragment { return view;
}
+ @SuppressWarnings({ "unchecked", "serial" })
+ private void loadMoreArticles() {
+ m_activity.setLoadingStatus(R.string.blank, true);
+
+ HeadlinesRequest req = new HeadlinesRequest(getActivity().getApplicationContext(), m_activity) {
+ protected void onPostExecute(JsonElement result) {
+ super.onPostExecute(result);
+ m_adapter.notifyDataSetChanged();
+ }
+ };
+
+ final Feed feed = TinyApplication.getInstance().m_activeFeed;
+
+ final String sessionId = m_activity.getSessionId();
+ final boolean showUnread = m_activity.getUnreadArticlesOnly();
+ int skip = 0;
+
+ for (Article a : m_articles) {
+ if (a.unread) ++skip;
+ }
+
+ if (skip == 0) skip = m_articles.size();
+
+ final int fskip = skip;
+
+ req.setOffset(skip);
+
+ HashMap<String,String> map = new HashMap<String,String>() {
+ {
+ put("op", "getHeadlines");
+ put("sid", sessionId);
+ put("feed_id", String.valueOf(feed.id));
+ put("show_content", "true");
+ put("include_attachments", "true");
+ put("limit", String.valueOf(HeadlinesFragment.HEADLINES_REQUEST_SIZE));
+ put("offset", String.valueOf(0));
+ put("view_mode", showUnread ? "adaptive" : "all_articles");
+ put("skip", String.valueOf(fskip));
+
+ if (feed.is_cat) put("is_cat", "true");
+
+ if (m_searchQuery != null && m_searchQuery.length() != 0) {
+ put("search", m_searchQuery);
+ put("search_mode", "");
+ put("match_on", "both");
+ }
+ }
+ };
+
+ req.execute(map);
+ }
+
@Override
public void onSaveInstanceState(Bundle out) {
super.onSaveInstanceState(out);
@@ -122,6 +186,7 @@ public class ArticlePager extends Fragment { super.onAttach(activity);
m_onlineServices = (HeadlinesEventListener)activity;
+ m_activity = (OnlineActivity)activity;
m_articles = TinyApplication.getInstance().m_loadedArticles;
}
@@ -130,7 +195,7 @@ public class ArticlePager extends Fragment { public void onResume() {
super.onResume();
- ((OnlineActivity)getActivity()).initMenu();
+ m_activity.initMenu();
}
public Article getSelectedArticle() {
|