diff options
| author | Andrew Dolgov <fox@fakecake.org> | 2025-05-13 13:06:03 +0300 |
|---|---|---|
| committer | Andrew Dolgov <fox@fakecake.org> | 2025-05-13 13:06:03 +0300 |
| commit | f29c0e06b0c77102898a64ce191ea9f184d8fd3a (patch) | |
| tree | 0063c50a027cbfe0716632aa3f60000bfd869d71 | |
| parent | d39e4a85a666a8a4e256b334bdf476801faea28d (diff) | |
better deal with headlines not refreshing in masteractivity when going back from detail activity
3 files changed, 49 insertions, 35 deletions
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 b3ff916d..33f50a8e 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 @@ -39,20 +39,12 @@ public class ArticlePager extends androidx.fragment.app.Fragment { @Override @NonNull public Fragment createFragment(int position) { - try { - Article article = Application.getArticles().get(position); + Article article = Application.getArticles().get(position); - if (article != null) { - ArticleFragment af = new ArticleFragment(); - af.initialize(article); + ArticleFragment af = new ArticleFragment(); + af.initialize(article); - return af; - } - } catch (IndexOutOfBoundsException e) { - e.printStackTrace(); - } - - return null; + return af; } @Override @@ -95,25 +87,30 @@ public class ArticlePager extends androidx.fragment.app.Fragment { m_pager = view.findViewById(R.id.article_pager); - int position = Application.getArticles().getPositionById(m_articleId); - m_listener.onArticleSelected(Application.getArticles().getById(m_articleId), false); m_pager.setAdapter(m_adapter); m_pager.setOffscreenPageLimit(3); - m_pager.setCurrentItem(position, false); + int position = Application.getArticles().getPositionById(m_articleId); + + if (position != -1) + m_pager.setCurrentItem(position, false); + m_pager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() { @Override public void onPageSelected(int position) { Log.d(TAG, "onPageSelected: " + position); - final Article article = Application.getArticles().get(position); + // wtf + if (position != -1) { + Article article = Application.getArticles().get(position); - if (article != null) { - m_articleId = article.id; + if (article != null) { + m_articleId = article.id; - m_listener.onArticleSelected(article, false); + m_listener.onArticleSelected(article, false); + } } } }); @@ -140,7 +137,8 @@ public class ArticlePager extends androidx.fragment.app.Fragment { if (m_pager != null && articleId != m_articleId) { int position = Application.getArticles().getPositionById(articleId); - m_pager.setCurrentItem(position, false); + if (position != -1) + m_pager.setCurrentItem(position, false); } } 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 be72d52e..50c6eb0e 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 @@ -101,29 +101,30 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment implements Log.d(TAG, "onLoadFinished loader=" + loader + " size=" + (data != null ? data.size() : "N/A (null)")); HeadlinesLoader headlinesLoader = (HeadlinesLoader) loader; - //ArticleList sharedArticles = Application.getArticles(); // successful update if (data != null) { - // shared article list contains raw returned data without footers ArticleList sharedArticles = Application.getArticles(); sharedArticles.clear(); sharedArticles.addAll(data); + ArticleList tmp = new ArticleList(); + tmp.addAll(data); + // detail activity does not use footers if (!(m_activity instanceof DetailActivity)) { if (headlinesLoader.lazyLoadEnabled()) - data.add(new Article(Article.TYPE_LOADMORE)); + tmp.add(new Article(Article.TYPE_LOADMORE)); - data.add(new Article(Article.TYPE_AMR_FOOTER)); + tmp.add(new Article(Article.TYPE_AMR_FOOTER)); } - DiffUtil.DiffResult diffResult = DiffUtil.calculateDiff(new HeadlinesDiffutilCallback(m_articles, data)); + DiffUtil.DiffResult diffResult = DiffUtil.calculateDiff(new HeadlinesDiffutilCallback(m_articles, tmp)); m_articles.clear(); - m_articles.addAll(data); + m_articles.addAll(tmp); diffResult.dispatchUpdatesTo(m_adapter); @@ -479,7 +480,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment implements int lastVisibleItem = m_layoutManager.findLastVisibleItemPosition(); if (lastVisibleItem >= Application.getArticles().size() - 5) { - refresh(true); + new Handler().postDelayed(() -> refresh(true), 0); } } } @@ -528,6 +529,8 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment implements public void onResume() { super.onResume(); + syncToSharedArticles(); + if (Application.getArticles().getSizeWithoutFooters() == 0) { refresh(false); } else { @@ -560,7 +563,9 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment implements m_adapter.notifyItemRangeRemoved(0, size); m_articles.add(new Article(Article.TYPE_LOADMORE)); - m_adapter.notifyItemInserted(m_articles.size()); + m_articles.add(new Article(Article.TYPE_AMR_FOOTER)); + + m_adapter.notifyItemRangeInserted(0, m_articles.size()); } } @@ -1479,7 +1484,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment implements scrollToArticleId(articleId); if (newPosition >= articles.size() - 5) - refresh(true); + new Handler().postDelayed(() -> refresh(true), 0); } } @@ -1533,4 +1538,21 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment implements releaseSurface(); } + private void syncToSharedArticles() { + ArticleList tmp = new ArticleList(); + tmp.addAll(Application.getArticles()); + + if (m_loader != null && m_loader.lazyLoadEnabled()) + tmp.add(new Article(Article.TYPE_LOADMORE)); + + tmp.add(new Article(Article.TYPE_AMR_FOOTER)); + + DiffUtil.DiffResult diffResult = DiffUtil.calculateDiff(new HeadlinesDiffutilCallback(m_articles, tmp)); + + diffResult.dispatchUpdatesTo(m_adapter); + + m_articles.clear(); + m_articles.addAll(tmp); + } + } diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesLoader.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesLoader.java index 63a1bae4..6ff06975 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesLoader.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesLoader.java @@ -67,15 +67,11 @@ public class HeadlinesLoader extends AsyncTaskLoader<ArticleList> implements Api } else if (m_lazyLoadEnabled && !m_loadingInProgress) { m_append = true; forceLoad(); - /* } else { - deliverResult(m_articles); */ } } @Override public void deliverResult(ArticleList data) { - Log.d(TAG, "deliverResult=" + data); - super.deliverResult(data); } @@ -182,8 +178,6 @@ public class HeadlinesLoader extends AsyncTaskLoader<ArticleList> implements Api if (skip == 0) m_articles.clear(); - else - m_articles.stripFooters(); m_amountLoaded = articlesJson.size(); |