diff options
| author | Andrew Dolgov <fox@fakecake.org> | 2025-05-20 14:00:01 +0300 |
|---|---|---|
| committer | Andrew Dolgov <fox@fakecake.org> | 2025-05-20 14:00:01 +0300 |
| commit | 9e84fba288cd75f690b467fb3f94392109f8645d (patch) | |
| tree | 0eb0e02551ae18029e12dc1002e0484f99f1cbc4 /org.fox.ttrss/src | |
| parent | 988e050304b0578fe19ef33b7ab2bcff047a5033 (diff) | |
rely on equals() to find articles in lists
Diffstat (limited to 'org.fox.ttrss/src')
7 files changed, 31 insertions, 54 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 b1d5479a..1e004f99 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 @@ -52,7 +52,7 @@ public class ArticleModel extends AndroidViewModel implements ApiCommon.ApiCalle private Handler m_mainHandler = new Handler(Looper.getMainLooper()); private MutableLiveData<Long> m_lastUpdate = new MutableLiveData<>(Long.valueOf(0)); private MutableLiveData<Integer> m_loadingProgress = new MutableLiveData<>(Integer.valueOf(0)); - private MutableLiveData<Integer> m_activeArticleId = new MutableLiveData<>(Integer.valueOf(0)); + private MutableLiveData<Article> m_activeArticle = new MutableLiveData<>(null); public ArticleModel(@NonNull Application application) { super(application); @@ -71,8 +71,8 @@ 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); + public void update(@NonNull Article article) { + int position = m_articles.getValue().indexOf(article); if (position != -1) update(position, article); @@ -87,14 +87,12 @@ public class ArticleModel extends AndroidViewModel implements ApiCommon.ApiCalle m_articles.postValue(articles); } - public LiveData<Integer> getActive() { - return m_activeArticleId; + public LiveData<Article> getActive() { + return m_activeArticle; } public Article getActiveArticle() { - int activeId = m_activeArticleId.getValue(); - - return m_articles.getValue().getById(activeId); + return m_activeArticle.getValue(); } // we store .active flag in articleview for UI update and a separate observable for easy access @@ -107,18 +105,18 @@ public class ArticleModel extends AndroidViewModel implements ApiCommon.ApiCalle Article currentlyActiveClone = new Article(currentlyActive); currentlyActiveClone.active = false; - updateById(currentlyActiveClone); + update(currentlyActiveClone); } if (article != null) { Article articleClone = new Article(article); articleClone.active = true; - updateById(articleClone); + update(articleClone); - m_activeArticleId.postValue(articleClone.id); + m_activeArticle.postValue(articleClone); } else { - m_activeArticleId.postValue(0); + m_activeArticle.postValue(null); } } 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 13d68465..2a80eb03 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 @@ -86,11 +86,11 @@ public class ArticlePager extends androidx.fragment.app.Fragment { m_adapter.submitList(articles); }); - model.getActive().observe(getActivity(), (activeArticleId) -> { - Log.d(TAG, "observed active article=" + activeArticleId); + model.getActive().observe(getActivity(), (activeArticle) -> { + Log.d(TAG, "observed active article=" + activeArticle); - if (activeArticleId != null) { - int position = model.getArticles().getValue().getPositionById(activeArticleId); + if (activeArticle != null) { + int position = model.getArticles().getValue().indexOf(activeArticle); if (position != -1 && position != m_pager.getCurrentItem()) m_pager.setCurrentItem(position, false); diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/DetailActivity.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/DetailActivity.java index f336600e..63c46edd 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/DetailActivity.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/DetailActivity.java @@ -94,7 +94,7 @@ public class DetailActivity extends OnlineActivity implements HeadlinesEventList articleClone.unread = !articleClone.unread; saveArticleUnread(articleClone); - Application.getArticlesModel().updateById(articleClone); + Application.getArticlesModel().update(articleClone); } } 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 17e0231f..d51ab02a 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 @@ -196,7 +196,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { articleClone.unread = false; tmp.add(articleClone); - Application.getArticlesModel().updateById(articleClone); + Application.getArticlesModel().update(articleClone); } } @@ -410,7 +410,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { articleClone.unread = false; - Application.getArticlesModel().updateById(articleClone); + Application.getArticlesModel().update(articleClone); } m_readArticles.clear(); @@ -477,11 +477,11 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { }); // this gets notified if active article changes - model.getActive().observe(getActivity(), (activeArticleId) -> { - Log.d(TAG, "observed active article=" + activeArticleId); + model.getActive().observe(getActivity(), (activeArticle) -> { + Log.d(TAG, "observed active article=" + activeArticle); - if (activeArticleId > 0) { - scrollToArticleId(activeArticleId); + if (activeArticle != null) { + scrollToArticle(activeArticle); } }); @@ -912,7 +912,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { article.selected = cb.isChecked(); - Application.getArticlesModel().updateById(article); + Application.getArticlesModel().update(article); } }); } @@ -938,7 +938,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { Article article = new Article(getItem(position)); article.selected = !article.selected; - Application.getArticlesModel().updateById(article); + Application.getArticlesModel().update(article); } }); @@ -1592,16 +1592,13 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { } public void scrollToArticle(Article article) { - scrollToArticleId(article.id); - } - - public void scrollToArticleId(int id) { - int position = Application.getArticles().getPositionById(id); + int position = Application.getArticles().indexOf(article); if (position != -1) m_list.scrollToPosition(position); } + public Feed getFeed() { return m_feed; } diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/MasterActivity.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/MasterActivity.java index 4e71b90d..66bf8cf8 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/MasterActivity.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/MasterActivity.java @@ -478,12 +478,11 @@ public class MasterActivity extends OnlineActivity implements HeadlinesEventList HeadlinesFragment hf = (HeadlinesFragment) getSupportFragmentManager().findFragmentByTag(FRAG_HEADLINES); if (hf != null) { - // data might be null if detailactivity crashed - if (data != null) { - int activeArticleId = data.getIntExtra("activeArticleId", 0); + Article activeArticle = Application.getArticlesModel().getActiveArticle(); - Log.d(TAG, "got back from detail activity, scrolling to id=" + activeArticleId); - hf.scrollToArticleId(activeArticleId); + if (activeArticle != null) { + Log.d(TAG, "got back from detail activity, scrolling to active article=" + activeArticle); + hf.scrollToArticle(activeArticle); } } } 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 e3bb16f5..5a97976c 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 @@ -637,7 +637,7 @@ public class OnlineActivity extends CommonActivity { tmp.add(articleClone); - Application.getArticlesModel().updateById(articleClone); + Application.getArticlesModel().update(articleClone); } } @@ -1023,7 +1023,7 @@ public class OnlineActivity extends CommonActivity { if (BuildConfig.DEBUG) Log.d(TAG, "updating article: " + articleClone); - model.updateById(articleClone); + model.update(articleClone); } invalidateOptionsMenu(); diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/types/ArticleList.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/types/ArticleList.java index 65e16afd..da25882c 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/types/ArticleList.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/types/ArticleList.java @@ -50,23 +50,6 @@ public class ArticleList extends CopyOnWriteArrayList<Article> { return getSelected().size(); } - public int getPositionById(int id) { - for (int i = 0; i < size(); i++) { - if (get(i).id == id) { - return i; - } - } - - return -1; - } - - public Article getById(int id) { - for (Article a : this) { - if (a.id == id) - return a; - } - return null; - } public String getAsCommaSeparatedIds() { return this.stream().map(a -> String.valueOf(a.id)) .collect(Collectors.joining(",")); |