From 09ba42a974f477b940c05791a5158be6a27345f8 Mon Sep 17 00:00:00 2001 From: Angelo Suzuki <1063155+tinsukE@users.noreply.github.com> Date: Thu, 31 Aug 2023 14:01:58 +0200 Subject: [PATCH 1/5] When loading gap posts, apply filters before building display items. This will make sure that items that are filtered out don't show up on the interface. Fixes #675 --- .../joinmastodon/android/fragments/HomeTimelineFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/HomeTimelineFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/HomeTimelineFragment.java index 02763ca45..c99f44400 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/HomeTimelineFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/HomeTimelineFragment.java @@ -270,6 +270,7 @@ public class HomeTimelineFragment extends StatusListFragment{ }else{ result=result.subList(0, endIndex); } + AccountSessionManager.get(accountID).filterStatuses(result, FilterContext.HOME); List targetList=displayItems.subList(gapPos, gapPos+1); targetList.clear(); List insertedPosts=data.subList(gapPostIndex+1, gapPostIndex+1); @@ -279,7 +280,6 @@ public class HomeTimelineFragment extends StatusListFragment{ targetList.addAll(buildDisplayItems(s)); insertedPosts.add(s); } - AccountSessionManager.get(accountID).filterStatuses(insertedPosts, FilterContext.HOME); if(targetList.isEmpty()){ // oops. We didn't add new posts, but at least we know there are none. adapter.notifyItemRemoved(getMainAdapterOffset()+gapPos); From d334703c65f543268543be07fa7100bc569ae671 Mon Sep 17 00:00:00 2001 From: sk Date: Thu, 31 Aug 2023 17:04:10 +0200 Subject: [PATCH 2/5] adhere to showEmojiReactionsInLists setting closes sk22#788 --- .../fragments/NotificationsListFragment.java | 1 - .../ScheduledStatusListFragment.java | 5 +++- .../fragments/discover/SearchFragment.java | 2 +- .../ui/displayitems/StatusDisplayItem.java | 27 +++---------------- 4 files changed, 8 insertions(+), 27 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 92171e380..35e76ac72 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/NotificationsListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/NotificationsListFragment.java @@ -43,7 +43,6 @@ import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import me.grishka.appkit.api.SimpleCallback; import me.grishka.appkit.utils.MergeRecyclerAdapter; -import me.grishka.appkit.views.FragmentRootLinearLayout; public class NotificationsListFragment extends BaseStatusListFragment { private boolean onlyMentions; diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/ScheduledStatusListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/ScheduledStatusListFragment.java index 4ab8d3ac9..864dec49e 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ScheduledStatusListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ScheduledStatusListFragment.java @@ -80,7 +80,10 @@ public class ScheduledStatusListFragment extends BaseStatusListFragment buildDisplayItems(ScheduledStatus s) { - return StatusDisplayItem.buildItems(this, s.toStatus(), accountID, s, knownAccounts, false, false, false, true, null); + return StatusDisplayItem.buildItems(this, s.toStatus(), accountID, s, knownAccounts, null, + StatusDisplayItem.FLAG_NO_EMOJI_REACTIONS | + StatusDisplayItem.FLAG_NO_FOOTER | + StatusDisplayItem.FLAG_NO_TRANSLATE); } @Override diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/SearchFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/SearchFragment.java index 2c0c91859..acc223f6f 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/SearchFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/discover/SearchFragment.java @@ -70,7 +70,7 @@ public class SearchFragment extends BaseStatusListFragment{ return switch(s.type){ case ACCOUNT -> Collections.singletonList(new AccountStatusDisplayItem(s.id, this, s.account)); case HASHTAG -> Collections.singletonList(new HashtagStatusDisplayItem(s.id, this, s.hashtag)); - case STATUS -> StatusDisplayItem.buildItems(this, s.status, accountID, s, knownAccounts, FilterContext.PUBLIC, !getLocalPrefs().showEmojiReactionsInLists ? StatusDisplayItem.FLAG_NO_EMOJI_REACTIONS : 0); + case STATUS -> StatusDisplayItem.buildItems(this, s.status, accountID, s, knownAccounts, FilterContext.PUBLIC, 0); }; } 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 cd7671148..6cb969954 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 @@ -120,19 +120,6 @@ public abstract class StatusDisplayItem{ }; } - public static ArrayList buildItems(BaseStatusListFragment fragment, Status status, String accountID, DisplayItemsParent parentObject, Map knownAccounts, boolean inset, boolean showReactions, boolean addFooter, boolean disableTranslate, FilterContext filterContext) { - int flags=0; - if(inset) - flags|=FLAG_INSET; - if(!addFooter) - flags|=FLAG_NO_FOOTER; - if (disableTranslate) - flags|=FLAG_NO_TRANSLATE; - if (!showReactions) - flags|=FLAG_NO_EMOJI_REACTIONS; - return buildItems(fragment, status, accountID, parentObject, knownAccounts, filterContext, flags); - } - public static ReblogOrReplyLineStatusDisplayItem buildReplyLine(BaseStatusListFragment fragment, Status status, String accountID, DisplayItemsParent parent, Account account, boolean threadReply) { String parentID = parent.getID(); String text = threadReply ? fragment.getString(R.string.sk_show_thread) @@ -290,8 +277,8 @@ public abstract class StatusDisplayItem{ if(contentItems!=items && statusForContent.spoilerRevealed){ items.addAll(contentItems); } - if((flags & FLAG_NO_EMOJI_REACTIONS)==0 - && AccountSessionManager.get(accountID).getLocalPreferences().emojiReactionsEnabled){ + if((flags & FLAG_NO_EMOJI_REACTIONS)==0 && fragment.getLocalPrefs().emojiReactionsEnabled && + (fragment.getLocalPrefs().showEmojiReactionsInLists || fragment instanceof ThreadFragment)){ boolean isMainStatus=fragment instanceof ThreadFragment t && t.getMainStatus().id.equals(statusForContent.id); items.add(new EmojiReactionsStatusDisplayItem(parentID, fragment, statusForContent, accountID, !isMainStatus, false)); } @@ -398,15 +385,7 @@ public abstract class StatusDisplayItem{ } return Optional.empty(); } -// int nextNextPos=getAbsoluteAdapterPosition() + 2; -// if(next.map(n->n instanceof EmojiReactionsStatusDisplayItem e && e.isHidden()).orElse(false)){ -// List displayItems=item.parentFragment.getDisplayItems(); -// return displayItems.size() > nextNextPos -// ? Optional.of(displayItems.get(nextNextPos)) -// : Optional.empty(); -// }else{ -// return next; -// } + public Optional getNextDisplayItem(){ return getDisplayItemOffset(1); } From dd9237e9caafa60c17099a2adec204bd732f1c29 Mon Sep 17 00:00:00 2001 From: sk Date: Thu, 31 Aug 2023 17:20:44 +0200 Subject: [PATCH 3/5] enable emojiReactionsInTimelines by default --- .../api/session/AccountLocalPreferences.java | 6 +++--- .../fragments/NotificationsListFragment.java | 2 -- .../android/fragments/StatusListFragment.java | 2 +- .../settings/SettingsInstanceFragment.java | 15 +++++++-------- .../ui/displayitems/StatusDisplayItem.java | 2 +- 5 files changed, 12 insertions(+), 15 deletions(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/api/session/AccountLocalPreferences.java b/mastodon/src/main/java/org/joinmastodon/android/api/session/AccountLocalPreferences.java index 4589ec4ed..6b41c41f3 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/api/session/AccountLocalPreferences.java +++ b/mastodon/src/main/java/org/joinmastodon/android/api/session/AccountLocalPreferences.java @@ -39,7 +39,7 @@ public class AccountLocalPreferences{ public boolean keepOnlyLatestNotification; public boolean emojiReactionsEnabled; - public boolean showEmojiReactionsInLists; + public boolean emojiReactionsInTimelines; private final static Type recentLanguagesType = new TypeToken>() {}.getType(); private final static Type timelinesType = new TypeToken>() {}.getType(); @@ -66,7 +66,7 @@ public class AccountLocalPreferences{ timelineReplyVisibility=prefs.getString("timelineReplyVisibility", null); keepOnlyLatestNotification=prefs.getBoolean("keepOnlyLatestNotification", false); emojiReactionsEnabled=prefs.getBoolean("emojiReactionsEnabled", session.getInstance().isPresent() && session.getInstance().get().isAkkoma()); - showEmojiReactionsInLists=prefs.getBoolean("showEmojiReactionsInLists", false); + emojiReactionsInTimelines=prefs.getBoolean("emojiReactionsInTimelines", true); } public long getNotificationsPauseEndTime(){ @@ -99,7 +99,7 @@ public class AccountLocalPreferences{ .putString("timelineReplyVisibility", timelineReplyVisibility) .putBoolean("keepOnlyLatestNotification", keepOnlyLatestNotification) .putBoolean("emojiReactionsEnabled", emojiReactionsEnabled) - .putBoolean("showEmojiReactionsInLists", showEmojiReactionsInLists) + .putBoolean("emojiReactionsInTimelines", emojiReactionsInTimelines) .apply(); } } 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 35e76ac72..23f61edd0 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/NotificationsListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/NotificationsListFragment.java @@ -101,8 +101,6 @@ public class NotificationsListFragment extends BaseStatusListFragment items=StatusDisplayItem.buildItems(this, n.status, accountID, n, knownAccounts, null, flags); if(titleItem!=null) items.add(0, titleItem); diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/StatusListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/StatusListFragment.java index 701b8959e..47b299819 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/StatusListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/StatusListFragment.java @@ -38,7 +38,7 @@ public abstract class StatusListFragment extends BaseStatusListFragment int flags = 0; if (GlobalUserPreferences.spectatorMode) flags |= StatusDisplayItem.FLAG_NO_FOOTER; - if (!getLocalPrefs().showEmojiReactionsInLists) + if (!getLocalPrefs().emojiReactionsInTimelines) flags |= StatusDisplayItem.FLAG_NO_EMOJI_REACTIONS; return StatusDisplayItem.buildItems(this, s, accountID, s, knownAccounts, getFilterContext(), isMainThreadStatus ? 0 : flags); } diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/settings/SettingsInstanceFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/settings/SettingsInstanceFragment.java index 6d6bdd5d2..e7b28d398 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/settings/SettingsInstanceFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/settings/SettingsInstanceFragment.java @@ -19,7 +19,7 @@ import java.util.List; import me.grishka.appkit.Nav; public class SettingsInstanceFragment extends BaseSettingsFragment implements HasAccountID{ - private CheckableListItem contentTypesItem, emojiReactionsItem, emojiReactionsInListsItem, localOnlyItem, glitchModeItem; + private CheckableListItem contentTypesItem, emojiReactionsItem, emojiReactionsInTimelinesItem, localOnlyItem, glitchModeItem; private ListItem defaultContentTypeItem; private AccountLocalPreferences lp; @@ -35,16 +35,16 @@ public class SettingsInstanceFragment extends BaseSettingsFragment impleme new ListItem<>(R.string.sk_settings_posting, 0, R.drawable.ic_fluent_open_24_regular, ()->UiUtils.launchWebBrowser(getActivity(), "https://"+s.domain+"/settings/preferences/other")), new ListItem<>(R.string.sk_settings_auth, 0, R.drawable.ic_fluent_open_24_regular, ()->UiUtils.launchWebBrowser(getActivity(), "https://"+s.domain+"/auth/edit"), 0, true), contentTypesItem=new CheckableListItem<>(R.string.sk_settings_content_types, R.string.sk_settings_content_types_explanation, CheckableListItem.Style.SWITCH, lp.contentTypesEnabled, R.drawable.ic_fluent_text_edit_style_24_regular, this::onContentTypeClick), - defaultContentTypeItem=new ListItem<>(R.string.sk_settings_default_content_type, lp.defaultContentType.getName(), R.drawable.ic_fluent_text_bold_24_regular, this::onDefaultContentTypeClick), + defaultContentTypeItem=new ListItem<>(R.string.sk_settings_default_content_type, lp.defaultContentType.getName(), R.drawable.ic_fluent_text_bold_24_regular, this::onDefaultContentTypeClick, 0, true), emojiReactionsItem=new CheckableListItem<>(R.string.sk_settings_emoji_reactions, R.string.sk_settings_emoji_reactions_explanation, CheckableListItem.Style.SWITCH, lp.emojiReactionsEnabled, R.drawable.ic_fluent_emoji_laugh_24_regular, this::onEmojiReactionsClick), - emojiReactionsInListsItem=new CheckableListItem<>(R.string.sk_settings_emoji_reactions_in_lists, R.string.sk_settings_emoji_reactions_in_lists_explanation, CheckableListItem.Style.SWITCH, lp.showEmojiReactionsInLists, R.drawable.ic_fluent_emoji_24_regular, ()->toggleCheckableItem(emojiReactionsInListsItem)), + emojiReactionsInTimelinesItem=new CheckableListItem<>(R.string.sk_settings_emoji_reactions_in_lists, R.string.sk_settings_emoji_reactions_in_lists_explanation, CheckableListItem.Style.SWITCH, lp.emojiReactionsInTimelines, R.drawable.ic_fluent_emoji_24_regular, ()->toggleCheckableItem(emojiReactionsInTimelinesItem), true), localOnlyItem=new CheckableListItem<>(R.string.sk_settings_support_local_only, R.string.sk_settings_local_only_explanation, CheckableListItem.Style.SWITCH, lp.localOnlySupported, R.drawable.ic_fluent_eye_24_regular, this::onLocalOnlyClick), glitchModeItem=new CheckableListItem<>(R.string.sk_settings_glitch_instance, R.string.sk_settings_glitch_mode_explanation, CheckableListItem.Style.SWITCH, lp.glitchInstance, R.drawable.ic_fluent_eye_24_filled, ()->toggleCheckableItem(glitchModeItem)) )); contentTypesItem.checkedChangeListener=checked->onContentTypeClick(); defaultContentTypeItem.isEnabled=contentTypesItem.checked; emojiReactionsItem.checkedChangeListener=checked->onEmojiReactionsClick(); - emojiReactionsInListsItem.isEnabled=emojiReactionsItem.checked; + emojiReactionsInTimelinesItem.isEnabled=emojiReactionsItem.checked; localOnlyItem.checkedChangeListener=checked->onLocalOnlyClick(); glitchModeItem.isEnabled=localOnlyItem.checked; } @@ -57,7 +57,7 @@ public class SettingsInstanceFragment extends BaseSettingsFragment impleme super.onHidden(); lp.contentTypesEnabled=contentTypesItem.checked; lp.emojiReactionsEnabled=emojiReactionsItem.checked; - lp.showEmojiReactionsInLists=emojiReactionsInListsItem.checked; + lp.emojiReactionsInTimelines=emojiReactionsInTimelinesItem.checked; lp.localOnlySupported=localOnlyItem.checked; lp.glitchInstance=glitchModeItem.checked; lp.save(); @@ -109,9 +109,8 @@ public class SettingsInstanceFragment extends BaseSettingsFragment impleme private void onEmojiReactionsClick(){ toggleCheckableItem(emojiReactionsItem); - emojiReactionsInListsItem.checked=false; - emojiReactionsInListsItem.isEnabled=emojiReactionsItem.checked; - rebindItem(emojiReactionsInListsItem); + emojiReactionsInTimelinesItem.checked=emojiReactionsInTimelinesItem.isEnabled=emojiReactionsItem.checked; + rebindItem(emojiReactionsInTimelinesItem); } private void onLocalOnlyClick(){ 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 6cb969954..2e81f0735 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 @@ -278,7 +278,7 @@ public abstract class StatusDisplayItem{ items.addAll(contentItems); } if((flags & FLAG_NO_EMOJI_REACTIONS)==0 && fragment.getLocalPrefs().emojiReactionsEnabled && - (fragment.getLocalPrefs().showEmojiReactionsInLists || fragment instanceof ThreadFragment)){ + (fragment.getLocalPrefs().emojiReactionsInTimelines || fragment instanceof ThreadFragment)){ boolean isMainStatus=fragment instanceof ThreadFragment t && t.getMainStatus().id.equals(statusForContent.id); items.add(new EmojiReactionsStatusDisplayItem(parentID, fragment, statusForContent, accountID, !isMainStatus, false)); } From 9295cf4e9c83721eb470bfb6c0372079a28026a0 Mon Sep 17 00:00:00 2001 From: sk Date: Thu, 31 Aug 2023 17:24:21 +0200 Subject: [PATCH 4/5] 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 Date: Thu, 31 Aug 2023 18:07:43 +0200 Subject: [PATCH 5/5] fix drafts being all on the same-ish day --- .../android/api/requests/statuses/CreateStatus.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/api/requests/statuses/CreateStatus.java b/mastodon/src/main/java/org/joinmastodon/android/api/requests/statuses/CreateStatus.java index 12a7935e3..fd09b692e 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/api/requests/statuses/CreateStatus.java +++ b/mastodon/src/main/java/org/joinmastodon/android/api/requests/statuses/CreateStatus.java @@ -11,13 +11,11 @@ import java.util.ArrayList; import java.util.List; public class CreateStatus extends MastodonAPIRequest{ - public static final Instant DRAFTS_AFTER_INSTANT = Instant.ofEpochMilli(253370764799999L) /* end of 9998 */; - private static final float draftFactor = 31536000000f /* one year */ / 253370764799999f /* end of 9998 */; + public static long EPOCH_OF_THE_YEAR_FIVE_THOUSAND=95617584000000L; + public static final Instant DRAFTS_AFTER_INSTANT=Instant.ofEpochMilli(EPOCH_OF_THE_YEAR_FIVE_THOUSAND - 1) /* end of 4999 */; public static Instant getDraftInstant() { - // returns an instant between 9999-01-01 00:00:00 and 9999-12-31 23:59:59 - // yes, this is a weird implementation for something that hardly matters - return DRAFTS_AFTER_INSTANT.plusMillis(1 + (long) (System.currentTimeMillis() * draftFactor)); + return DRAFTS_AFTER_INSTANT.plusMillis(System.currentTimeMillis()); } public CreateStatus(CreateStatus.Request req, String uuid){