summaryrefslogtreecommitdiff
path: root/org.fox.ttrss
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2015-07-12 13:18:59 +0300
committerAndrew Dolgov <[email protected]>2015-07-12 13:18:59 +0300
commit4083904781a84f99454e9b4b2607f4cf2e081376 (patch)
tree7c6f9dd20a06ba0c485eb292984ed9f8579e2c62 /org.fox.ttrss
parent32c0691d5d68c7890bb973f6754b57d6541e937a (diff)
show top changed message in articlepager
Diffstat (limited to 'org.fox.ttrss')
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/ArticleFragment.java17
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/ArticlePager.java12
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java25
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/OnlineActivity.java2
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/util/HeadlinesRequest.java29
-rw-r--r--org.fox.ttrss/src/main/res/layout/fragment_article.xml8
-rw-r--r--org.fox.ttrss/src/main/res/layout/headlines_row_top_changed.xml18
-rwxr-xr-xorg.fox.ttrss/src/main/res/values/strings.xml1
8 files changed, 98 insertions, 14 deletions
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<List<Article>>() {}.getType();
- final List<Article> articles = new Gson().fromJson(content, listType);
-
+ final List<Article> 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<List<Article>>() {}.getType();
+ articles = new Gson().fromJson(content.get(1), listType);
+ } else {
+ header = null;
+
+ Type listType = new TypeToken<List<Article>>() {}.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"
/>
+ <TextView
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:text="[status message]"
+ android:id="@+id/article_status_message"
+ android:gravity="center"
+ android:visibility="gone" />
+
</FrameLayout> \ 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 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/headlines_row_top_changed"
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:gravity="center"
+ android:padding="16dp"
+ android:orientation="horizontal" >
+
+
+ <TextView
+ android:id="@+id/top_changed_label"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textColor="?headlineExcerptTextColor"
+ android:text="@string/headlines_row_top_changed" />
+
+</LinearLayout> \ 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 @@
<string name="video_player_open">Open video</string>
<string name="flavor_image_prompt">(more images...)</string>
+ <string name="headlines_row_top_changed">New articles found, reload feed to continue.</string>
</resources>