From f24a9b08d083c10064d01a405ad533ed6eefdc73 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Fri, 5 Jun 2015 23:32:28 +0300 Subject: headlines: add a special invisible listview item because listviewanimations seem to glitch if there's only 1 headline loaded reloading animations on every notifydatasetchanged, not sure why we do not pass this special headline to headlinesactivity --- .../main/java/org/fox/ttrss/HeadlinesFragment.java | 38 ++++++++++++++++------ .../java/org/fox/ttrss/util/HeadlinesRequest.java | 5 +-- 2 files changed, 31 insertions(+), 12 deletions(-) (limited to 'org.fox.ttrss/src/main/java') diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java index d2c95c2d..db76403c 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java @@ -80,6 +80,9 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener, public static final int HEADLINES_REQUEST_SIZE = 30; public static final int HEADLINES_BUFFER_MAX = 500; + public static final int ARTICLE_SPECIAL_LOADMORE = -1; + public static final int ARTICLE_SPECIAL_SPACER = -2; + private final String TAG = this.getClass().getSimpleName(); private Feed m_feed; @@ -514,10 +517,11 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener, if (result != null) { m_refreshInProgress = false; - + m_articles.add(0, new Article(-2)); + if (m_articles.indexOf(m_activeArticle) == -1) m_activeArticle = null; - + m_adapter.notifyDataSetChanged(); m_listener.onHeadlinesLoaded(fappend); @@ -650,8 +654,9 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener, public static final int VIEW_SELECTED = 2; public static final int VIEW_SELECTED_UNREAD = 3; public static final int VIEW_LOADMORE = 4; + public static final int VIEW_SPACER = 5; - public static final int VIEW_COUNT = VIEW_LOADMORE+1; + public static final int VIEW_COUNT = VIEW_SPACER+1; private final Integer[] origTitleColors = new Integer[VIEW_COUNT]; private final int titleHighScoreUnreadColor; @@ -684,9 +689,14 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener, @Override public int getItemViewType(int position) { Article a = items.get(position); - - if (a.id == -1) { + + // the special invisible SPACER is here because listview animations apparently glitch if there's only one headline loaded + // so we add an invisible second one i guess + + if (a.id == ARTICLE_SPECIAL_LOADMORE) { return VIEW_LOADMORE; + } else if (a.id == ARTICLE_SPECIAL_SPACER) { + return VIEW_SPACER; } else if (m_activeArticle != null && a.id == m_activeArticle.id && a.unread) { return VIEW_SELECTED_UNREAD; } else if (m_activeArticle != null && a.id == m_activeArticle.id) { @@ -730,6 +740,9 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener, case VIEW_LOADMORE: layoutId = R.layout.headlines_row_loadmore; break; + case VIEW_SPACER: + layoutId = R.layout.dummy_fragment; + break; case VIEW_UNREAD: layoutId = m_compactLayoutMode ? R.layout.headlines_row_unread_compact : R.layout.headlines_row_unread; break; @@ -1131,7 +1144,11 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener, } public ArticleList getAllArticles() { - return m_articles; + ArticleList tmp = (ArticleList) m_articles.clone(); + + tmp.remove(0); + + return tmp; } // if setting active doesn't make sense, scroll to whatever is passed to us @@ -1204,7 +1221,7 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener, @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { - if (!m_refreshInProgress && m_articles.findById(-1) != null && firstVisibleItem + visibleItemCount == m_articles.size()) { + if (!m_refreshInProgress && m_articles.findById(ARTICLE_SPECIAL_LOADMORE) != null && firstVisibleItem + visibleItemCount == m_articles.size()) { refresh(true); } @@ -1228,7 +1245,7 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener, m_activity.getSupportActionBar().show(); } } else { - m_activity.getSupportActionBar().show(); + m_activity.getSupportActionBar().show(); } m_listPreviousVisibleItem = firstVisibleItem; @@ -1289,12 +1306,13 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener, return m_feed; } - public ArticleList getArticles() { + /*public ArticleList getArticles() { return m_articles; - } + }*/ public void setArticles(ArticleList articles) { m_articles.clear(); + m_articles.add(0, new Article(-2)); m_articles.addAll(articles); m_adapter.notifyDataSetChanged(); } diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/util/HeadlinesRequest.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/util/HeadlinesRequest.java index 21b9c2b7..2d956284 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/util/HeadlinesRequest.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/util/HeadlinesRequest.java @@ -8,6 +8,7 @@ import com.google.gson.JsonElement; import com.google.gson.reflect.TypeToken; import org.fox.ttrss.ApiRequest; +import org.fox.ttrss.HeadlinesFragment; import org.fox.ttrss.OnlineActivity; import org.fox.ttrss.types.Article; import org.fox.ttrss.types.ArticleList; @@ -57,7 +58,7 @@ public class HeadlinesRequest extends ApiRequest { m_articles.remove(0); } - if (m_articles.get(m_articles.size()-1).id == -1) { + if (m_articles.get(m_articles.size()-1).id == HeadlinesFragment.ARTICLE_SPECIAL_LOADMORE) { m_articles.remove(m_articles.size()-1); // remove previous placeholder } @@ -68,7 +69,7 @@ public class HeadlinesRequest extends ApiRequest { m_articles.add(f); if (articles.size() == HEADLINES_REQUEST_SIZE) { - Article placeholder = new Article(-1); + Article placeholder = new Article(HeadlinesFragment.ARTICLE_SPECIAL_LOADMORE); m_articles.add(placeholder); } -- cgit v1.2.3