summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Dolgov <fox@fakecake.org>2025-05-14 16:11:02 +0300
committerAndrew Dolgov <fox@fakecake.org>2025-05-14 16:11:02 +0300
commit4c1f2b9ab213f21084583b38aa4106faf2b940ab (patch)
tree1c2c3bfda6309bf952573efab853ef72baa7b236
parentb735651f0f9dc94687122ad09c9918b4ea477f47 (diff)
update workaround for caching image height on predraw without depending on articles
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java48
1 files changed, 22 insertions, 26 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 ab9e9f96..0400cd26 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
@@ -81,6 +81,7 @@ import org.jsoup.nodes.Element;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
+import java.util.HashMap;
import java.util.TimeZone;
import java.util.stream.Collectors;
@@ -121,6 +122,8 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
private MediaPlayer m_mediaPlayer;
private TextureView m_activeTexture;
+ protected static HashMap<Integer, Integer> m_flavorHeightsCache = new HashMap<>();
+
public ArticleList getSelectedArticles() {
return Application.getArticles()
.stream()
@@ -470,17 +473,20 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
m_adapter.submitList(tmp, () -> {
if (!appended)
m_list.scrollToPosition(0);
+
+ if (m_swipeLayout != null)
+ m_swipeLayout.setRefreshing(false);
+
+ m_isLazyLoading = false;
+
+ m_listener.onHeadlinesLoaded(appended);
+ m_listener.onArticleListSelectionChange();
});
if (model.getFirstIdChanged())
Snackbar.make(getView(), R.string.headlines_row_top_changed, Snackbar.LENGTH_LONG)
.setAction(R.string.reload, v -> refresh(false)).show();
- if (m_swipeLayout != null)
- m_swipeLayout.setRefreshing(false);
-
- m_isLazyLoading = false;
-
if (model.getLastError() == ApiCommon.ApiError.LOGIN_FAILED) {
m_activity.login();
} else if (model.getLastError() != null && model.getLastError() != ApiCommon.ApiError.SUCCESS) {
@@ -490,9 +496,6 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
m_activity.toast(model.getErrorMessage());
}
}
-
- m_listener.onHeadlinesLoaded(appended);
- m_listener.onArticleListSelectionChange();
});
return view;
@@ -535,14 +538,6 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
}
}
- // if we try to initLoader() all the time, onLoadFinished() might be sent twice
- // https://stackoverflow.com/questions/11293441/android-loadercallbacks-onloadfinished-called-twice
- /* if (m_loader == null) {
- m_loader = (HeadlinesLoader) LoaderManager.getInstance(this).
- initLoader(Application.LOADER_HEADLINES, null, this);
-
- } */
-
if (m_swipeLayout != null)
m_swipeLayout.setRefreshing(true);
@@ -550,9 +545,6 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
model.setSearchQuery(getSearchQuery());
model.startLoading(append, m_feed, m_activity.getResizeWidth());
-
- //m_loader.setSearchQuery(getSearchQuery());
- //m_loader.startLoading(append);
}
static class ArticleViewHolder extends RecyclerView.ViewHolder {
@@ -580,8 +572,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
public TextureView flavorVideoView;
public MaterialButton attachmentsView;
public ProgressTarget<String, GlideDrawable> flavorProgressTarget;
-
- int flavorViewHeight;
+ int articleId;
public ArticleViewHolder(View v) {
super(v);
@@ -592,7 +583,7 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
View flavorImage = view.findViewById(R.id.flavor_image);
if (flavorImage != null) {
- flavorViewHeight = flavorImage.getMeasuredHeight();
+ HeadlinesFragment.m_flavorHeightsCache.put(articleId, flavorImage.getMeasuredHeight());
}
return true;
@@ -743,6 +734,8 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
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();
@@ -1040,10 +1033,13 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment {
holder.flavorImageHolder.setVisibility(View.VISIBLE);
// prevent lower listiew entries from jumping around if this row is modified
- // TODO this doesn't work right now
- if (holder.flavorViewHeight > 0) {
- FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) holder.flavorImageView.getLayoutParams();
- lp.height = holder.flavorViewHeight;
+ if (m_flavorHeightsCache.containsKey(article.id)) {
+ int cachedHeight = m_flavorHeightsCache.get(article.id);
+
+ if (cachedHeight > 0) {
+ FrameLayout.LayoutParams lp = (FrameLayout.LayoutParams) holder.flavorImageView.getLayoutParams();
+ lp.height = cachedHeight;
+ }
}
holder.flavorProgressTarget.setModel(article.flavorImageUri);