From 9295cf4e9c83721eb470bfb6c0372079a28026a0 Mon Sep 17 00:00:00 2001 From: sk Date: Thu, 31 Aug 2023 17:24:21 +0200 Subject: [PATCH] fix emoji reaction spacing not updating closes sk22#784 --- .../events/EmojiReactionsUpdatedEvent.java | 19 ++++++++++ .../events/StatusCountersUpdatedEvent.java | 15 -------- .../fragments/NotificationsListFragment.java | 28 +++++++++++++-- .../android/fragments/StatusListFragment.java | 26 +++++++++++++- .../joinmastodon/android/model/Status.java | 5 ++- .../EmojiReactionsStatusDisplayItem.java | 36 +++++++++---------- 6 files changed, 90 insertions(+), 39 deletions(-) create mode 100644 mastodon/src/main/java/org/joinmastodon/android/events/EmojiReactionsUpdatedEvent.java diff --git a/mastodon/src/main/java/org/joinmastodon/android/events/EmojiReactionsUpdatedEvent.java b/mastodon/src/main/java/org/joinmastodon/android/events/EmojiReactionsUpdatedEvent.java new file mode 100644 index 000000000..2e0ce6467 --- /dev/null +++ b/mastodon/src/main/java/org/joinmastodon/android/events/EmojiReactionsUpdatedEvent.java @@ -0,0 +1,19 @@ +package org.joinmastodon.android.events; + +import androidx.recyclerview.widget.RecyclerView; +import org.joinmastodon.android.model.EmojiReaction; +import java.util.List; + +public class EmojiReactionsUpdatedEvent{ + public final String id; + public final List reactions; + public final boolean updateTextPadding; + public RecyclerView.ViewHolder viewHolder; + + public EmojiReactionsUpdatedEvent(String id, List reactions, boolean updateTextPadding, RecyclerView.ViewHolder viewHolder){ + this.id=id; + this.reactions=reactions; + this.updateTextPadding=updateTextPadding; + this.viewHolder=viewHolder; + } +} diff --git a/mastodon/src/main/java/org/joinmastodon/android/events/StatusCountersUpdatedEvent.java b/mastodon/src/main/java/org/joinmastodon/android/events/StatusCountersUpdatedEvent.java index 3027a3809..cdcf37104 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/events/StatusCountersUpdatedEvent.java +++ b/mastodon/src/main/java/org/joinmastodon/android/events/StatusCountersUpdatedEvent.java @@ -1,27 +1,14 @@ package org.joinmastodon.android.events; -import androidx.recyclerview.widget.RecyclerView; - -import org.joinmastodon.android.api.CacheController; -import org.joinmastodon.android.model.EmojiReaction; import org.joinmastodon.android.model.Status; -import java.util.ArrayList; -import java.util.List; - public class StatusCountersUpdatedEvent{ public String id; public long favorites, reblogs, replies; public boolean favorited, reblogged, bookmarked, pinned; - public List reactions; public Status status; - public RecyclerView.ViewHolder viewHolder; public StatusCountersUpdatedEvent(Status s){ - this(s, null); - } - - public StatusCountersUpdatedEvent(Status s, RecyclerView.ViewHolder vh){ id=s.id; status=s; favorites=s.favouritesCount; @@ -31,7 +18,5 @@ public class StatusCountersUpdatedEvent{ reblogged=s.reblogged; bookmarked=s.bookmarked; pinned=s.pinned; - reactions=new ArrayList<>(s.reactions); - viewHolder=vh; } } 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 23f61edd0..02fb2cf07 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/NotificationsListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/NotificationsListFragment.java @@ -15,6 +15,7 @@ import org.joinmastodon.android.E; import org.joinmastodon.android.GlobalUserPreferences; import org.joinmastodon.android.R; import org.joinmastodon.android.api.session.AccountSessionManager; +import org.joinmastodon.android.events.EmojiReactionsUpdatedEvent; import org.joinmastodon.android.events.PollUpdatedEvent; import org.joinmastodon.android.events.RemoveAccountPostsEvent; import org.joinmastodon.android.events.StatusCountersUpdatedEvent; @@ -27,6 +28,7 @@ import org.joinmastodon.android.ui.displayitems.ExtendedFooterStatusDisplayItem; import org.joinmastodon.android.ui.displayitems.FooterStatusDisplayItem; import org.joinmastodon.android.ui.displayitems.NotificationHeaderStatusDisplayItem; import org.joinmastodon.android.ui.displayitems.StatusDisplayItem; +import org.joinmastodon.android.ui.displayitems.TextStatusDisplayItem; import org.joinmastodon.android.ui.utils.DiscoverInfoBannerHelper; import org.joinmastodon.android.ui.utils.InsetStatusItemDecoration; import org.joinmastodon.android.ui.utils.UiUtils; @@ -255,8 +257,6 @@ public class NotificationsListFragment extends BaseStatusListFragment footer.rebind(); }else if(holder instanceof ExtendedFooterStatusDisplayItem.Holder footer && footer.getItem().status==s.getContentStatus()){ footer.rebind(); - }else if(holder instanceof EmojiReactionsStatusDisplayItem.Holder reactions && reactions.getItem().status==s.getContentStatus() && ev.viewHolder!=holder){ + } + } + } + } + for(Status s:preloadedData){ + if(s.getContentStatus().id.equals(ev.id)){ + s.getContentStatus().update(ev); + AccountSessionManager.get(accountID).getCacheController().updateStatus(s); + } + } + } + + @Subscribe + public void onEmojiReactionsChanged(EmojiReactionsUpdatedEvent ev){ + for(Status s:data){ + if(s.getContentStatus().id.equals(ev.id)){ + s.getContentStatus().update(ev); + AccountSessionManager.get(accountID).getCacheController().updateStatus(s); + for(int i=0;i parentFragment, Status status, String accountID, boolean hideAdd, boolean forAnnouncement) { + public EmojiReactionsStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, Status status, String accountID, boolean hideEmpty, boolean forAnnouncement) { super(parentID, parentFragment); this.status=status; - this.hideAdd=hideAdd; + this.hideEmpty=hideEmpty; this.forAnnouncement=forAnnouncement; this.accountID=accountID; placeholder=parentFragment.getContext().getDrawable(R.drawable.image_placeholder).mutate(); placeholder.setBounds(0, 0, V.sp(24), V.sp(24)); - updateHidden(); } @Override @@ -94,11 +89,7 @@ public class EmojiReactionsStatusDisplayItem extends StatusDisplayItem { } public boolean isHidden(){ - return hidden; - } - - private void updateHidden(){ - hidden=status.reactions.isEmpty() && hideAdd; + return status.reactions.isEmpty() && hideEmpty; } // borrowed from ProfileFragment @@ -187,12 +178,12 @@ public class EmojiReactionsStatusDisplayItem extends StatusDisplayItem { emojiKeyboard.setListener(this); space.setVisibility(View.GONE); root.addView(emojiKeyboard.getView()); - item.updateHidden(); - root.setVisibility(item.hidden ? View.GONE : View.VISIBLE); - line.setVisibility(item.hidden ? View.GONE : View.VISIBLE); + boolean hidden=item.isHidden(); + root.setVisibility(hidden ? View.GONE : View.VISIBLE); + line.setVisibility(hidden ? View.GONE : View.VISIBLE); line.setPadding( list.getPaddingLeft(), - item.hidden ? 0 : V.dp(8), + hidden ? 0 : V.dp(8), list.getPaddingRight(), item.forAnnouncement ? V.dp(8) : 0 ); @@ -219,6 +210,7 @@ public class EmojiReactionsStatusDisplayItem extends StatusDisplayItem { } private void addEmojiReaction(String emoji, Emoji info) { + int countBefore=item.status.reactions.size(); for(int i=0; i