summaryrefslogtreecommitdiff
path: root/org.fox.ttrss/src
diff options
context:
space:
mode:
authorAndrew Dolgov <fox@fakecake.org>2025-05-18 22:21:01 +0300
committerAndrew Dolgov <fox@fakecake.org>2025-05-18 22:21:01 +0300
commitc433e6f7b3c96acddce7591f4642dbdc84b37668 (patch)
tree69d851f208deefa79784f66d71e1a0317a49e952 /org.fox.ttrss/src
parentad2efff97e07fa4b227046b9538c394484d3e81f (diff)
split some more headline row view stuff into separate methods
Diffstat (limited to 'org.fox.ttrss/src')
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java202
1 files changed, 107 insertions, 95 deletions
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 c57f11c5..0fbd3721 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
@@ -82,7 +82,6 @@ import org.fox.ttrss.util.ArticleDiffItemCallback;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
-import java.lang.reflect.Type;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
@@ -622,7 +621,6 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
public View flavorImageOverflow;
public TextureView flavorVideoView;
public MaterialButton attachmentsView;
- int articleId;
public TextView linkHost;
public ArticleViewHolder(View v) {
@@ -712,6 +710,9 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
private final int m_screenWidth;
private final int m_screenHeight;
+ private final int m_headlineSmallFontSize;
+ private final int m_headlineFontSize;
+
private final ConnectivityManager m_cmgr;
private boolean canShowFlavorImage() {
@@ -763,6 +764,9 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
m_colorTertiaryContainer = colorFromAttr(R.attr.colorTertiaryContainer);
m_colorOnTertiaryContainer = colorFromAttr(R.attr.colorOnTertiaryContainer);
+ m_headlineFontSize = m_prefs.getInt("headlines_font_size_sp_int", 13);
+ m_headlineSmallFontSize = Math.max(10, Math.min(18, m_headlineFontSize - 2));
+
m_cmgr = (ConnectivityManager) m_activity.getSystemService(Context.CONNECTIVITY_SERVICE);
}
@@ -1021,7 +1025,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
return holder;
}
- @Override public void onViewRecycled(ArticleViewHolder holder){
+ @Override public void onViewRecycled(@NonNull ArticleViewHolder holder){
super.onViewRecycled(holder);
if (holder.flavorImageView != null)
@@ -1030,7 +1034,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
@Override
// https://stackoverflow.com/questions/33176336/need-an-example-about-recyclerview-adapter-notifyitemchangedint-position-objec/50085835#50085835
- public void onBindViewHolder(final ArticleViewHolder holder, final int position, final List<Object> payloads) {
+ public void onBindViewHolder(@NonNull final ArticleViewHolder holder, final int position, final List<Object> payloads) {
if (!payloads.isEmpty()) {
Log.d(TAG, "onBindViewHolder, payloads=" + payloads + " position=" + position);
@@ -1063,7 +1067,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
}
}
- private void updateUnreadView(final Article article, ArticleViewHolder holder) {
+ private void updateUnreadView(final Article article, final ArticleViewHolder holder) {
if (m_compactLayoutMode) {
holder.view.setBackgroundColor(article.unread ? m_colorSurfaceContainerLowest : 0);
} else {
@@ -1080,7 +1084,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
updateActiveView(article, holder);
}
- private void updateActiveView(final Article article, ArticleViewHolder holder) {
+ private void updateActiveView(final Article article, final ArticleViewHolder holder) {
if (article.id == m_activeArticleId) {
holder.view.setBackgroundColor(m_colorTertiaryContainer);
@@ -1100,14 +1104,9 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
}
@Override
- public void onBindViewHolder(final ArticleViewHolder holder, int position) {
- int headlineFontSize = m_prefs.getInt("headlines_font_size_sp_int", 13);
- int headlineSmallFontSize = Math.max(10, Math.min(18, headlineFontSize - 2));
-
+ public void onBindViewHolder(@NonNull final ArticleViewHolder holder, int position) {
Article article = getItem(position);
- holder.articleId = article.id;
-
if (article.id == Article.TYPE_AMR_FOOTER && m_prefs.getBoolean("headlines_mark_read_scroll", false)) {
WindowManager wm = (WindowManager) m_activity.getSystemService(Context.WINDOW_SERVICE);
Display display = wm.getDefaultDisplay();
@@ -1121,73 +1120,16 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
updateUnreadView(article, holder);
updateTextImage(article, holder);
-
- if (holder.titleView != null) {
- holder.titleView.setText(Html.fromHtml(article.title));
- holder.titleView.setTextSize(TypedValue.COMPLEX_UNIT_SP, Math.min(21, headlineFontSize + 3));
- }
-
- if (holder.feedTitleView != null) {
- if (article.feed_title != null && m_feed != null && (m_feed.is_cat || m_feed.id < 0)) {
- holder.feedTitleView.setTextSize(TypedValue.COMPLEX_UNIT_SP, headlineSmallFontSize);
- holder.feedTitleView.setText(article.feed_title);
- } else {
- holder.feedTitleView.setVisibility(View.GONE);
- }
- }
-
- if (holder.linkHost != null) {
- if (article.isHostDistinct()) {
- holder.linkHost.setTextSize(TypedValue.COMPLEX_UNIT_SP, headlineSmallFontSize);
- holder.linkHost.setText(article.getLinkHost());
- holder.linkHost.setVisibility(View.VISIBLE);
- } else {
- holder.linkHost.setVisibility(View.GONE);
- }
- }
-
+ updateTitleView(article, holder);
updateMarkedView(article, holder);
updateScoreView(article, holder);
updatePublishedView(article, holder);
-
- if (holder.attachmentsView != null) {
- if (article.attachments != null && !article.attachments.isEmpty()) {
- holder.attachmentsView.setVisibility(View.VISIBLE);
- } else {
- holder.attachmentsView.setVisibility(View.GONE);
- }
- }
-
- if (holder.excerptView != null) {
- if (!m_prefs.getBoolean("headlines_show_content", true)) {
- holder.excerptView.setVisibility(View.GONE);
- } else {
- String excerpt = "";
-
- try {
- if (article.excerpt != null) {
- excerpt = article.excerpt;
- } else if (article.articleDoc != null) {
- excerpt = article.articleDoc.text();
-
- if (excerpt.length() > CommonActivity.EXCERPT_MAX_LENGTH)
- excerpt = excerpt.substring(0, CommonActivity.EXCERPT_MAX_LENGTH) + "…";
- }
- } catch (Exception e) {
- e.printStackTrace();
- excerpt = "";
- }
-
- holder.excerptView.setTextSize(TypedValue.COMPLEX_UNIT_SP, headlineFontSize);
- holder.excerptView.setText(excerpt);
-
- if (!excerpt.isEmpty()) {
- holder.excerptView.setVisibility(View.VISIBLE);
- } else {
- holder.excerptView.setVisibility(View.GONE);
- }
- }
- }
+ updateAttachmentsView(article, holder);
+ updateLinkHost(article, holder);
+ updateExcerptView(article, holder);
+ updateAuthorView(article, holder);
+ updateDateView(article, holder);
+ updateSelectedView(article, holder);
if (!m_compactLayoutMode && holder.flavorImageHolder != null) {
@@ -1321,21 +1263,27 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
holder.flavorImageView.setOnClickListener(view -> openGalleryForType(article, holder, holder.flavorImageView));
} */
}
+ }
- String articleAuthor = article.author != null ? article.author : "";
-
- if (holder.authorView != null) {
- holder.authorView.setTextSize(TypedValue.COMPLEX_UNIT_SP, headlineSmallFontSize);
+ private void updateTitleView(final Article article, final ArticleViewHolder holder) {
+ if (holder.titleView != null) {
+ holder.titleView.setText(Html.fromHtml(article.title));
+ holder.titleView.setTextSize(TypedValue.COMPLEX_UNIT_SP, Math.min(21, m_headlineFontSize + 3));
+ }
- if (!articleAuthor.isEmpty()) {
- holder.authorView.setText(getString(R.string.author_formatted, articleAuthor));
+ if (holder.feedTitleView != null) {
+ if (article.feed_title != null && m_feed != null && (m_feed.is_cat || m_feed.id < 0)) {
+ holder.feedTitleView.setTextSize(TypedValue.COMPLEX_UNIT_SP, m_headlineSmallFontSize);
+ holder.feedTitleView.setText(article.feed_title);
} else {
- holder.authorView.setText("");
+ holder.feedTitleView.setVisibility(View.GONE);
}
}
+ }
+ private void updateDateView(final Article article, final ArticleViewHolder holder) {
if (holder.dateView != null) {
- holder.dateView.setTextSize(TypedValue.COMPLEX_UNIT_SP, headlineSmallFontSize);
+ holder.dateView.setTextSize(TypedValue.COMPLEX_UNIT_SP, m_headlineSmallFontSize);
Date d = new Date((long)article.updated * 1000);
Date now = new Date();
@@ -1354,20 +1302,85 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
df.setTimeZone(TimeZone.getDefault());
holder.dateView.setText(df.format(d));
}
+ }
- updateSelectedView(article, holder);
+ private void updateAuthorView(final Article article, final ArticleViewHolder holder) {
+ String articleAuthor = article.author != null ? article.author : "";
+
+ if (holder.authorView != null) {
+ holder.authorView.setTextSize(TypedValue.COMPLEX_UNIT_SP, m_headlineSmallFontSize);
+
+ if (!articleAuthor.isEmpty()) {
+ holder.authorView.setText(getString(R.string.author_formatted, articleAuthor));
+ } else {
+ holder.authorView.setText("");
+ }
+ }
+ }
+
+ private void updateExcerptView(final Article article, final ArticleViewHolder holder) {
+ if (holder.excerptView != null) {
+ if (!m_prefs.getBoolean("headlines_show_content", true)) {
+ holder.excerptView.setVisibility(View.GONE);
+ } else {
+ String excerpt = "";
+
+ try {
+ if (article.excerpt != null) {
+ excerpt = article.excerpt;
+ } else if (article.articleDoc != null) {
+ excerpt = article.articleDoc.text();
+
+ if (excerpt.length() > CommonActivity.EXCERPT_MAX_LENGTH)
+ excerpt = excerpt.substring(0, CommonActivity.EXCERPT_MAX_LENGTH) + "…";
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ excerpt = "";
+ }
+ holder.excerptView.setTextSize(TypedValue.COMPLEX_UNIT_SP, m_headlineFontSize);
+ holder.excerptView.setText(excerpt);
+ if (!excerpt.isEmpty()) {
+ holder.excerptView.setVisibility(View.VISIBLE);
+ } else {
+ holder.excerptView.setVisibility(View.GONE);
+ }
+ }
+ }
}
- private void updateMarkedView(Article article, ArticleViewHolder holder) {
+ private void updateLinkHost(final Article article, final ArticleViewHolder holder) {
+ if (holder.linkHost != null) {
+ if (article.isHostDistinct()) {
+ holder.linkHost.setTextSize(TypedValue.COMPLEX_UNIT_SP, m_headlineSmallFontSize);
+ holder.linkHost.setText(article.getLinkHost());
+ holder.linkHost.setVisibility(View.VISIBLE);
+ } else {
+ holder.linkHost.setVisibility(View.GONE);
+ }
+ }
+ }
+
+ private void updateAttachmentsView(final Article article, final ArticleViewHolder holder) {
+ if (holder.attachmentsView != null) {
+ if (article.attachments != null && !article.attachments.isEmpty()) {
+ holder.attachmentsView.setVisibility(View.VISIBLE);
+ } else {
+ holder.attachmentsView.setVisibility(View.GONE);
+ }
+ }
+ }
+
+ private void updateMarkedView(final Article article, final ArticleViewHolder holder) {
if (holder.markedView != null) {
holder.markedView.setIconResource(article.marked ? R.drawable.baseline_star_24 : R.drawable.baseline_star_outline_24);
holder.markedView.setIconTint(article.marked ? m_cslTertiary : m_cslPrimary);
}
}
- private void updateTextImage(Article article, ArticleViewHolder holder) {
+ private void updateTextImage(final Article article, final ArticleViewHolder holder) {
if (holder.textImage != null) {
updateTextCheckedState(article, holder);
@@ -1376,14 +1389,13 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
}
}
- private void updateSelectedView(Article article, ArticleViewHolder holder) {
+ private void updateSelectedView(final Article article, final ArticleViewHolder holder) {
if (holder.selectionBoxView != null) {
holder.selectionBoxView.setChecked(article.selected);
-
}
}
- private void updateScoreView(Article article, ArticleViewHolder holder) {
+ private void updateScoreView(final Article article, final ArticleViewHolder holder) {
if (holder.scoreView != null) {
int scoreDrawable = R.drawable.baseline_trending_flat_24;
@@ -1401,7 +1413,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
}
}
- private void updatePublishedView(final Article article, ArticleViewHolder holder) {
+ private void updatePublishedView(final Article article, final ArticleViewHolder holder) {
if (holder.publishedView != null) {
// otherwise we just use tinting in actionbar
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
@@ -1412,7 +1424,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
}
}
- private void loadFlavorImage(final Article article, ArticleViewHolder holder, int maxImageHeight) {
+ private void loadFlavorImage(final Article article, final ArticleViewHolder holder, final int maxImageHeight) {
Glide.with(HeadlinesFragment.this)
.load(article.flavorImageUri)
.transition(DrawableTransitionOptions.withCrossFade())
@@ -1445,7 +1457,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
.into(new DrawableImageViewTarget(holder.flavorImageView));
}
- private void checkImageAndLoad(Article article, ArticleViewHolder holder, int maxImageHeight) {
+ private void checkImageAndLoad(final Article article, final ArticleViewHolder holder, final int maxImageHeight) {
FlavorProgressTarget<Size> flavorProgressTarget = new FlavorProgressTarget<>(new SimpleTarget<Size>() {
@Override
public void onResourceReady(@NonNull Size resource, @Nullable com.bumptech.glide.request.transition.Transition<? super Size> transition) {
@@ -1515,7 +1527,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
}
}
- private void openGalleryForType(Article article, ArticleViewHolder holder, View transitionView) {
+ private void openGalleryForType(final Article article, final ArticleViewHolder holder, final View transitionView) {
//Log.d(TAG, "openGalleryForType: " + article + " " + holder + " " + transitionView);
if ("iframe".equalsIgnoreCase(article.flavorImage.tagName())) {
@@ -1562,7 +1574,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
}
- private void adjustVideoKindView(ArticleViewHolder holder, Article article) {
+ private void adjustVideoKindView(final ArticleViewHolder holder, final Article article) {
if (article.flavorImage != null) {
if (article.flavor_kind == Article.FLAVOR_KIND_YOUTUBE || "iframe".equalsIgnoreCase(article.flavorImage.tagName())) {
holder.flavorVideoKindView.setImageResource(R.drawable.baseline_play_circle_outline_24);