summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java26
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/OnlineActivity.java68
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/types/Article.java10
3 files changed, 66 insertions, 38 deletions
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 215c379e..0595c2ee 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
@@ -380,6 +380,15 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
if (newState == RecyclerView.SCROLL_STATE_IDLE && m_prefs.getBoolean("headlines_mark_read_scroll", false)) {
if (!m_readArticles.isEmpty()) {
m_activity.toggleArticlesUnread(m_readArticles);
+
+ for (Article a : m_readArticles)
+ a.unread = false;
+
+ if (m_feed != null)
+ m_feed.unread -= m_readArticles.size();
+
+ m_adapter.notifyDataSetChanged();
+
m_readArticles.clear();
new Handler().postDelayed(() -> m_activity.refresh(false), 100);
@@ -394,20 +403,17 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
int firstVisibleItem = m_layoutManager.findFirstVisibleItemPosition();
int lastVisibleItem = m_layoutManager.findLastVisibleItemPosition();
- //Log.d(TAG, "onScrolled: FVI=" + firstVisibleItem + " LVI=" + lastVisibleItem);
+ // Log.d(TAG, "onScrolled: FVI=" + firstVisibleItem + " LVI=" + lastVisibleItem);
- if (m_prefs.getBoolean("headlines_mark_read_scroll", false) && firstVisibleItem > 0) {
+ if (m_prefs.getBoolean("headlines_mark_read_scroll", false)) {
- if (firstVisibleItem <= Application.getArticles().size()) {
+ for (int i = 0; i < firstVisibleItem; i++) {
+ Article article = getArticleAtPosition(i);
- Article a = getArticleAtPosition(firstVisibleItem);
+ if (article.unread && !m_readArticles.contains(article)) {
+ Log.d(TAG, "adding to mark read=" + article.title);
- if (a != null && a.unread) {
- Log.d(TAG, "title=" + a.title);
-
- a.unread = false;
- m_readArticles.add(a);
- if (m_feed != null) m_feed.unread--;
+ m_readArticles.add(article);
}
}
}
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 04629561..b2b955c0 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
@@ -1037,46 +1037,58 @@ article.score = Integer.parseInt(edit.getText().toString());
req.execute(map);
}
-
- public void toggleArticlesMarked(final ArticleList articles) {
- ApiRequest req = new ApiRequest(getApplicationContext());
- HashMap<String, String> map = new HashMap<>();
- map.put("sid", getSessionId());
- map.put("op", "updateArticle");
- map.put("article_ids", articles.getAsCommaSeparatedIds());
- map.put("mode", "2");
- map.put("field", "0");
+ public void toggleArticlesMarked(final ArticleList articles) {
+ setArticlesMarked(articles, Article.UPDATE_TOGGLE);
+ }
- req.execute(map);
+ public void setArticlesMarked(final ArticleList articles, int mode) {
+ ApiRequest req = new ApiRequest(getApplicationContext());
+
+ setArticleField(articles, Article.UPDATE_FIELD_MARKED, mode);
}
- public void toggleArticlesUnread(final ArticleList articles) {
+ public void toggleArticlesUnread(final ArticleList articles) {
+ setArticlesUnread(articles, Article.UPDATE_FIELD_UNREAD);
+ }
+
+ public void setArticlesUnread(final ArticleList articles, int mode) {
ApiRequest req = new ApiRequest(getApplicationContext());
- HashMap<String, String> map = new HashMap<>();
- map.put("sid", getSessionId());
- map.put("op", "updateArticle");
- map.put("article_ids", articles.getAsCommaSeparatedIds());
- map.put("mode", "2");
- map.put("field", "2");
+ setArticleField(articles, Article.UPDATE_FIELD_UNREAD, mode);
+ }
- req.execute(map);
- //refresh();
+ public void toggleArticlesPublished(final ArticleList articles) {
+ setArticlesPublished(articles, Article.UPDATE_TOGGLE);
+ }
+
+ public void setArticlesPublished(final ArticleList articles, int mode) {
+ setArticleField(articles, Article.UPDATE_FIELD_PUBLISHED, mode);
}
- public void toggleArticlesPublished(final ArticleList articles) {
- ApiRequest req = new ApiRequest(getApplicationContext());
+ public void setArticleField(final ArticleList articles, int field, int mode) {
+ ApiRequest req = new ApiRequest(getApplicationContext()) {
+ protected void onPostExecute(JsonElement result) {
+ Log.d(TAG, "setArticleField operation complete");
- HashMap<String, String> map = new HashMap<>();
- map.put("sid", getSessionId());
- map.put("op", "updateArticle");
+ HeadlinesFragment hf = (HeadlinesFragment) getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES);
+ if (hf != null) hf.notifyUpdated();
+
+ ArticlePager ap = (ArticlePager) getSupportFragmentManager().findFragmentByTag(FRAG_ARTICLE);
+ if (ap != null) ap.notifyUpdated();
+ }
+ };
+
+ HashMap<String, String> map = new HashMap<>();
+ map.put("sid", getSessionId());
+ map.put("op", "updateArticle");
map.put("article_ids", articles.getAsCommaSeparatedIds());
- map.put("mode", "2");
- map.put("field", "1");
+ map.put("mode", String.valueOf(mode));
+ map.put("field", String.valueOf(field));
- req.execute(map);
- }
+ req.execute(map);
+
+ }
// this may be called after activity has been destroyed (i.e. long asynctask)
protected void initMenu() {
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/types/Article.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/types/Article.java
index f66df08d..5ea8c61f 100755
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/types/Article.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/types/Article.java
@@ -24,6 +24,16 @@ public class Article implements Parcelable {
public static final int SCORE_LOW = -500;
public static final int SCORE_HIGH = 500;
+ public static final int UPDATE_FIELD_MARKED = 0;
+ public static final int UPDATE_FIELD_PUBLISHED = 1;
+ public static final int UPDATE_FIELD_UNREAD = 2;
+ public static final int UPDATE_FIELD_NOTE = 3;
+ public static final int UPDATE_FIELD_SCORE = 4;
+
+ public static final int UPDATE_SET_FALSE = 0;
+ public static final int UPDATE_SET_TRUE = 1;
+ public static final int UPDATE_TOGGLE = 2;
+
public int id;
public boolean unread;
public boolean marked;