diff --git a/mastodon/src/github/res/drawable/ic_fluent_mail_inbox_dismiss_24_regular.xml b/mastodon/src/github/res/drawable/ic_fluent_mail_inbox_dismiss_24_regular.xml
new file mode 100644
index 000000000..e32e4fab5
--- /dev/null
+++ b/mastodon/src/github/res/drawable/ic_fluent_mail_inbox_dismiss_24_regular.xml
@@ -0,0 +1,3 @@
+
+
+
diff --git a/mastodon/src/github/res/drawable/ic_fluent_mail_inbox_dismiss_28_regular.xml b/mastodon/src/github/res/drawable/ic_fluent_mail_inbox_dismiss_28_regular.xml
new file mode 100644
index 000000000..2ea945f3d
--- /dev/null
+++ b/mastodon/src/github/res/drawable/ic_fluent_mail_inbox_dismiss_28_regular.xml
@@ -0,0 +1,3 @@
+
+
+
diff --git a/mastodon/src/github/res/drawable/ic_fluent_open_24_regular.xml b/mastodon/src/github/res/drawable/ic_fluent_open_24_regular.xml
new file mode 100644
index 000000000..e18fe0aed
--- /dev/null
+++ b/mastodon/src/github/res/drawable/ic_fluent_open_24_regular.xml
@@ -0,0 +1,3 @@
+
+
+
diff --git a/mastodon/src/github/res/drawable/ic_fluent_sign_out_24_regular.xml b/mastodon/src/github/res/drawable/ic_fluent_sign_out_24_regular.xml
new file mode 100644
index 000000000..d20ea1330
--- /dev/null
+++ b/mastodon/src/github/res/drawable/ic_fluent_sign_out_24_regular.xml
@@ -0,0 +1,3 @@
+
+
+
diff --git a/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java b/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java
index ac3124565..19fd6cce8 100644
--- a/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java
+++ b/mastodon/src/main/java/org/joinmastodon/android/GlobalUserPreferences.java
@@ -30,6 +30,7 @@ public class GlobalUserPreferences{
public static boolean voteButtonForSingleChoice;
public static boolean showDifferentiatedPushNoticationIcons;
public static boolean relocatePublishButton;
+ public static boolean enableDeleteNotifications;
public static ThemePreference theme;
public static ColorPreference color;
@@ -62,6 +63,7 @@ public class GlobalUserPreferences{
disableDividers=prefs.getBoolean("disableDividers", true);
relocatePublishButton=prefs.getBoolean("relocatePublishButton", true);
voteButtonForSingleChoice=prefs.getBoolean("voteButtonForSingleChoice", true);
+ enableDeleteNotifications=prefs.getBoolean("enableDeleteNotifications", true);
theme=ThemePreference.values()[prefs.getInt("theme", 0)];
recentLanguages=fromJson(prefs.getString("recentLanguages", "{}"), recentLanguagesType, new HashMap<>());
@@ -93,6 +95,7 @@ public class GlobalUserPreferences{
.putBoolean("disableDividers", disableDividers)
.putBoolean("relocatePublishButton", relocatePublishButton)
.putBoolean("showDifferentiatedPushNoticationIcons", showDifferentiatedPushNoticationIcons)
+ .putBoolean("enableDeleteNotifications", enableDeleteNotifications)
.putInt("theme", theme.ordinal())
.putString("color", color.name())
.putString("recentLanguages", gson.toJson(recentLanguages))
diff --git a/mastodon/src/main/java/org/joinmastodon/android/api/StatusInteractionController.java b/mastodon/src/main/java/org/joinmastodon/android/api/StatusInteractionController.java
index 33df962bf..ec45b6d90 100644
--- a/mastodon/src/main/java/org/joinmastodon/android/api/StatusInteractionController.java
+++ b/mastodon/src/main/java/org/joinmastodon/android/api/StatusInteractionController.java
@@ -19,12 +19,18 @@ import me.grishka.appkit.api.ErrorResponse;
public class StatusInteractionController{
private final String accountID;
+ private final boolean updateCounters;
private final HashMap runningFavoriteRequests=new HashMap<>();
private final HashMap runningReblogRequests=new HashMap<>();
private final HashMap runningBookmarkRequests=new HashMap<>();
- public StatusInteractionController(String accountID){
+ public StatusInteractionController(String accountID, boolean updateCounters) {
this.accountID=accountID;
+ this.updateCounters=updateCounters;
+ }
+
+ public StatusInteractionController(String accountID){
+ this(accountID, true);
}
public void setFavorited(Status status, boolean favorited, Consumer cb){
@@ -42,7 +48,7 @@ public class StatusInteractionController{
runningFavoriteRequests.remove(status.id);
result.favouritesCount = Math.max(0, status.favouritesCount) + (favorited ? 1 : -1);
cb.accept(result);
- E.post(new StatusCountersUpdatedEvent(result));
+ if (updateCounters) E.post(new StatusCountersUpdatedEvent(result));
}
@Override
@@ -51,13 +57,13 @@ public class StatusInteractionController{
error.showToast(MastodonApp.context);
status.favourited=!favorited;
cb.accept(status);
- E.post(new StatusCountersUpdatedEvent(status));
+ if (updateCounters) E.post(new StatusCountersUpdatedEvent(status));
}
})
.exec(accountID);
runningFavoriteRequests.put(status.id, req);
status.favourited=favorited;
- E.post(new StatusCountersUpdatedEvent(status));
+ if (updateCounters) E.post(new StatusCountersUpdatedEvent(status));
}
public void setReblogged(Status status, boolean reblogged, StatusPrivacy visibility, Consumer cb){
@@ -76,7 +82,7 @@ public class StatusInteractionController{
runningReblogRequests.remove(status.id);
result.reblogsCount = Math.max(0, status.reblogsCount) + (reblogged ? 1 : -1);
cb.accept(result);
- E.post(new StatusCountersUpdatedEvent(result));
+ if (updateCounters) E.post(new StatusCountersUpdatedEvent(result));
}
@Override
@@ -85,13 +91,13 @@ public class StatusInteractionController{
error.showToast(MastodonApp.context);
status.reblogged=!reblogged;
cb.accept(status);
- E.post(new StatusCountersUpdatedEvent(status));
+ if (updateCounters) E.post(new StatusCountersUpdatedEvent(status));
}
})
.exec(accountID);
runningReblogRequests.put(status.id, req);
status.reblogged=reblogged;
- E.post(new StatusCountersUpdatedEvent(status));
+ if (updateCounters) E.post(new StatusCountersUpdatedEvent(status));
}
public void setBookmarked(Status status, boolean bookmarked){
@@ -112,7 +118,7 @@ public class StatusInteractionController{
public void onSuccess(Status result){
runningBookmarkRequests.remove(status.id);
cb.accept(result);
- E.post(new StatusCountersUpdatedEvent(result));
+ if (updateCounters) E.post(new StatusCountersUpdatedEvent(result));
}
@Override
@@ -121,12 +127,12 @@ public class StatusInteractionController{
error.showToast(MastodonApp.context);
status.bookmarked=!bookmarked;
cb.accept(status);
- E.post(new StatusCountersUpdatedEvent(status));
+ if (updateCounters) E.post(new StatusCountersUpdatedEvent(status));
}
})
.exec(accountID);
runningBookmarkRequests.put(status.id, req);
status.bookmarked=bookmarked;
- E.post(new StatusCountersUpdatedEvent(status));
+ if (updateCounters) E.post(new StatusCountersUpdatedEvent(status));
}
}
diff --git a/mastodon/src/main/java/org/joinmastodon/android/api/requests/notifications/DismissNotification.java b/mastodon/src/main/java/org/joinmastodon/android/api/requests/notifications/DismissNotification.java
new file mode 100644
index 000000000..5c2399774
--- /dev/null
+++ b/mastodon/src/main/java/org/joinmastodon/android/api/requests/notifications/DismissNotification.java
@@ -0,0 +1,17 @@
+package org.joinmastodon.android.api.requests.notifications;
+
+import com.google.gson.reflect.TypeToken;
+
+import org.joinmastodon.android.api.ApiUtils;
+import org.joinmastodon.android.api.MastodonAPIRequest;
+import org.joinmastodon.android.model.Notification;
+
+import java.util.EnumSet;
+import java.util.List;
+
+public class DismissNotification extends MastodonAPIRequest