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);