first_id fixes

This commit is contained in:
Andrew Dolgov 2015-07-12 18:07:55 +03:00
parent 4083904781
commit 0be76abf87
4 changed files with 28 additions and 35 deletions

View File

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.fox.ttrss" package="org.fox.ttrss"
android:versionCode="362" android:versionCode="363"
android:versionName="1.135" > android:versionName="1.136" >
<uses-sdk <uses-sdk
android:minSdkVersion="15" android:minSdkVersion="15"

View File

@ -36,7 +36,8 @@ public class ArticlePager extends Fragment {
private String m_searchQuery = ""; private String m_searchQuery = "";
private Feed m_feed; private Feed m_feed;
private SharedPreferences m_prefs; private SharedPreferences m_prefs;
private int m_firstId = 0;
private class PagerAdapter extends ClassloaderWorkaroundFragmentStatePagerAdapter { private class PagerAdapter extends ClassloaderWorkaroundFragmentStatePagerAdapter {
public PagerAdapter(FragmentManager fm) { public PagerAdapter(FragmentManager fm) {
@ -81,6 +82,7 @@ public class ArticlePager extends Fragment {
m_article = savedInstanceState.getParcelable("article"); m_article = savedInstanceState.getParcelable("article");
m_articles = ((DetailActivity)m_activity).m_articles; m_articles = ((DetailActivity)m_activity).m_articles;
m_feed = savedInstanceState.getParcelable("feed"); m_feed = savedInstanceState.getParcelable("feed");
m_firstId = savedInstanceState.getInt("firstId");
} }
m_adapter = new PagerAdapter(getActivity().getSupportFragmentManager()); m_adapter = new PagerAdapter(getActivity().getSupportFragmentManager());
@ -156,10 +158,12 @@ public class ArticlePager extends Fragment {
if (result != null) { if (result != null) {
if (m_topIdChanged) { if (m_firstIdChanged) {
m_articles.add(new Article(HeadlinesFragment.ARTICLE_SPECIAL_TOP_CHANGED)); m_articles.add(new Article(HeadlinesFragment.ARTICLE_SPECIAL_TOP_CHANGED));
} }
ArticlePager.this.m_firstId = m_firstId;
try { try {
m_adapter.notifyDataSetChanged(); m_adapter.notifyDataSetChanged();
} catch (BadParcelableException e) { } catch (BadParcelableException e) {
@ -223,16 +227,6 @@ public class ArticlePager extends Fragment {
req.setOffset(skip); req.setOffset(skip);
final int checkTopId;
if (skip != 0 && m_articles.size() > 1) {
// m_articles[0] is the special spacer (id -2)
//Log.d(TAG, "TOPID:" + m_articles.get(1).id);
checkTopId = m_articles.get(1).id;
} else {
checkTopId = 0;
}
HashMap<String,String> map = new HashMap<String,String>() { HashMap<String,String> map = new HashMap<String,String>() {
{ {
put("op", "getHeadlines"); put("op", "getHeadlines");
@ -258,7 +252,7 @@ public class ArticlePager extends Fragment {
put("match_on", "both"); put("match_on", "both");
} }
if (checkTopId > 0) put("check_top_id", String.valueOf(checkTopId)); if (m_firstId > 0) put("check_first_id", String.valueOf(m_firstId));
if (m_activity.getApiLevel() >= 12) { if (m_activity.getApiLevel() >= 12) {
put("include_header", "true"); put("include_header", "true");
@ -267,7 +261,7 @@ public class ArticlePager extends Fragment {
} }
}; };
Log.d(TAG, "[AP] request more headlines, topId=" + checkTopId); Log.d(TAG, "[AP] request more headlines, firstId=" + m_firstId);
req.execute(map); req.execute(map);
} }
@ -275,10 +269,11 @@ public class ArticlePager extends Fragment {
@Override @Override
public void onSaveInstanceState(Bundle out) { public void onSaveInstanceState(Bundle out) {
super.onSaveInstanceState(out); super.onSaveInstanceState(out);
out.setClassLoader(getClass().getClassLoader()); out.setClassLoader(getClass().getClassLoader());
out.putParcelable("article", m_article); out.putParcelable("article", m_article);
out.putParcelable("feed", m_feed); out.putParcelable("feed", m_feed);
out.putInt("firstId", m_firstId);
} }
@Override @Override

View File

@ -83,7 +83,7 @@ import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
public class HeadlinesFragment extends Fragment implements OnItemClickListener, OnScrollListener { public class HeadlinesFragment extends Fragment implements OnItemClickListener, OnScrollListener {
public static enum ArticlesSelection { ALL, NONE, UNREAD } public static enum ArticlesSelection { ALL, NONE, UNREAD }
public static final int FLAVOR_IMG_MIN_SIZE = 128; public static final int FLAVOR_IMG_MIN_SIZE = 128;
public static final int THUMB_IMG_MIN_SIZE = 32; public static final int THUMB_IMG_MIN_SIZE = 32;
@ -102,7 +102,8 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
private String m_searchQuery = ""; private String m_searchQuery = "";
private boolean m_refreshInProgress = false; private boolean m_refreshInProgress = false;
private boolean m_autoCatchupDisabled = false; private boolean m_autoCatchupDisabled = false;
private int m_firstId = 0;
private SharedPreferences m_prefs; private SharedPreferences m_prefs;
private ArticleListAdapter m_adapter; private ArticleListAdapter m_adapter;
@ -349,6 +350,7 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
//m_selectedArticles = savedInstanceState.getParcelable("selectedArticles"); //m_selectedArticles = savedInstanceState.getParcelable("selectedArticles");
m_searchQuery = (String) savedInstanceState.getCharSequence("searchQuery"); m_searchQuery = (String) savedInstanceState.getCharSequence("searchQuery");
m_compactLayoutMode = savedInstanceState.getBoolean("compactLayoutMode"); m_compactLayoutMode = savedInstanceState.getBoolean("compactLayoutMode");
m_firstId = savedInstanceState.getInt("firstId");
} }
String headlineMode = m_prefs.getString("headline_mode", "HL_DEFAULT"); String headlineMode = m_prefs.getString("headline_mode", "HL_DEFAULT");
@ -545,10 +547,12 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
if (m_articles.indexOf(m_activeArticle) == -1) if (m_articles.indexOf(m_activeArticle) == -1)
m_activeArticle = null; m_activeArticle = null;
if (m_topIdChanged) { if (m_firstIdChanged) {
m_articles.add(new Article(ARTICLE_SPECIAL_TOP_CHANGED)); m_articles.add(new Article(ARTICLE_SPECIAL_TOP_CHANGED));
} }
HeadlinesFragment.this.m_firstId = m_firstId;
m_adapter.notifyDataSetChanged(); m_adapter.notifyDataSetChanged();
m_listener.onHeadlinesLoaded(fappend); m_listener.onHeadlinesLoaded(fappend);
@ -608,16 +612,6 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
req.setOffset(skip); req.setOffset(skip);
final int checkTopId;
if (skip != 0 && m_articles.size() > 1) {
// m_articles[0] is the special spacer (id -2)
//Log.d(TAG, "TOPID:" + m_articles.get(1).id);
checkTopId = m_articles.get(1).id;
} else {
checkTopId = 0;
}
HashMap<String,String> map = new HashMap<String,String>() { HashMap<String,String> map = new HashMap<String,String>() {
{ {
put("op", "getHeadlines"); put("op", "getHeadlines");
@ -647,7 +641,7 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
put("match_on", "both"); put("match_on", "both");
} }
if (checkTopId > 0) put("check_top_id", String.valueOf(checkTopId)); if (m_firstId > 0) put("check_first_id", String.valueOf(m_firstId));
if (m_activity.getApiLevel() >= 12) { if (m_activity.getApiLevel() >= 12) {
put("include_header", "true"); put("include_header", "true");
@ -655,7 +649,7 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
} }
}; };
Log.d(TAG, "[HP] request more headlines, topId=" + checkTopId); Log.d(TAG, "[HP] request more headlines, firstId=" + m_firstId);
req.execute(map); req.execute(map);
} }
@ -672,6 +666,7 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
//out.putParcelable("selectedArticles", m_selectedArticles); //out.putParcelable("selectedArticles", m_selectedArticles);
out.putCharSequence("searchQuery", m_searchQuery); out.putCharSequence("searchQuery", m_searchQuery);
out.putBoolean("compactLayoutMode", m_compactLayoutMode); out.putBoolean("compactLayoutMode", m_compactLayoutMode);
out.putInt("firstId", m_firstId);
} }
static class HeadlineViewHolder { static class HeadlineViewHolder {

View File

@ -15,7 +15,6 @@ import org.fox.ttrss.OnlineActivity;
import org.fox.ttrss.types.Article; import org.fox.ttrss.types.Article;
import org.fox.ttrss.types.ArticleList; import org.fox.ttrss.types.ArticleList;
import org.fox.ttrss.types.Feed; import org.fox.ttrss.types.Feed;
import org.json.JSONObject;
import java.lang.reflect.Type; import java.lang.reflect.Type;
import java.util.List; import java.util.List;
@ -31,7 +30,8 @@ public class HeadlinesRequest extends ApiRequest {
private ArticleList m_articles; // = new ArticleList(); //Application.getInstance().m_loadedArticles; private ArticleList m_articles; // = new ArticleList(); //Application.getInstance().m_loadedArticles;
private Feed m_feed; private Feed m_feed;
protected boolean m_topIdChanged = false; protected boolean m_firstIdChanged = false;
protected int m_firstId = 0;
public HeadlinesRequest(Context context, OnlineActivity activity, final Feed feed, ArticleList articles) { public HeadlinesRequest(Context context, OnlineActivity activity, final Feed feed, ArticleList articles) {
super(context); super(context);
@ -61,7 +61,10 @@ public class HeadlinesRequest extends ApiRequest {
//Log.d(TAG, "headerID:" + header.get("top_id_changed")); //Log.d(TAG, "headerID:" + header.get("top_id_changed"));
m_topIdChanged = header.get("top_id_changed") != null; m_firstIdChanged = header.get("first_id_changed") != null;
m_firstId = header.get("first_id").getAsInt();
Log.d(TAG, "firstID=" + m_firstId + " firstIdChanged=" + m_firstIdChanged);
Type listType = new TypeToken<List<Article>>() {}.getType(); Type listType = new TypeToken<List<Article>>() {}.getType();
articles = new Gson().fromJson(content.get(1), listType); articles = new Gson().fromJson(content.get(1), listType);