summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Dolgov <fox@fakecake.org>2025-05-13 09:25:05 +0300
committerAndrew Dolgov <fox@fakecake.org>2025-05-13 09:25:05 +0300
commitf42eccb9cabde4bb8db1541626150fcdeaefdbcc (patch)
treeccf687c8758f0007181114a3643bd94026f50d21
parent29fbead156856281895163c87ec91c20e1651b3e (diff)
better handle detail activity crash on activity result
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java30
-rwxr-xr-xorg.fox.ttrss/src/main/java/org/fox/ttrss/MasterActivity.java14
2 files changed, 33 insertions, 11 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 e008173a..b98aa6c8 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
@@ -459,12 +459,11 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment implements
new Handler().postDelayed(() -> m_activity.refresh(false), 100);
}
- int lastVisibleItem = m_layoutManager.findLastVisibleItemPosition();
+ /* int lastVisibleItem = m_layoutManager.findLastVisibleItemPosition();
- if (lastVisibleItem >= Application.getArticles().size() - 5)
+ if (lastVisibleItem >= Application.getArticles().size() - 5) {
refresh(true);
-
- new Handler().postDelayed(() -> refresh(true), 0);
+ } */
}
}
@@ -494,8 +493,8 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment implements
}
}
- /* if (lastVisibleItem >= Application.getArticles().size() - 5)
- new Handler().postDelayed(() -> refresh(true), 1000); */
+ if (lastVisibleItem >= Application.getArticles().size() - 5)
+ new Handler().postDelayed(() -> refresh(true), 1000);
}
});
@@ -1423,16 +1422,31 @@ public class HeadlinesFragment extends androidx.fragment.app.Fragment implements
}
public void scrollToArticleId(int id) {
- m_list.scrollToPosition(Application.getArticles().getPositionById(id));
+ int position = Application.getArticles().getPositionById(id);
+
+ if (position != -1)
+ m_list.scrollToPosition(position);
}
public void setActiveArticleId(int articleId) {
if (m_list != null && articleId != m_activeArticleId) {
+ ArticleList articles = Application.getArticles();
+
+ int oldPosition = articles.getPositionById(m_activeArticleId);
+ int newPosition = articles.getPositionById(articleId);
+
m_activeArticleId = articleId;
- m_adapter.notifyDataSetChanged();
+
+ if (oldPosition != -1)
+ m_adapter.notifyItemChanged(oldPosition);
+
+ m_adapter.notifyItemChanged(newPosition);
scrollToArticleId(articleId);
+
+ if (newPosition >= articles.size() - 5)
+ refresh(true);
}
}
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/MasterActivity.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/MasterActivity.java
index 9430ddc2..911d8ed7 100755
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/MasterActivity.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/MasterActivity.java
@@ -530,10 +530,18 @@ public class MasterActivity extends OnlineActivity implements HeadlinesEventList
if (hf != null) {
hf.notifyUpdated();
- // this makes position in headlines in master activity (not quite) randomly jump around when returning
- // even if active article hasn't been changed, i guess keeping it as-is is a lesser evil?
- hf.scrollToArticleId(data.getIntExtra("activeArticleId", 0));
+ // data might be null if detailactivity crashed
+ if (data != null && data.getExtras() != null) {
+ int activeArticleId = data.getIntExtra("activeArticleId", 0);
+
+ Log.d(TAG, "got back from detail activity, scrolling to id=" + activeArticleId);
+
+ hf.scrollToArticleId(activeArticleId);
+ }
}
+
+ // just in case
+ new Handler().postDelayed((Runnable) () -> hf.refresh(true), 250);
}
}