From 5c73717373ee30ed52649c75be228630b5f4b9d2 Mon Sep 17 00:00:00 2001 From: Thomas Date: Mon, 6 Feb 2023 14:48:45 +0100 Subject: [PATCH] Fix some crashes --- .../android/mastodon/helper/MastodonHelper.java | 6 +++++- .../android/mastodon/ui/drawer/StatusAdapter.java | 13 ++++++++----- .../ui/fragment/media/FragmentMediaProfile.java | 4 +++- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/app/fedilab/android/mastodon/helper/MastodonHelper.java b/app/src/main/java/app/fedilab/android/mastodon/helper/MastodonHelper.java index 7d00f7bf7..0c27c57e7 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/helper/MastodonHelper.java +++ b/app/src/main/java/app/fedilab/android/mastodon/helper/MastodonHelper.java @@ -130,8 +130,12 @@ public class MastodonHelper { * @return Pagination */ public static Pagination getPagination(Headers headers) { - String link = headers.get("Link"); + Pagination pagination = new Pagination(); + if (headers == null) { + return pagination; + } + String link = headers.get("Link"); if (link != null) { Pattern patternMaxId = Pattern.compile("max_id=([0-9a-zA-Z]+).*"); Matcher matcherMaxId = patternMaxId.matcher(link); diff --git a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusAdapter.java b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusAdapter.java index a6e5ce332..1353d368e 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusAdapter.java +++ b/app/src/main/java/app/fedilab/android/mastodon/ui/drawer/StatusAdapter.java @@ -2137,7 +2137,7 @@ public class StatusAdapter extends RecyclerView.Adapter //We hide the button status.isFetchMore = false; String fromId; - if (status.positionFetchMore == Status.PositionFetchMore.TOP) { + if (status.positionFetchMore == Status.PositionFetchMore.TOP || holder.getBindingAdapterPosition() == 0) { fromId = statusList.get(holder.getBindingAdapterPosition()).id; } else { fromId = statusList.get(holder.getBindingAdapterPosition() - 1).id; @@ -2158,7 +2158,7 @@ public class StatusAdapter extends RecyclerView.Adapter statusIdMin = status.id; } } - if (status.positionFetchMore == Status.PositionFetchMore.TOP) { + if (status.positionFetchMore == Status.PositionFetchMore.TOP || holder.getBindingAdapterPosition() == 0) { statusIdMax = statusList.get(holder.getBindingAdapterPosition()).id; } else { statusIdMax = statusList.get(holder.getBindingAdapterPosition() - 1).id; @@ -2470,6 +2470,9 @@ public class StatusAdapter extends RecyclerView.Adapter public List getPreloadItems(int position) { List attachments = new ArrayList<>(); int max_size = statusList.size(); + if (max_size == 0) { + return attachments; + } int siblings = 3; int from = Math.max((position - siblings), 0); if (from > max_size - 1) { @@ -2646,7 +2649,7 @@ public class StatusAdapter extends RecyclerView.Adapter status.isFetchMore = false; notifyItemChanged(holder.getBindingAdapterPosition()); String fromId; - if (status.positionFetchMore == Status.PositionFetchMore.TOP) { + if (status.positionFetchMore == Status.PositionFetchMore.TOP || holder.getBindingAdapterPosition() == 0) { fromId = statusList.get(holder.getBindingAdapterPosition()).id; } else { fromId = statusList.get(holder.getBindingAdapterPosition() - 1).id; @@ -2664,7 +2667,7 @@ public class StatusAdapter extends RecyclerView.Adapter minId = status.id; } } - if (status.positionFetchMore == Status.PositionFetchMore.TOP) { + if (status.positionFetchMore == Status.PositionFetchMore.TOP || holder.getBindingAdapterPosition() == 0) { maxId = statusList.get(holder.getBindingAdapterPosition()).id; } else { maxId = statusList.get(holder.getBindingAdapterPosition() - 1).id; @@ -2702,7 +2705,7 @@ public class StatusAdapter extends RecyclerView.Adapter //We hide the button status.isFetchMore = false; String fromId; - if (status.positionFetchMore == Status.PositionFetchMore.TOP) { + if (status.positionFetchMore == Status.PositionFetchMore.TOP || holder.getBindingAdapterPosition() == 0) { fromId = statusList.get(holder.getBindingAdapterPosition()).id; } else { fromId = statusList.get(holder.getBindingAdapterPosition() - 1).id; diff --git a/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/media/FragmentMediaProfile.java b/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/media/FragmentMediaProfile.java index 6e9a14669..c6da7a0b6 100644 --- a/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/media/FragmentMediaProfile.java +++ b/app/src/main/java/app/fedilab/android/mastodon/ui/fragment/media/FragmentMediaProfile.java @@ -96,7 +96,9 @@ public class FragmentMediaProfile extends Fragment { accountsVM.getAccountStatuses(tempInstance, null, accountId, null, null, null, null, null, true, false, MastodonHelper.statusesPerCall(requireActivity())) .observe(getViewLifecycleOwner(), statuses -> initializeStatusesCommonView(statuses)); } else { - Toasty.error(requireActivity(), getString(R.string.toast_fetch_error), Toasty.LENGTH_LONG).show(); + if (isAdded() && !requireActivity().isFinishing()) { + Toasty.error(requireActivity(), getString(R.string.toast_fetch_error), Toasty.LENGTH_LONG).show(); + } } } });