Pleroma emoji reaction notifications (#499)

This commit is contained in:
Jacoco
2023-04-22 17:39:41 +02:00
committed by GitHub
parent 226e2a7cdc
commit b5a08b1b98
5 changed files with 30 additions and 4 deletions

View File

@@ -16,6 +16,7 @@ import org.joinmastodon.android.events.PollUpdatedEvent;
import org.joinmastodon.android.events.RemoveAccountPostsEvent; import org.joinmastodon.android.events.RemoveAccountPostsEvent;
import org.joinmastodon.android.model.Account; import org.joinmastodon.android.model.Account;
import org.joinmastodon.android.model.CacheablePaginatedResponse; import org.joinmastodon.android.model.CacheablePaginatedResponse;
import org.joinmastodon.android.model.Emoji;
import org.joinmastodon.android.model.Filter; import org.joinmastodon.android.model.Filter;
import org.joinmastodon.android.model.Notification; import org.joinmastodon.android.model.Notification;
import org.joinmastodon.android.model.PaginatedResponse; 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.HeaderStatusDisplayItem;
import org.joinmastodon.android.ui.displayitems.StatusDisplayItem; import org.joinmastodon.android.ui.displayitems.StatusDisplayItem;
import org.joinmastodon.android.ui.displayitems.TextStatusDisplayItem; 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.DiscoverInfoBannerHelper;
import org.joinmastodon.android.ui.utils.InsetStatusItemDecoration; import org.joinmastodon.android.ui.utils.InsetStatusItemDecoration;
import org.joinmastodon.android.ui.utils.UiUtils; import org.joinmastodon.android.ui.utils.UiUtils;
@@ -83,6 +85,13 @@ public class NotificationsListFragment extends BaseStatusListFragment<Notificati
protected List<StatusDisplayItem> buildDisplayItems(Notification n){ protected List<StatusDisplayItem> buildDisplayItems(Notification n){
Account reportTarget = n.report == null ? null : n.report.targetAccount == null ? null : Account reportTarget = n.report == null ? null : n.report.targetAccount == null ? null :
n.report.targetAccount; 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){ String extraText=switch(n.type){
case FOLLOW -> getString(R.string.user_followed_you); case FOLLOW -> getString(R.string.user_followed_you);
case FOLLOW_REQUEST -> getString(R.string.user_sent_follow_request); case FOLLOW_REQUEST -> getString(R.string.user_sent_follow_request);
@@ -93,8 +102,9 @@ public class NotificationsListFragment extends BaseStatusListFragment<Notificati
case UPDATE -> getString(R.string.sk_post_edited); case UPDATE -> getString(R.string.sk_post_edited);
case SIGN_UP -> getString(R.string.sk_signed_up); case SIGN_UP -> getString(R.string.sk_signed_up);
case REPORT -> getString(R.string.sk_reported); 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){ if(n.status!=null){
ArrayList<StatusDisplayItem> items=StatusDisplayItem.buildItems(this, n.status, accountID, n, knownAccounts, titleItem!=null, titleItem==null, n, false, Filter.FilterContext.NOTIFICATIONS); ArrayList<StatusDisplayItem> items=StatusDisplayItem.buildItems(this, n.status, accountID, n, knownAccounts, titleItem!=null, titleItem==null, n, false, Filter.FilterContext.NOTIFICATIONS);
if(titleItem!=null) if(titleItem!=null)

View File

@@ -20,6 +20,8 @@ public class Notification extends BaseModel implements DisplayItemsParent{
public Account account; public Account account;
public Status status; public Status status;
public Report report; public Report report;
public String emoji;
public String emojiUrl;
@Override @Override
public void postprocess() throws ObjectValidationException{ public void postprocess() throws ObjectValidationException{
@@ -54,7 +56,9 @@ public class Notification extends BaseModel implements DisplayItemsParent{
@SerializedName("admin.sign_up") @SerializedName("admin.sign_up")
SIGN_UP, SIGN_UP,
@SerializedName("admin.report") @SerializedName("admin.report")
REPORT REPORT,
@SerializedName("pleroma:emoji_reaction")
EMOJI_REACTION
} }
@Parcel @Parcel

View File

@@ -83,13 +83,13 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
public final Status status; public final Status status;
private boolean hasVisibilityToggle; private boolean hasVisibilityToggle;
boolean needBottomPadding; boolean needBottomPadding;
private String extraText; private CharSequence extraText;
private Notification notification; private Notification notification;
private ScheduledStatus scheduledStatus; private ScheduledStatus scheduledStatus;
private Announcement announcement; private Announcement announcement;
private Consumer<String> consumeReadAnnouncement; private Consumer<String> 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); super(parentID, parentFragment);
user=scheduledStatus != null ? AccountSessionManager.getInstance().getAccount(accountID).self : user; user=scheduledStatus != null ? AccountSessionManager.getInstance().getAccount(accountID).self : user;
this.user=user; this.user=user;
@@ -114,6 +114,7 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
} }
} }
this.extraText=extraText; this.extraText=extraText;
emojiHelper.addText(extraText);
} }
public static HeaderStatusDisplayItem fromAnnouncement(Announcement a, Status fakeStatus, Account instanceUser, BaseStatusListFragment parentFragment, String accountID, Consumer<String> consumeReadID) { public static HeaderStatusDisplayItem fromAnnouncement(Announcement a, Status fakeStatus, Account instanceUser, BaseStatusListFragment parentFragment, String accountID, Consumer<String> consumeReadID) {

View File

@@ -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<CustomEmojiSpan> group:Arrays.stream(spans).collect(Collectors.groupingBy(s->s.emoji)).values()){
this.spans.add(group);
requests.add(group.get(0).createImageLoaderRequest());
}
}
public int getImageCount(){ public int getImageCount(){
return requests.size(); return requests.size();
} }

View File

@@ -252,6 +252,7 @@
<string name="sk_settings_glitch_mode_explanation">Enable this if your home instance runs on Glitch. Not needed for Hometown or Akkoma.</string> <string name="sk_settings_glitch_mode_explanation">Enable this if your home instance runs on Glitch. Not needed for Hometown or Akkoma.</string>
<string name="sk_signed_up">signed up</string> <string name="sk_signed_up">signed up</string>
<string name="sk_reported">reported</string> <string name="sk_reported">reported</string>
<string name="sk_reacted">reacted with %s</string>
<string name="sk_sign_ups">Users signing up</string> <string name="sk_sign_ups">Users signing up</string>
<string name="sk_new_reports">New reports</string> <string name="sk_new_reports">New reports</string>
<string name="sk_settings_server_version">Server version: %s</string> <string name="sk_settings_server_version">Server version: %s</string>