summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Dolgov <fox@fakecake.org>2025-05-13 13:06:03 +0300
committerAndrew Dolgov <fox@fakecake.org>2025-05-13 13:06:03 +0300
commitf29c0e06b0c77102898a64ce191ea9f184d8fd3a (patch)
tree0063c50a027cbfe0716632aa3f60000bfd869d71
parentd39e4a85a666a8a4e256b334bdf476801faea28d (diff)
better deal with headlines not refreshing in masteractivity when going back from detail activity
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/ArticlePager.java38
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java40
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesLoader.java6
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();