@@ -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 ();
0 commit comments