diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/NotificationHeaderStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/NotificationHeaderStatusDisplayItem.java index 981b38bba..bdb9a862f 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/NotificationHeaderStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/NotificationHeaderStatusDisplayItem.java @@ -1,7 +1,6 @@ package org.joinmastodon.android.ui.displayitems; import static org.joinmastodon.android.MastodonApp.context; -import static org.joinmastodon.android.model.Notification.Type.PLEROMA_EMOJI_REACTION; import static org.joinmastodon.android.ui.utils.UiUtils.generateFormattedString; import android.annotation.SuppressLint; @@ -9,7 +8,6 @@ import android.app.Activity; import android.content.res.ColorStateList; import android.graphics.drawable.Drawable; import android.os.Bundle; -import android.text.Html; import android.text.SpannableStringBuilder; import android.text.TextUtils; import android.util.TypedValue; @@ -24,6 +22,7 @@ import org.joinmastodon.android.api.session.AccountLocalPreferences; import org.joinmastodon.android.api.session.AccountSession; import org.joinmastodon.android.api.session.AccountSessionManager; import org.joinmastodon.android.fragments.BaseStatusListFragment; +import org.joinmastodon.android.fragments.NotificationsListFragment; import org.joinmastodon.android.fragments.ProfileFragment; import org.joinmastodon.android.model.Emoji; import org.joinmastodon.android.model.Notification; @@ -116,7 +115,7 @@ public class NotificationHeaderStatusDisplayItem extends StatusDisplayItem{ } public static class Holder extends StatusDisplayItem.Holder implements ImageLoaderViewHolder{ - private final ImageView icon, avatar; + private final ImageView icon, avatar, deleteNotification; private final TextView text, timestamp; private final int selectableItemBackground; @@ -126,9 +125,15 @@ public class NotificationHeaderStatusDisplayItem extends StatusDisplayItem{ avatar=findViewById(R.id.avatar); text=findViewById(R.id.text); timestamp=findViewById(R.id.timestamp); + deleteNotification=findViewById(R.id.delete_notification); avatar.setOutlineProvider(OutlineProviders.roundedRect(8)); avatar.setClipToOutline(true); + deleteNotification.setOnClickListener(v->UiUtils.confirmDeleteNotification(activity, item.parentFragment.getAccountID(), item.notification, ()->{ + if (item.parentFragment instanceof NotificationsListFragment fragment) { + fragment.removeNotification(item.notification); + } + })); itemView.setOnClickListener(this::onItemClick); TypedValue outValue = new TypedValue(); @@ -177,10 +182,13 @@ public class NotificationHeaderStatusDisplayItem extends StatusDisplayItem{ case POLL -> R.attr.colorPoll; default -> android.R.attr.colorAccent; }))); + deleteNotification.setVisibility(GlobalUserPreferences.enableDeleteNotifications && item.notification != null ? View.VISIBLE : View.GONE); itemView.setBackgroundResource(item.notification.type != Notification.Type.POLL && item.notification.type != Notification.Type.REPORT ? selectableItemBackground : 0); itemView.setClickable(item.notification.type != Notification.Type.POLL); + itemView.setPaddingRelative(itemView.getPaddingStart(), itemView.getPaddingTop(), + GlobalUserPreferences.enableDeleteNotifications ? V.dp(4) : V.dp(16), itemView.getPaddingBottom()); } public void onItemClick(View v) { 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 4c64a07f2..6455fa82b 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 @@ -30,6 +30,7 @@ import org.joinmastodon.android.model.LegacyFilter; import org.joinmastodon.android.model.FilterAction; import org.joinmastodon.android.model.FilterContext; import org.joinmastodon.android.model.FilterResult; +import org.joinmastodon.android.model.Notification; import org.joinmastodon.android.model.Poll; import org.joinmastodon.android.model.ScheduledStatus; import org.joinmastodon.android.model.Status; @@ -145,7 +146,7 @@ public abstract class StatusDisplayItem{ Status statusForContent=status.getContentStatus(); Bundle args=new Bundle(); args.putString("account", accountID); - ScheduledStatus scheduledStatus = parentObject instanceof ScheduledStatus ? (ScheduledStatus) parentObject : null; + ScheduledStatus scheduledStatus = parentObject instanceof ScheduledStatus s ? s : null; HeaderStatusDisplayItem header=null; boolean hideCounts=!AccountSessionManager.get(accountID).getLocalPreferences().showInteractionCounts; @@ -201,7 +202,7 @@ public abstract class StatusDisplayItem{ if((flags & FLAG_CHECKABLE)!=0) items.add(header=new CheckableHeaderStatusDisplayItem(parentID, statusForContent.account, statusForContent.createdAt, fragment, accountID, statusForContent, null)); else - items.add(header=new HeaderStatusDisplayItem(parentID, statusForContent.account, statusForContent.createdAt, fragment, accountID, statusForContent, null, null, scheduledStatus)); + items.add(header=new HeaderStatusDisplayItem(parentID, statusForContent.account, statusForContent.createdAt, fragment, accountID, statusForContent, null, parentObject instanceof Notification n ? n : null, scheduledStatus)); } LegacyFilter applyingFilter=null; diff --git a/mastodon/src/main/res/layout/display_item_header.xml b/mastodon/src/main/res/layout/display_item_header.xml index 8aa859ec8..28444aac6 100644 --- a/mastodon/src/main/res/layout/display_item_header.xml +++ b/mastodon/src/main/res/layout/display_item_header.xml @@ -3,8 +3,8 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" - android:paddingRight="16dp" - android:paddingLeft="16dp"> + android:paddingHorizontal="16dp"> + + + - - + - + - - - - - - - + tools:tint="#0f0" + tools:src="@drawable/ic_fluent_arrow_repeat_all_24_filled"/> - + + + android:layout_height="wrap_content"> - + - \ No newline at end of file + + + + + + + + + + +