From 1ad2257bb19a73d2eaa6987fcc82bbdb3b5b67d3 Mon Sep 17 00:00:00 2001 From: Jacocococo Date: Mon, 19 Aug 2024 17:04:47 +0200 Subject: [PATCH] Add favorite reaction in right place + fix issues --- .../fragments/NotificationsListFragment.java | 1 - .../android/fragments/StatusListFragment.java | 1 - .../EmojiReactionsStatusDisplayItem.java | 36 +++++++++++++++---- 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/NotificationsListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/NotificationsListFragment.java index 9644a498c..e58e5c98d 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/NotificationsListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/NotificationsListFragment.java @@ -281,7 +281,6 @@ public class NotificationsListFragment extends BaseStatusListFragment reactions.updateReactions(ev.reactions); } } - s.getContentStatus().update(ev); AccountSessionManager.get(accountID).getCacheController().updateStatus(s); for(int i=0;i parentFragment, Status status, String accountID, boolean hideEmpty, boolean forAnnouncement) { super(parentID, parentFragment); @@ -97,6 +100,10 @@ public class EmojiReactionsStatusDisplayItem extends StatusDisplayItem { } public boolean isHidden(){ + if(forceShow){ + forceShow=false; + return false; + } return status.reactions.isEmpty() && hideEmpty; } @@ -325,11 +332,14 @@ public class EmojiReactionsStatusDisplayItem extends StatusDisplayItem { } public void updateReactions(List reactions){ + item.status.reactions=new ArrayList<>(item.status.reactions); // I don't know how, but this seemingly fixes a bug + + List toRemove=new ArrayList<>(); for(int i=0;i newReactionOptional=reactions.stream().filter(r->r.name.equals(reaction.name)).findFirst(); if(newReactionOptional.isEmpty()){ // deleted reactions - adapter.notifyItemRemoved(i); + toRemove.add(reaction); continue; } @@ -343,25 +353,39 @@ public class EmojiReactionsStatusDisplayItem extends StatusDisplayItem { item.setActionProgressVisible(reactionHolder, true); } }else{ + item.status.reactions.set(i, newReaction); adapter.notifyItemChanged(i); } } } + + Collections.reverse(toRemove); + for(EmojiReaction r:toRemove){ + int index=item.status.reactions.indexOf(r); + item.status.reactions.remove(index); + adapter.notifyItemRemoved(index); + } + boolean pendingAddReaction=false; - for(EmojiReaction reaction:reactions){ + for(int i=0;ir.name.equals(reaction.name))) continue; // new reactions if(reaction.pendingChange){ pendingAddReaction=true; + item.forceShow=true; continue; } - int pos=item.status.reactions.size(); - item.status.reactions.add(pos, reaction); - adapter.notifyItemInserted(pos); + boolean previouslyEmpty=item.status.reactions.isEmpty(); + item.status.reactions.add(i, reaction); + if(previouslyEmpty) + adapter.notifyItemChanged(i); + else + adapter.notifyItemInserted(i); RecyclerView.SmoothScroller scroller=new LinearSmoothScroller(list.getContext()); - scroller.setTargetPosition(pos); + scroller.setTargetPosition(i); list.getLayoutManager().startSmoothScroll(scroller); } if(pendingAddReaction){