From 4083904781a84f99454e9b4b2607f4cf2e081376 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Sun, 12 Jul 2015 13:18:59 +0300 Subject: [PATCH] show top changed message in articlepager --- .../java/org/fox/ttrss/ArticleFragment.java | 17 +++++++++-- .../main/java/org/fox/ttrss/ArticlePager.java | 12 +++++++- .../java/org/fox/ttrss/HeadlinesFragment.java | 25 ++++++++++++---- .../java/org/fox/ttrss/OnlineActivity.java | 2 +- .../org/fox/ttrss/util/HeadlinesRequest.java | 29 ++++++++++++++++--- .../src/main/res/layout/fragment_article.xml | 8 +++++ .../res/layout/headlines_row_top_changed.xml | 18 ++++++++++++ org.fox.ttrss/src/main/res/values/strings.xml | 1 + 8 files changed, 98 insertions(+), 14 deletions(-) create mode 100644 org.fox.ttrss/src/main/res/layout/headlines_row_top_changed.xml diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleFragment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleFragment.java index de604dda..98d721f2 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleFragment.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleFragment.java @@ -183,6 +183,17 @@ public class ArticleFragment extends Fragment { m_contentView = view.findViewById(R.id.article_scrollview); m_customViewContainer = (FrameLayout) view.findViewById(R.id.article_fullscreen_video); + if (m_article.id == HeadlinesFragment.ARTICLE_SPECIAL_TOP_CHANGED) { + TextView statusMessage = (TextView) view.findViewById(R.id.article_status_message); + statusMessage.setText(R.string.headlines_row_top_changed); + statusMessage.setVisibility(View.VISIBLE); + + view.findViewById(R.id.article_scrollview).setVisibility(View.GONE); + view.findViewById(R.id.article_fab).setVisibility(View.GONE); + + return view; + } + NotifyingScrollView scrollView = (NotifyingScrollView) view.findViewById(R.id.article_scrollview); m_fab = view.findViewById(R.id.article_fab); @@ -422,7 +433,7 @@ public class ArticleFragment extends Fragment { } protected void renderContent(Bundle savedInstanceState) { - if (!isAdded()) return; + if (!isAdded() || m_web == null) return; Log.d(TAG, "renderContent: " + m_article.title); @@ -545,14 +556,14 @@ public class ArticleFragment extends Fragment { public void onPause() { super.onPause(); - m_web.onPause(); + if (m_web != null) m_web.onPause(); } @Override public void onResume() { super.onResume(); - m_web.onResume(); + if (m_web != null) m_web.onResume(); } public boolean inCustomView() { diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticlePager.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticlePager.java index 70fb30e1..f94183a6 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticlePager.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticlePager.java @@ -155,6 +155,11 @@ public class ArticlePager extends Fragment { super.onPostExecute(result); if (result != null) { + + if (m_topIdChanged) { + m_articles.add(new Article(HeadlinesFragment.ARTICLE_SPECIAL_TOP_CHANGED)); + } + try { m_adapter.notifyDataSetChanged(); } catch (BadParcelableException e) { @@ -172,7 +177,7 @@ public class ArticlePager extends Fragment { } } } - + } else { if (m_lastError == ApiError.LOGIN_FAILED) { m_activity.login(true); @@ -254,6 +259,11 @@ public class ArticlePager extends Fragment { } if (checkTopId > 0) put("check_top_id", String.valueOf(checkTopId)); + + if (m_activity.getApiLevel() >= 12) { + put("include_header", "true"); + } + } }; 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 8cc9e468..bfe74622 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 @@ -93,6 +93,7 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener, public static final int ARTICLE_SPECIAL_LOADMORE = -1; public static final int ARTICLE_SPECIAL_SPACER = -2; + public static final int ARTICLE_SPECIAL_TOP_CHANGED = -3; private final String TAG = this.getClass().getSimpleName(); @@ -390,7 +391,7 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener, View layout = inflater.inflate(R.layout.headlines_footer, container, false); - layout.setLayoutParams(new ListView.LayoutParams(ListView.LayoutParams.MATCH_PARENT, screenHeight)); + layout.setLayoutParams(new ListView.LayoutParams(ListView.LayoutParams.MATCH_PARENT, screenHeight)); m_list.addFooterView(layout, null, false); } @@ -539,11 +540,15 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener, if (result != null) { m_refreshInProgress = false; - m_articles.add(0, new Article(-2)); + m_articles.add(0, new Article(ARTICLE_SPECIAL_SPACER)); if (m_articles.indexOf(m_activeArticle) == -1) m_activeArticle = null; + if (m_topIdChanged) { + m_articles.add(new Article(ARTICLE_SPECIAL_TOP_CHANGED)); + } + m_adapter.notifyDataSetChanged(); m_listener.onHeadlinesLoaded(fappend); @@ -551,7 +556,7 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener, // top headline content becomes partially obscured by the toolbar on phones // (not reproducible on avd) if (!fappend) m_list.smoothScrollToPosition(0); - + } else { if (m_lastError == ApiError.LOGIN_FAILED) { m_activity.login(true); @@ -643,6 +648,10 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener, } if (checkTopId > 0) put("check_top_id", String.valueOf(checkTopId)); + + if (m_activity.getApiLevel() >= 12) { + put("include_header", "true"); + } } }; @@ -695,8 +704,9 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener, 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_TOP_CHANGED = 6; - public static final int VIEW_COUNT = VIEW_SPACER+1; + public static final int VIEW_COUNT = VIEW_TOP_CHANGED+1; private final Integer[] origTitleColors = new Integer[VIEW_COUNT]; private final int titleHighScoreUnreadColor; @@ -754,6 +764,8 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener, if (a.id == ARTICLE_SPECIAL_LOADMORE) { return VIEW_LOADMORE; + } else if (a.id == ARTICLE_SPECIAL_TOP_CHANGED) { + return VIEW_TOP_CHANGED; } else if (a.id == ARTICLE_SPECIAL_SPACER) { return VIEW_SPACER; } else if (m_activeArticle != null && a.id == m_activeArticle.id && a.unread) { @@ -858,6 +870,9 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener, case VIEW_SPACER: layoutId = R.layout.fragment_dummy; break; + case VIEW_TOP_CHANGED: + layoutId = R.layout.headlines_row_top_changed; + break; case VIEW_UNREAD: layoutId = m_compactLayoutMode ? R.layout.headlines_row_unread_compact : R.layout.headlines_row_unread; break; @@ -1705,7 +1720,7 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener, public void setArticles(ArticleList articles) { m_articles.clear(); - m_articles.add(0, new Article(-2)); + m_articles.add(0, new Article(ARTICLE_SPECIAL_SPACER)); m_articles.addAll(articles); m_adapter.notifyDataSetChanged(); } diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/OnlineActivity.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/OnlineActivity.java index 8d337b26..45fb1e13 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/OnlineActivity.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/OnlineActivity.java @@ -1246,7 +1246,7 @@ public class OnlineActivity extends CommonActivity { return true; } - protected int getApiLevel() { + public int getApiLevel() { return Application.getInstance().m_apiLevel; } 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 453f5f50..1c168b8c 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 @@ -1,10 +1,12 @@ package org.fox.ttrss.util; import android.content.Context; +import android.util.Log; import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonElement; +import com.google.gson.JsonObject; import com.google.gson.reflect.TypeToken; import org.fox.ttrss.ApiRequest; @@ -13,6 +15,7 @@ import org.fox.ttrss.OnlineActivity; import org.fox.ttrss.types.Article; import org.fox.ttrss.types.ArticleList; import org.fox.ttrss.types.Feed; +import org.json.JSONObject; import java.lang.reflect.Type; import java.util.List; @@ -27,7 +30,9 @@ public class HeadlinesRequest extends ApiRequest { private OnlineActivity m_activity; private ArticleList m_articles; // = new ArticleList(); //Application.getInstance().m_loadedArticles; private Feed m_feed; - + + protected boolean m_topIdChanged = false; + public HeadlinesRequest(Context context, OnlineActivity activity, final Feed feed, ArticleList articles) { super(context); @@ -48,9 +53,25 @@ public class HeadlinesRequest extends ApiRequest { JsonArray content = result.getAsJsonArray(); if (content != null) { - Type listType = new TypeToken>() {}.getType(); - final List
articles = new Gson().fromJson(content, listType); - + final List
articles; + final JsonObject header; + + if (m_activity.getApiLevel() >= 12) { + header = content.get(0).getAsJsonObject(); + + //Log.d(TAG, "headerID:" + header.get("top_id_changed")); + + m_topIdChanged = header.get("top_id_changed") != null; + + Type listType = new TypeToken>() {}.getType(); + articles = new Gson().fromJson(content.get(1), listType); + } else { + header = null; + + Type listType = new TypeToken>() {}.getType(); + articles = new Gson().fromJson(content, listType); + } + if (m_offset == 0) { m_articles.clear(); } else { diff --git a/org.fox.ttrss/src/main/res/layout/fragment_article.xml b/org.fox.ttrss/src/main/res/layout/fragment_article.xml index 4a1709b4..04fd22b2 100644 --- a/org.fox.ttrss/src/main/res/layout/fragment_article.xml +++ b/org.fox.ttrss/src/main/res/layout/fragment_article.xml @@ -154,4 +154,12 @@ android:src="@drawable/ic_action_web_site" /> + + \ No newline at end of file diff --git a/org.fox.ttrss/src/main/res/layout/headlines_row_top_changed.xml b/org.fox.ttrss/src/main/res/layout/headlines_row_top_changed.xml new file mode 100644 index 00000000..34a81fd6 --- /dev/null +++ b/org.fox.ttrss/src/main/res/layout/headlines_row_top_changed.xml @@ -0,0 +1,18 @@ + + + + + + + \ No newline at end of file diff --git a/org.fox.ttrss/src/main/res/values/strings.xml b/org.fox.ttrss/src/main/res/values/strings.xml index a1035a6c..14e79f6d 100755 --- a/org.fox.ttrss/src/main/res/values/strings.xml +++ b/org.fox.ttrss/src/main/res/values/strings.xml @@ -232,4 +232,5 @@ Open video (more images...) + New articles found, reload feed to continue.