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 a0cad1855..5d3243864 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/NotificationsListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/NotificationsListFragment.java @@ -16,6 +16,7 @@ import org.joinmastodon.android.events.PollUpdatedEvent; import org.joinmastodon.android.events.RemoveAccountPostsEvent; import org.joinmastodon.android.model.Account; import org.joinmastodon.android.model.CacheablePaginatedResponse; +import org.joinmastodon.android.model.Emoji; import org.joinmastodon.android.model.Filter; import org.joinmastodon.android.model.Notification; import org.joinmastodon.android.model.PaginatedResponse; @@ -24,6 +25,7 @@ import org.joinmastodon.android.ui.displayitems.AccountCardStatusDisplayItem; import org.joinmastodon.android.ui.displayitems.HeaderStatusDisplayItem; import org.joinmastodon.android.ui.displayitems.StatusDisplayItem; import org.joinmastodon.android.ui.displayitems.TextStatusDisplayItem; +import org.joinmastodon.android.ui.text.HtmlParser; import org.joinmastodon.android.ui.utils.DiscoverInfoBannerHelper; import org.joinmastodon.android.ui.utils.InsetStatusItemDecoration; import org.joinmastodon.android.ui.utils.UiUtils; @@ -83,6 +85,13 @@ public class NotificationsListFragment extends BaseStatusListFragment buildDisplayItems(Notification n){ Account reportTarget = n.report == null ? null : n.report.targetAccount == null ? null : n.report.targetAccount; + Emoji emoji = new Emoji(); + if(n.emojiUrl!=null){ + emoji.shortcode=n.emoji.substring(1,n.emoji.length()-1); + emoji.url=n.emojiUrl; + emoji.staticUrl=n.emojiUrl; + emoji.visibleInPicker=false; + } String extraText=switch(n.type){ case FOLLOW -> getString(R.string.user_followed_you); case FOLLOW_REQUEST -> getString(R.string.user_sent_follow_request); @@ -93,8 +102,9 @@ public class NotificationsListFragment extends BaseStatusListFragment getString(R.string.sk_post_edited); case SIGN_UP -> getString(R.string.sk_signed_up); case REPORT -> getString(R.string.sk_reported); + case EMOJI_REACTION -> getString(R.string.sk_reacted, n.emoji); }; - HeaderStatusDisplayItem titleItem=extraText!=null ? new HeaderStatusDisplayItem(n.id, n.account, n.createdAt, this, accountID, n.status, extraText, n, null) : null; + HeaderStatusDisplayItem titleItem=extraText!=null ? new HeaderStatusDisplayItem(n.id, n.account, n.createdAt, this, accountID, n.status, n.emojiUrl!=null ? HtmlParser.parseCustomEmoji(extraText, Collections.singletonList(emoji)) : extraText, n, null) : null; if(n.status!=null){ ArrayList items=StatusDisplayItem.buildItems(this, n.status, accountID, n, knownAccounts, titleItem!=null, titleItem==null, n, false, Filter.FilterContext.NOTIFICATIONS); if(titleItem!=null) diff --git a/mastodon/src/main/java/org/joinmastodon/android/model/Notification.java b/mastodon/src/main/java/org/joinmastodon/android/model/Notification.java index b104e86bf..264f6a54d 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/model/Notification.java +++ b/mastodon/src/main/java/org/joinmastodon/android/model/Notification.java @@ -20,6 +20,8 @@ public class Notification extends BaseModel implements DisplayItemsParent{ public Account account; public Status status; public Report report; + public String emoji; + public String emojiUrl; @Override public void postprocess() throws ObjectValidationException{ @@ -54,7 +56,9 @@ public class Notification extends BaseModel implements DisplayItemsParent{ @SerializedName("admin.sign_up") SIGN_UP, @SerializedName("admin.report") - REPORT + REPORT, + @SerializedName("pleroma:emoji_reaction") + EMOJI_REACTION } @Parcel diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java index 96fcf45ae..f3c57fc6b 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java @@ -83,13 +83,13 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{ public final Status status; private boolean hasVisibilityToggle; boolean needBottomPadding; - private String extraText; + private CharSequence extraText; private Notification notification; private ScheduledStatus scheduledStatus; private Announcement announcement; private Consumer consumeReadAnnouncement; - public HeaderStatusDisplayItem(String parentID, Account user, Instant createdAt, BaseStatusListFragment parentFragment, String accountID, Status status, String extraText, Notification notification, ScheduledStatus scheduledStatus){ + public HeaderStatusDisplayItem(String parentID, Account user, Instant createdAt, BaseStatusListFragment parentFragment, String accountID, Status status, CharSequence extraText, Notification notification, ScheduledStatus scheduledStatus){ super(parentID, parentFragment); user=scheduledStatus != null ? AccountSessionManager.getInstance().getAccount(accountID).self : user; this.user=user; @@ -114,6 +114,7 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{ } } this.extraText=extraText; + emojiHelper.addText(extraText); } public static HeaderStatusDisplayItem fromAnnouncement(Announcement a, Status fakeStatus, Account instanceUser, BaseStatusListFragment parentFragment, String accountID, Consumer consumeReadID) { diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/utils/CustomEmojiHelper.java b/mastodon/src/main/java/org/joinmastodon/android/ui/utils/CustomEmojiHelper.java index 6e0a6b002..faafc39d4 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/utils/CustomEmojiHelper.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/utils/CustomEmojiHelper.java @@ -29,6 +29,16 @@ public class CustomEmojiHelper{ } } + public void addText(CharSequence text) { + if(!(text instanceof Spanned)) + return; + CustomEmojiSpan[] spans=((Spanned) text).getSpans(0, text.length(), CustomEmojiSpan.class); + for(List group:Arrays.stream(spans).collect(Collectors.groupingBy(s->s.emoji)).values()){ + this.spans.add(group); + requests.add(group.get(0).createImageLoaderRequest()); + } + } + public int getImageCount(){ return requests.size(); } diff --git a/mastodon/src/main/res/values/strings_sk.xml b/mastodon/src/main/res/values/strings_sk.xml index 3d0fb224a..2d161aaa5 100644 --- a/mastodon/src/main/res/values/strings_sk.xml +++ b/mastodon/src/main/res/values/strings_sk.xml @@ -252,6 +252,7 @@ Enable this if your home instance runs on Glitch. Not needed for Hometown or Akkoma. signed up reported + reacted with %s Users signing up New reports Server version: %s