tt-rss-android/src/org/fox/ttrss/ArticlePager.java

206 lines
5.1 KiB
Java
Raw Normal View History

package org.fox.ttrss;
import java.util.HashMap;
2012-06-19 10:18:00 +00:00
import org.fox.ttrss.types.Article;
2012-09-16 15:25:47 +00:00
import org.fox.ttrss.types.ArticleList;
import org.fox.ttrss.types.Feed;
import org.fox.ttrss.util.HeadlinesRequest;
import com.google.gson.JsonElement;
2012-06-19 10:18:00 +00:00
import android.app.Activity;
import android.os.Bundle;
2012-06-19 14:24:22 +00:00
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;
public class ArticlePager extends Fragment {
private final String TAG = "ArticlePager";
private PagerAdapter m_adapter;
2012-09-16 09:25:28 +00:00
private HeadlinesEventListener m_onlineServices;
private Article m_article;
2012-09-16 15:25:47 +00:00
private ArticleList m_articles;
private OnlineActivity m_activity;
private String m_searchQuery = "";
private class PagerAdapter extends FragmentStatePagerAdapter {
public PagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
2012-09-16 15:25:47 +00:00
Article article = m_articles.get(position);
if (article != null) {
ArticleFragment af = new ArticleFragment(article);
return af;
}
return null;
}
@Override
public int getCount() {
2012-09-16 15:25:47 +00:00
return m_articles.size();
}
}
public ArticlePager() {
super();
}
public ArticlePager(Article article) {
super();
m_article = article;
}
public void setSearchQuery(String searchQuery) {
m_searchQuery = searchQuery;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.article_pager, container, false);
2012-09-16 15:25:47 +00:00
if (savedInstanceState != null) {
m_articles = savedInstanceState.getParcelable("articles");
m_article = savedInstanceState.getParcelable("article");
}
2012-06-19 14:24:22 +00:00
m_adapter = new PagerAdapter(getActivity().getSupportFragmentManager());
ViewPager pager = (ViewPager) view.findViewById(R.id.article_pager);
2012-09-16 15:25:47 +00:00
int position = m_articles.indexOf(m_article);
pager.setAdapter(m_adapter);
pager.setCurrentItem(position);
pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrollStateChanged(int arg0) {
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageSelected(int position) {
2012-09-16 15:25:47 +00:00
Article article = m_articles.get(position);
if (article != null) {
m_article = article;
if (article.unread) {
article.unread = false;
m_onlineServices.saveArticleUnread(article);
}
2012-09-16 09:25:28 +00:00
m_onlineServices.onArticleSelected(article, false);
//Log.d(TAG, "Page #" + position + "/" + m_adapter.getCount());
if (position == m_adapter.getCount() - 5) {
Log.d(TAG, "loading more articles...");
loadMoreArticles();
}
}
}
});
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);
}
2012-09-16 15:25:47 +00:00
@Override
public void onSaveInstanceState(Bundle out) {
super.onSaveInstanceState(out);
out.putParcelable("articles", m_articles);
out.putParcelable("article", m_article);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
2012-09-16 09:25:28 +00:00
m_onlineServices = (HeadlinesEventListener)activity;
m_activity = (OnlineActivity)activity;
m_articles = TinyApplication.getInstance().m_loadedArticles;
2012-09-16 16:46:54 +00:00
}
@Override
public void onResume() {
super.onResume();
2012-09-16 15:25:47 +00:00
m_activity.initMenu();
2012-09-16 16:46:54 +00:00
}
public Article getSelectedArticle() {
return m_article;
}
}