diff options
| author | Andrew Dolgov <fox@fakecake.org> | 2025-09-16 07:37:42 +0300 |
|---|---|---|
| committer | Andrew Dolgov <fox@fakecake.org> | 2025-09-16 07:37:42 +0300 |
| commit | 1018485aa0569df9e39a6d2460330b92ad0b78bd (patch) | |
| tree | d9a264016852f4d1c2a7218d4d2fa5057a965d65 /org.fox.ttrss/src/main/java/org | |
| parent | 72177b9a499bfce5cf98d51604412f32862a73ca (diff) | |
| parent | 02ba1c3b93adf3aeacae95527ce7b390306d4846 (diff) | |
Merge branch 'dev' into 'master'
stop storing Article as parcelable (store id instead), remove Parcelable...
See merge request tt-rss/tt-rss-android!56
Diffstat (limited to 'org.fox.ttrss/src/main/java/org')
4 files changed, 31 insertions, 86 deletions
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleFragment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleFragment.java index 40d3b6a5..ff6fa9a6 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleFragment.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/ArticleFragment.java @@ -83,7 +83,9 @@ public class ArticleFragment extends androidx.fragment.app.Fragment { super.onCreate(savedInstanceState); if (savedInstanceState != null) { - m_article = savedInstanceState.getParcelable("m_article"); + int articleId = savedInstanceState.getInt("m_articleId"); + + m_article = Application.getArticlesModel().getById(articleId); } } @@ -389,6 +391,6 @@ public class ArticleFragment extends androidx.fragment.app.Fragment { public void onSaveInstanceState(Bundle out) { super.onSaveInstanceState(out); - out.putParcelable("m_article", m_article); + out.putInt("m_articleId", m_article.id); } } 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 9f4d8e1f..309b01fa 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 @@ -431,4 +431,11 @@ public class ArticleModel extends AndroidViewModel implements ApiCommon.ApiCalle }).collect(Collectors.toList()); } + // returns null if not found + public Article getById(final int id) { + return m_articles.getValue().stream().filter(a -> a.id == id) + .findFirst() + .orElse(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 72d0163a..0b291e4a 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 @@ -410,7 +410,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { if (dy > 0 && !m_isLazyLoading && !model.isLoading() && model.isLazyLoadEnabled() && lastVisibleItem >= Application.getArticles().size() - 5) { - Log.d(TAG, "attempting to lazy load more articles..."); + Log.d(TAG, "attempting to lazy load more articles (onScrolled)..."); m_isLazyLoading = true; @@ -441,6 +441,24 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment { Log.d(TAG, "observed active article=" + activeArticle); if (activeArticle != null) { + + // we can't be sure scrollToArticle() below actually does anything in DetailView because our fragment might be invisible in some layouts + // so we also trigger lazy load on active article change + if (m_activity instanceof DetailActivity) { + int position = Application.getArticles().indexOf(activeArticle); + + if (!m_isLazyLoading && !model.isLoading() && model.isLazyLoadEnabled() && + position >= Application.getArticles().size() - 5) { + + Log.d(TAG, "attempting to lazy load more articles (observed active article change)..."); + + m_isLazyLoading = true; + + // this has to be dispatched delayed, consequent adapter updates are forbidden in scroll handler + new Handler().postDelayed(() -> refresh(true), 250); + } + } + scrollToArticle(activeArticle); } }); diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/types/Article.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/types/Article.java index 2c1966ad..cdffffe2 100755 --- a/org.fox.ttrss/src/main/java/org/fox/ttrss/types/Article.java +++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/types/Article.java @@ -1,8 +1,5 @@ package org.fox.ttrss.types; -import android.os.Parcel; -import android.os.Parcelable; - import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; @@ -16,7 +13,7 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; // TODO: serialize Labels -public class Article implements Parcelable { +public class Article { public static final int TYPE_AMR_FOOTER = -2; public static final int FLAVOR_KIND_ALBUM = 1; @@ -73,10 +70,6 @@ public class Article implements Parcelable { transient public String youtubeVid; transient public List<Element> mediaList = new ArrayList<>(); - public Article(Parcel in) { - readFromParcel(in); - } - public Article() { } @@ -237,81 +230,6 @@ public class Article implements Parcelable { mediaList = new ArrayList<>(clone.mediaList); } - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel out, int flags) { - out.writeInt(id); - out.writeInt(unread ? 1 : 0); - out.writeInt(marked ? 1 : 0); - out.writeInt(published ? 1 : 0); - out.writeInt(score); - out.writeInt(updated); - out.writeInt(is_updated ? 1 : 0); - out.writeString(title); - out.writeString(link); - out.writeInt(feed_id); - out.writeStringList(tags); - out.writeString(content); - out.writeString(excerpt); - out.writeList(attachments); - out.writeString(feed_title); - out.writeInt(comments_count); - out.writeString(comments_link); - out.writeInt(always_display_attachments ? 1 : 0); - out.writeString(author); - out.writeString(note); - out.writeInt(selected ? 1 : 0); - out.writeString(site_url); - } - - public void readFromParcel(Parcel in) { - id = in.readInt(); - unread = in.readInt() == 1; - marked = in.readInt() == 1; - published = in.readInt() == 1; - score = in.readInt(); - updated = in.readInt(); - is_updated = in.readInt() == 1; - title = in.readString(); - link = in.readString(); - feed_id = in.readInt(); - - if (tags == null) tags = new ArrayList<>(); - in.readStringList(tags); - - content = in.readString(); - excerpt = in.readString(); - - attachments = new ArrayList<>(); - in.readList(attachments, Attachment.class.getClassLoader()); - - feed_title = in.readString(); - - comments_count = in.readInt(); - comments_link = in.readString(); - always_display_attachments = in.readInt() == 1; - author = in.readString(); - note = in.readString(); - selected = in.readInt() == 1; - site_url = in.readString(); - } - - @SuppressWarnings("rawtypes") - public static final Parcelable.Creator CREATOR = - new Parcelable.Creator() { - public Article createFromParcel(Parcel in) { - return new Article(in); - } - - public Article[] newArray(int size) { - return new Article[size]; - } - }; - /** * set fields which might be missing during JSON deserialization to sane values */ |