From 6a4940666a05191210dbf5732baa53ca5f94e2af Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Sun, 18 May 2025 16:09:50 +0300 Subject: use observable in a few more places, switch article display mode without reload --- .../src/main/java/org/fox/ttrss/ArticleModel.java | 6 ++ .../main/java/org/fox/ttrss/HeadlinesFragment.java | 23 ++---- .../main/java/org/fox/ttrss/OnlineActivity.java | 81 ++++++++++++---------- 3 files changed, 57 insertions(+), 53 deletions(-) diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleModel.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleModel.java index 2b596828..b1f99208 100644 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleModel.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleModel.java @@ -70,6 +70,12 @@ public class ArticleModel extends AndroidViewModel implements ApiCommon.ApiCalle return m_articles; } + public void updateById(@NonNull Article article) { + int position = m_articles.getValue().getPositionById(article.id); + + if (position != -1) + update(position, article); + } public void update(int position, Article article) { m_articles.getValue().set(position, article); 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 197a48bd..3d923494 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 @@ -134,11 +134,6 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { } public void initialize(Feed feed) { - - // clear loaded headlines before switching feed - if (m_feed == null || feed.id != m_feed.id || feed.is_cat != m_feed.is_cat) - Application.getArticlesModel().update(new ArticleList()); - m_feed = feed; } @@ -219,10 +214,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { articleClone.unread = false; tmp.add(articleClone); - int position = articles.getPositionById(articleClone.id); - - if (position != -1) - Application.getArticlesModel().update(position, articleClone); + Application.getArticlesModel().updateById(articleClone); } } @@ -438,10 +430,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { articleClone.unread = false; - int position = Application.getArticles().getPositionById(a.id); - - if (position != -1) - Application.getArticlesModel().update(position, articleClone); + Application.getArticlesModel().updateById(articleClone); } m_readArticles.clear(); @@ -602,8 +591,10 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { if (m_activity instanceof DetailActivity && !append) return; - if (!append) + if (!append) { m_activeArticleId = -1; + Application.getArticlesModel().update(new ArticleList()); + } model.setSearchQuery(getSearchQuery()); model.startLoading(append, m_feed, m_activity.getResizeWidth()); @@ -664,10 +655,6 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { attachmentsView = v.findViewById(R.id.attachments); linkHost = v.findViewById(R.id.link_host); } - - public void clearAnimation() { - view.clearAnimation(); - } } private static class FlavorProgressTarget extends ProgressTarget { 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 b0979d5b..566aee2d 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 @@ -570,8 +570,6 @@ public class OnlineActivity extends CommonActivity { if (selectedArticle != null) { setArticleScore(selectedArticle); - - hf.notifyItemChanged(Application.getArticles().indexOf(selectedArticle)); } } return true; @@ -580,11 +578,13 @@ public class OnlineActivity extends CommonActivity { Article selectedArticle = Application.getArticles().getById(ap.getSelectedArticleId()); if (selectedArticle != null) { - selectedArticle.marked = !selectedArticle.marked; + Article articleClone = new Article(selectedArticle); + + articleClone.marked = !articleClone.marked; saveArticleMarked(selectedArticle); - hf.notifyItemChanged(Application.getArticles().indexOf(selectedArticle)); + Application.getArticlesModel().updateById(articleClone); } } return true; @@ -593,11 +593,13 @@ public class OnlineActivity extends CommonActivity { Article selectedArticle = Application.getArticles().getById(ap.getSelectedArticleId()); if (selectedArticle != null) { - selectedArticle.unread = !selectedArticle.unread; + Article articleClone = new Article(selectedArticle); + + articleClone.unread = !articleClone.unread; saveArticleUnread(selectedArticle); - hf.notifyItemChanged(Application.getArticles().indexOf(selectedArticle)); + Application.getArticlesModel().updateById(articleClone); } } return true; @@ -607,9 +609,11 @@ public class OnlineActivity extends CommonActivity { if (!selected.isEmpty()) { for (Article a : selected) { - a.unread = !a.unread; + Article articleClone = new Article(a); - hf.notifyItemChanged(Application.getArticles().indexOf(a)); + articleClone.unread = !articleClone.unread; + + Application.getArticlesModel().updateById(articleClone); } toggleArticlesUnread(selected); @@ -623,9 +627,11 @@ public class OnlineActivity extends CommonActivity { if (!selected.isEmpty()) { for (Article a : selected) { - a.marked = !a.marked; + Article articleClone = new Article(a); + + articleClone.marked = !articleClone.marked; - hf.notifyItemChanged(Application.getArticles().indexOf(a)); + Application.getArticlesModel().updateById(articleClone); } toggleArticlesMarked(selected); @@ -639,9 +645,11 @@ public class OnlineActivity extends CommonActivity { if (!selected.isEmpty()) { for (Article a : selected) { - a.published = !a.published; + Article articleClone = new Article(a); + + articleClone.published = !articleClone.published; - hf.notifyItemChanged(Application.getArticles().indexOf(a)); + Application.getArticlesModel().updateById(articleClone); } toggleArticlesPublished(selected); @@ -654,10 +662,12 @@ public class OnlineActivity extends CommonActivity { Article selectedArticle = Application.getArticles().getById(ap.getSelectedArticleId()); if (selectedArticle != null) { - selectedArticle.published = !selectedArticle.published; - saveArticlePublished(selectedArticle); + Article articleClone = new Article(selectedArticle); - hf.notifyItemChanged(Application.getArticles().indexOf(selectedArticle)); + articleClone.published = !articleClone.published; + saveArticlePublished(articleClone); + + Application.getArticlesModel().updateById(articleClone); } } return true; @@ -707,15 +717,14 @@ public class OnlineActivity extends CommonActivity { if (a.id == selectedArticleId) break; - if (a.unread) { - a.unread = false; - tmp.add(a); + Article articleClone = new Article(a); + + if (articleClone.unread) { + articleClone.unread = false; - if (hf != null) { - int position = Application.getArticles().indexOf(a); + tmp.add(articleClone); - hf.notifyItemChanged(position); - } + Application.getArticlesModel().updateById(articleClone); } } @@ -739,16 +748,6 @@ public class OnlineActivity extends CommonActivity { String note = topicEdit.getText().toString().trim(); saveArticleNote(article, note); - - int position = Application.getArticles().getPositionById(article.id); - - if (position != -1) { - HeadlinesFragment hf = (HeadlinesFragment) getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES); - if (hf != null) hf.notifyItemChanged(position); - - ArticlePager ap = (ArticlePager) getSupportFragmentManager().findFragmentByTag(FRAG_ARTICLE); - if (ap != null) ap.notifyItemChanged(position); - } }); builder.setNegativeButton(R.string.dialog_cancel, (dialog, which) -> { @@ -952,7 +951,11 @@ public class OnlineActivity extends CommonActivity { public void saveArticleNote(final Article article, final String note) { ApiRequest req = new ApiRequest(getApplicationContext()) { protected void onPostExecute(JsonElement result) { - article.note = note; + Article articleClone = new Article(article); + + articleClone.note = note; + + Application.getArticlesModel().updateById(articleClone); } }; @@ -983,9 +986,17 @@ public class OnlineActivity extends CommonActivity { (dialog, which) -> { try { -article.score = Integer.parseInt(edit.getText().toString()); + Article articleClone = new Article(article); + + articleClone.score = Integer.parseInt(edit.getText().toString()); + + saveArticleScore(articleClone); + + int position = Application.getArticles().getPositionById(articleClone.id); + + if (position != -1) + Application.getArticlesModel().update(position, articleClone); - saveArticleScore(article); } catch (NumberFormatException e) { toast(R.string.score_invalid); e.printStackTrace(); -- cgit v1.2.3-54-g00ecf