diff --git a/src/main/assets/changelog-alpha.txt b/src/main/assets/changelog-alpha.txt index c6b17b098..805060c13 100644 --- a/src/main/assets/changelog-alpha.txt +++ b/src/main/assets/changelog-alpha.txt @@ -1,6 +1,7 @@ /Alpha 360 (2025-04-21) Added video frame step controls (thanks to ecawthorne and japanesephundroid) Make floating toolbar buttons respond to left handed mode (thanks to ecawthorne) +Added option to mark all messages read when leaving inbox (thanks to folkemat) /Alpha 359 (2025-04-20) Added support for emotes in comment flairs (thanks to bharatknv) diff --git a/src/main/assets/changelog.txt b/src/main/assets/changelog.txt index da1a76171..c79ae9512 100644 --- a/src/main/assets/changelog.txt +++ b/src/main/assets/changelog.txt @@ -3,6 +3,7 @@ Added video playback speed control (thanks to folkemat) Added video frame step controls (thanks to ecawthorne and japanesephundroid) Added support for emotes in comment flairs (thanks to bharatknv) Show label on crossposts, and add "Go to Crosspost Origin" to post menu (thanks to folkemat) +Added option to mark all messages read when leaving inbox (thanks to folkemat) Added "Mark as Read/Unread" fling action, and optional post menu item (thanks to JoshAusHessen and codeofdusk) Added preference to prevent posts being marked as read when clicked (thanks to Daniel Ho) Remove random subreddit feature which is no longer supported by Reddit (thanks to Mark Yu) diff --git a/src/main/java/org/quantumbadger/redreader/activities/InboxListingActivity.java b/src/main/java/org/quantumbadger/redreader/activities/InboxListingActivity.java index 06a1ed38a..2a23d6daa 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,16 @@ 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 +502,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 eba05baca..3c829adaa 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -1918,4 +1918,6 @@ Enable stepping frame by frame pref_behaviour_video_frame_step + + Read all when leaving