diff options
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; |