From a29fa857626fe1c24eaedab59b8a1dae85ba557e Mon Sep 17 00:00:00 2001
From: folkemat <96705437+folkemat@users.noreply.github.com>
Date: Sat, 20 Jul 2024 17:19:41 +0200
Subject: [PATCH 1/2] Mark all inbox messages as read when leaving the inbox
---
.../activities/InboxListingActivity.java | 91 +++++++++++++------
src/main/res/values/strings.xml | 3 +
2 files changed, 67 insertions(+), 27 deletions(-)
diff --git a/src/main/java/org/quantumbadger/redreader/activities/InboxListingActivity.java b/src/main/java/org/quantumbadger/redreader/activities/InboxListingActivity.java
index 0815371fa..3e16f05ac 100644
--- a/src/main/java/org/quantumbadger/redreader/activities/InboxListingActivity.java
+++ b/src/main/java/org/quantumbadger/redreader/activities/InboxListingActivity.java
@@ -82,6 +82,7 @@ public final class InboxListingActivity extends ViewsBaseActivity {
private static final int OPTIONS_MENU_MARK_ALL_AS_READ = 0;
private static final int OPTIONS_MENU_SHOW_UNREAD_ONLY = 1;
+ private static final int OPTIONS_MENU_MARK_INBOX_AS_READ_WHEN_BACK = 2;
public enum InboxType {
INBOX, SENT, MODMAIL
@@ -89,6 +90,8 @@ public enum InboxType {
private static final String PREF_ONLY_UNREAD = "inbox_only_show_unread";
+ private static final String PREF_MARK_INBOX_READ_BACK = "inbox_mark_as_read_when_back";
+
private GroupedRecyclerViewAdapter adapter;
private LoadingView loadingView;
@@ -99,6 +102,10 @@ public enum InboxType {
private InboxType inboxType;
private boolean mOnlyShowUnread;
+ private boolean mMarkInboxAsReadWhenBack;
+
+ private boolean mUserWantsBack = false;
+
private RRThemeAttributes mTheme;
private RedditChangeDataManager mChangeDataManager;
@@ -186,6 +193,8 @@ public void onCreate(final Bundle savedInstanceState) {
mOnlyShowUnread = sharedPreferences.getBoolean(PREF_ONLY_UNREAD, false);
+ mMarkInboxAsReadWhenBack = sharedPreferences.getBoolean(PREF_MARK_INBOX_READ_BACK, false);
+
switch(inboxType) {
case SENT:
title = getString(R.string.mainmenu_sent_messages);
@@ -424,9 +433,46 @@ public void onFailure(@NonNull final RRError error) {
cm.makeRequest(request);
}
+ private void markInboxAsRead() {
+ RedditAPI.markAllAsRead(
+ CacheManager.getInstance(this),
+ new APIResponseHandler.ActionResponseHandler(this) {
+ @Override
+ protected void onSuccess() {
+ if (!mUserWantsBack) { //Don't annoy the user
+ General.quickToast(
+ context,
+ R.string.mark_all_as_read_success);
+ }
+ }
+
+ @Override
+ protected void onCallbackException(final Throwable t) {
+ BugReportActivity.addGlobalError(new RRError(
+ "Mark all as Read failed",
+ "Callback exception",
+ true,
+ t));
+ }
+
+ @Override
+ protected void onFailure(@NonNull final RRError error) {
+ if (!mUserWantsBack) { //Don't annoy the user
+ General.showResultDialog(
+ InboxListingActivity.this,
+ error);
+ }
+ }
+ },
+ RedditAccountManager.getInstance(this).getDefaultAccount(),
+ this);
+ }
+
@Override
public void onBackPressed() {
if(General.onBackPressed()) {
+ mUserWantsBack = true;
+ markInboxAsRead();
super.onBackPressed();
}
}
@@ -439,10 +485,15 @@ public boolean onCreateOptionsMenu(final Menu menu) {
menu.add(0, OPTIONS_MENU_MARK_ALL_AS_READ, 0, R.string.mark_all_as_read);
menu.add(0, OPTIONS_MENU_SHOW_UNREAD_ONLY, 1, R.string.inbox_unread_only);
+ menu.add(0, OPTIONS_MENU_MARK_INBOX_AS_READ_WHEN_BACK, 2, R.string.mark_inbox_as_read_when_back);
menu.getItem(1).setCheckable(true);
if(mOnlyShowUnread) {
menu.getItem(1).setChecked(true);
}
+ menu.getItem(2).setCheckable(true);
+ if(mMarkInboxAsReadWhenBack) {
+ menu.getItem(2).setChecked(true);
+ }
return super.onCreateOptionsMenu(menu);
}
@@ -450,37 +501,23 @@ public boolean onCreateOptionsMenu(final Menu menu) {
public boolean onOptionsItemSelected(final MenuItem item) {
switch(item.getItemId()) {
case OPTIONS_MENU_MARK_ALL_AS_READ:
- RedditAPI.markAllAsRead(
- CacheManager.getInstance(this),
- new APIResponseHandler.ActionResponseHandler(this) {
- @Override
- protected void onSuccess() {
- General.quickToast(
- context,
- R.string.mark_all_as_read_success);
- }
+ markInboxAsRead();
+ return true;
- @Override
- protected void onCallbackException(final Throwable t) {
- BugReportActivity.addGlobalError(new RRError(
- "Mark all as Read failed",
- "Callback exception",
- true,
- t));
- }
+ case OPTIONS_MENU_MARK_INBOX_AS_READ_WHEN_BACK: {
- @Override
- protected void onFailure(@NonNull final RRError error) {
- General.showResultDialog(
- InboxListingActivity.this,
- error);
- }
- },
- RedditAccountManager.getInstance(this).getDefaultAccount(),
- this);
+ final boolean enabled = !item.isChecked();
- return true;
+ item.setChecked(enabled);
+ mMarkInboxAsReadWhenBack = enabled;
+ General.getSharedPrefs(this)
+ .edit()
+ .putBoolean(PREF_MARK_INBOX_READ_BACK, enabled)
+ .apply();
+
+ return true;
+ }
case OPTIONS_MENU_SHOW_UNREAD_ONLY: {
final boolean enabled = !item.isChecked();
diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml
index 7b74b63a2..43eaab646 100644
--- a/src/main/res/values/strings.xml
+++ b/src/main/res/values/strings.xml
@@ -1894,4 +1894,7 @@
Invalid account
Selected account is not currently logged in
+
+
+ Read all when leaving
From 6cb5a56d668bd67e3599ef577faee88099b8d4c1 Mon Sep 17 00:00:00 2001
From: folkemat <96705437+folkemat@users.noreply.github.com>
Date: Sat, 20 Jul 2024 17:44:55 +0200
Subject: [PATCH 2/2] Fix line length
---
.../redreader/activities/InboxListingActivity.java | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/main/java/org/quantumbadger/redreader/activities/InboxListingActivity.java b/src/main/java/org/quantumbadger/redreader/activities/InboxListingActivity.java
index 3e16f05ac..579a939da 100644
--- a/src/main/java/org/quantumbadger/redreader/activities/InboxListingActivity.java
+++ b/src/main/java/org/quantumbadger/redreader/activities/InboxListingActivity.java
@@ -485,7 +485,8 @@ public boolean onCreateOptionsMenu(final Menu menu) {
menu.add(0, OPTIONS_MENU_MARK_ALL_AS_READ, 0, R.string.mark_all_as_read);
menu.add(0, OPTIONS_MENU_SHOW_UNREAD_ONLY, 1, R.string.inbox_unread_only);
- menu.add(0, OPTIONS_MENU_MARK_INBOX_AS_READ_WHEN_BACK, 2, R.string.mark_inbox_as_read_when_back);
+ menu.add(0, OPTIONS_MENU_MARK_INBOX_AS_READ_WHEN_BACK,
+ 2, R.string.mark_inbox_as_read_when_back);
menu.getItem(1).setCheckable(true);
if(mOnlyShowUnread) {
menu.getItem(1).setChecked(true);