Skip to content

Commit dc33c6e

Browse files
folkematQuantumBadger
authored andcommitted
Mark all inbox messages as read when leaving the inbox
1 parent b0f6f64 commit dc33c6e

File tree

2 files changed

+66
-27
lines changed

2 files changed

+66
-27
lines changed

src/main/java/org/quantumbadger/redreader/activities/InboxListingActivity.java

Lines changed: 64 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -82,13 +82,16 @@ public final class InboxListingActivity extends ViewsBaseActivity {
8282

8383
private static final int OPTIONS_MENU_MARK_ALL_AS_READ = 0;
8484
private static final int OPTIONS_MENU_SHOW_UNREAD_ONLY = 1;
85+
private static final int OPTIONS_MENU_MARK_INBOX_AS_READ_WHEN_BACK = 2;
8586

8687
public enum InboxType {
8788
INBOX, SENT, MODMAIL
8889
}
8990

9091
private static final String PREF_ONLY_UNREAD = "inbox_only_show_unread";
9192

93+
private static final String PREF_MARK_INBOX_READ_BACK = "inbox_mark_as_read_when_back";
94+
9295
private GroupedRecyclerViewAdapter adapter;
9396

9497
private LoadingView loadingView;
@@ -99,6 +102,10 @@ public enum InboxType {
99102
private InboxType inboxType;
100103
private boolean mOnlyShowUnread;
101104

105+
private boolean mMarkInboxAsReadWhenBack;
106+
107+
private boolean mUserWantsBack = false;
108+
102109
private RRThemeAttributes mTheme;
103110
private RedditChangeDataManager mChangeDataManager;
104111

@@ -186,6 +193,8 @@ public void onCreate(final Bundle savedInstanceState) {
186193

187194
mOnlyShowUnread = sharedPreferences.getBoolean(PREF_ONLY_UNREAD, false);
188195

196+
mMarkInboxAsReadWhenBack = sharedPreferences.getBoolean(PREF_MARK_INBOX_READ_BACK, false);
197+
189198
switch(inboxType) {
190199
case SENT:
191200
title = getString(R.string.mainmenu_sent_messages);
@@ -424,9 +433,46 @@ public void onFailure(@NonNull final RRError error) {
424433
cm.makeRequest(request);
425434
}
426435

436+
private void markInboxAsRead() {
437+
RedditAPI.markAllAsRead(
438+
CacheManager.getInstance(this),
439+
new APIResponseHandler.ActionResponseHandler(this) {
440+
@Override
441+
protected void onSuccess() {
442+
if (!mUserWantsBack) { //Don't annoy the user
443+
General.quickToast(
444+
context,
445+
R.string.mark_all_as_read_success);
446+
}
447+
}
448+
449+
@Override
450+
protected void onCallbackException(final Throwable t) {
451+
BugReportActivity.addGlobalError(new RRError(
452+
"Mark all as Read failed",
453+
"Callback exception",
454+
true,
455+
t));
456+
}
457+
458+
@Override
459+
protected void onFailure(@NonNull final RRError error) {
460+
if (!mUserWantsBack) { //Don't annoy the user
461+
General.showResultDialog(
462+
InboxListingActivity.this,
463+
error);
464+
}
465+
}
466+
},
467+
RedditAccountManager.getInstance(this).getDefaultAccount(),
468+
this);
469+
}
470+
427471
@Override
428472
public void onBackPressed() {
429473
if(General.onBackPressed()) {
474+
mUserWantsBack = true;
475+
markInboxAsRead();
430476
super.onBackPressed();
431477
}
432478
}
@@ -439,48 +485,39 @@ public boolean onCreateOptionsMenu(final Menu menu) {
439485

440486
menu.add(0, OPTIONS_MENU_MARK_ALL_AS_READ, 0, R.string.mark_all_as_read);
441487
menu.add(0, OPTIONS_MENU_SHOW_UNREAD_ONLY, 1, R.string.inbox_unread_only);
488+
menu.add(0, OPTIONS_MENU_MARK_INBOX_AS_READ_WHEN_BACK, 2, R.string.mark_inbox_as_read_when_back);
442489
menu.getItem(1).setCheckable(true);
443490
if(mOnlyShowUnread) {
444491
menu.getItem(1).setChecked(true);
445492
}
493+
menu.getItem(2).setCheckable(true);
494+
if(mMarkInboxAsReadWhenBack) {
495+
menu.getItem(2).setChecked(true);
496+
}
446497
return super.onCreateOptionsMenu(menu);
447498
}
448499

449500
@Override
450501
public boolean onOptionsItemSelected(final MenuItem item) {
451502
switch(item.getItemId()) {
452503
case OPTIONS_MENU_MARK_ALL_AS_READ:
453-
RedditAPI.markAllAsRead(
454-
CacheManager.getInstance(this),
455-
new APIResponseHandler.ActionResponseHandler(this) {
456-
@Override
457-
protected void onSuccess() {
458-
General.quickToast(
459-
context,
460-
R.string.mark_all_as_read_success);
461-
}
504+
markInboxAsRead();
505+
return true;
462506

463-
@Override
464-
protected void onCallbackException(final Throwable t) {
465-
BugReportActivity.addGlobalError(new RRError(
466-
"Mark all as Read failed",
467-
"Callback exception",
468-
true,
469-
t));
470-
}
507+
case OPTIONS_MENU_MARK_INBOX_AS_READ_WHEN_BACK: {
471508

472-
@Override
473-
protected void onFailure(@NonNull final RRError error) {
474-
General.showResultDialog(
475-
InboxListingActivity.this,
476-
error);
477-
}
478-
},
479-
RedditAccountManager.getInstance(this).getDefaultAccount(),
480-
this);
509+
final boolean enabled = !item.isChecked();
481510

482-
return true;
511+
item.setChecked(enabled);
512+
mMarkInboxAsReadWhenBack = enabled;
483513

514+
General.getSharedPrefs(this)
515+
.edit()
516+
.putBoolean(PREF_MARK_INBOX_READ_BACK, enabled)
517+
.apply();
518+
519+
return true;
520+
}
484521
case OPTIONS_MENU_SHOW_UNREAD_ONLY: {
485522

486523
final boolean enabled = !item.isChecked();

src/main/res/values/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1918,4 +1918,6 @@
19181918
<string name="pref_behaviour_video_frame_step_title">Enable stepping frame by frame</string>
19191919
<string name="pref_behaviour_video_frame_step_key" translatable="false">pref_behaviour_video_frame_step</string>
19201920

1921+
<!-- 2025-04-21 -->
1922+
<string name="mark_inbox_as_read_when_back">Read all when leaving</string>
19211923
</resources>

0 commit comments

Comments
 (0)