From 91345268e85f98c07f96c4e473144db1c09b1284 Mon Sep 17 00:00:00 2001 From: FineFindus Date: Sat, 6 Jul 2024 22:51:14 +0200 Subject: [PATCH 1/3] fix(StatusDisplayItem/Quote): use correct method ChildFragments overwrite the buildDisplayItems to provide the correct parameters, e.g. flags, additional items, etc. Call those instead of the default one. --- .../android/fragments/BaseStatusListFragment.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java index 4f3f29d7c..c15bd1813 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java @@ -718,7 +718,9 @@ public abstract class BaseStatusListFragment exten } if (startIndex!=-1 && endIndex!=-1) { - ArrayList items=StatusDisplayItem.buildItems(this, status, accountID, status, knownAccounts, null, 0); + //Only StatusListFragments can display Status/Quotes + assert this instanceof StatusListFragment; + List items=((StatusListFragment) this).buildDisplayItems(status); displayItems.subList(startIndex, endIndex+1).clear(); displayItems.addAll(startIndex, items); adapter.notifyItemRangeChanged(startIndex, items.size()); From 72400703abc8c6b4351de6d2f915f8f96b704414 Mon Sep 17 00:00:00 2001 From: FineFindus Date: Sat, 6 Jul 2024 22:55:59 +0200 Subject: [PATCH 2/3] fix(StatusDisplayItem/Quote): only update non-empty adapter Fixes a crash when updating an empty adapter. This was the case when opening a status from a notification. --- .../android/fragments/BaseStatusListFragment.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java index c15bd1813..ad08fb703 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java @@ -722,8 +722,10 @@ public abstract class BaseStatusListFragment exten assert this instanceof StatusListFragment; List items=((StatusListFragment) this).buildDisplayItems(status); displayItems.subList(startIndex, endIndex+1).clear(); + boolean isEmpty=displayItems.isEmpty(); displayItems.addAll(startIndex, items); - adapter.notifyItemRangeChanged(startIndex, items.size()); + if(!isEmpty) + adapter.notifyItemRangeChanged(startIndex, items.size()); } } From bc8b0e192cc98ca260ba20a2d303e36208246f93 Mon Sep 17 00:00:00 2001 From: FineFindus Date: Sat, 6 Jul 2024 22:56:55 +0200 Subject: [PATCH 3/3] feat(StatusDisplayItem/Quote): allow quotes to reference themselves --- .../android/ui/displayitems/StatusDisplayItem.java | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/StatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/StatusDisplayItem.java index f7b42b7df..68d4950ef 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/StatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/StatusDisplayItem.java @@ -338,7 +338,7 @@ public abstract class StatusDisplayItem{ if(!statusForContent.mediaAttachments.isEmpty() && statusForContent.poll==null) // add spacing if immediately preceded by attachment contentItems.add(new DummyStatusDisplayItem(parentID, fragment)); contentItems.addAll(buildItems(fragment, statusForContent.quote, accountID, parentObject, knownAccounts, filterContext, FLAG_NO_FOOTER|FLAG_INSET|FLAG_NO_EMOJI_REACTIONS|FLAG_IS_FOR_QUOTE)); - } else { + } else if((flags & FLAG_INSET)==0){ tryAddNonOfficialQuote(statusForContent, fragment, accountID); } if(contentItems!=items && statusForContent.spoilerRevealed){ @@ -431,12 +431,8 @@ public abstract class StatusDisplayItem{ @Override public void onSuccess(SearchResults results){ if (!results.statuses.isEmpty()){ - Status quote=results.statuses.get(0); - // don't show self-referential quotes - if(!Objects.equals(status.id, results.statuses.get(0).id)){ - status.quote=quote; - fragment.updateStatusWithQuote(status); - } + status.quote=results.statuses.get(0); + fragment.updateStatusWithQuote(status); } }