summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Dolgov <fox@fakecake.org>2025-05-13 15:50:50 +0300
committerAndrew Dolgov <fox@fakecake.org>2025-05-13 15:50:50 +0300
commit53031bc50daeef1eef30a13ca580bb133738afef (patch)
tree98255c46197f6701a180cfc988632819ebf085d9
parent36335a93484ac3d5fb2dd128fbea51dc387a3e23 (diff)
use diffutil to sync articlepager to shared article list on headlines load
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/ArticlePager.java32
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/DetailActivity.java2
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java10
3 files changed, 34 insertions, 10 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 6069591f..016bc370 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
@@ -10,11 +10,14 @@ import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
+import androidx.recyclerview.widget.DiffUtil;
import androidx.viewpager2.adapter.FragmentStateAdapter;
import androidx.viewpager2.widget.ViewPager2;
import org.fox.ttrss.types.Article;
+import org.fox.ttrss.types.ArticleList;
import org.fox.ttrss.types.Feed;
+import org.fox.ttrss.util.HeadlinesDiffUtilCallback;
public class ArticlePager extends androidx.fragment.app.Fragment {
@@ -27,15 +30,31 @@ public class ArticlePager extends androidx.fragment.app.Fragment {
private ViewPager2 m_pager;
private static class PagerAdapter extends FragmentStateAdapter {
+ private ArticleList m_articles = new ArticleList();
- public PagerAdapter(@NonNull Fragment fragment) {
+ public PagerAdapter(@NonNull Fragment fragment, ArticleList initialArticles) {
super(fragment);
+
+ m_articles.clear();
+ m_articles.addAll(initialArticles);
+ }
+
+ private void syncToSharedArticles() {
+ ArticleList tmp = new ArticleList();
+ tmp.addAll(Application.getArticles());
+
+ DiffUtil.DiffResult diffResult = DiffUtil.calculateDiff(new HeadlinesDiffUtilCallback(m_articles, tmp));
+
+ diffResult.dispatchUpdatesTo(this);
+
+ m_articles.clear();
+ m_articles.addAll(tmp);
}
@Override
@NonNull
public Fragment createFragment(int position) {
- Article article = Application.getArticles().get(position);
+ Article article = m_articles.get(position);
ArticleFragment af = new ArticleFragment();
af.initialize(article);
@@ -45,7 +64,7 @@ public class ArticlePager extends androidx.fragment.app.Fragment {
@Override
public int getItemCount() {
- return Application.getArticles().size();
+ return m_articles.size();
}
}
@@ -79,7 +98,7 @@ public class ArticlePager extends androidx.fragment.app.Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_article_pager, container, false);
- m_adapter = new PagerAdapter(this);
+ m_adapter = new PagerAdapter(this, Application.getArticles());
m_pager = view.findViewById(R.id.article_pager);
@@ -170,4 +189,9 @@ public class ArticlePager extends androidx.fragment.app.Fragment {
public void notifyUpdated() {
m_adapter.notifyDataSetChanged();
}
+
+ public void syncToSharedArticles() {
+ if (m_adapter != null)
+ m_adapter.syncToSharedArticles();
+ }
}
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 e97d6cc6..b0f5796d 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
@@ -300,7 +300,7 @@ public class DetailActivity extends OnlineActivity implements HeadlinesEventList
ArticlePager ap = (ArticlePager) getSupportFragmentManager().findFragmentByTag(FRAG_ARTICLE);
if (ap != null) {
- ap.notifyUpdated();
+ ap.syncToSharedArticles();
}
if (hf != null) {
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 6e6cb472..d233e87f 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
@@ -793,13 +793,13 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment implements
holder.view.setOnClickListener(v -> {
m_listener.onArticleSelected(article);
- setActiveArticleId(article.id);
// only set active article when it makes sense (in DetailActivity)
- //if (getActivity() instanceof DetailActivity) {
- //m_activeArticleId = article.id;
- //m_adapter.notifyDataSetChanged();
- //}
+ if (getActivity() instanceof DetailActivity) {
+ m_activeArticleId = article.id;
+
+ m_adapter.notifyItemChanged(position);
+ }
});
// block footer clicks to make button/selection clicking easier