diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index ac6abacb7b..3153cb28d7 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -360,6 +360,7 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. static final int REQUEST_PICK_CONTACT = 23; static final int REQUEST_BUTTONS = 24; private static final int REQUEST_ASKED_RAW = 25; + private static final int REQUEST_ALL_READ = 26; static final String ACTION_STORE_RAW = BuildConfig.APPLICATION_ID + ".STORE_RAW"; static final String ACTION_DECRYPT = BuildConfig.APPLICATION_ID + ".DECRYPT"; @@ -4482,60 +4483,70 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. } private void onMenuMarkAllRead() { - new AlertDialog.Builder(getContext()) - .setTitle(R.string.title_mark_all_read) - .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - Bundle args = new Bundle(); - args.putString("type", type); - args.putLong("folder", folder); + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); + boolean all_read_asked = prefs.getBoolean("all_read_asked", false); + if (all_read_asked) { + markAllRead(); + return; + } - new SimpleTask() { - @Override - protected Void onExecute(Context context, Bundle args) throws Throwable { - String type = args.getString("type"); - long folder = args.getLong("folder"); + Bundle args = new Bundle(); + args.putString("question", getString(R.string.title_mark_all_read)); + args.putString("notagain", "all_read_asked"); - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); - boolean filter_unflagged = prefs.getBoolean("filter_unflagged", false); - boolean filter_unknown = prefs.getBoolean("filter_unknown", false); - boolean filter_snoozed = prefs.getBoolean("filter_snoozed", true); - boolean language_detection = prefs.getBoolean("language_detection", false); - String filter_language = prefs.getString("filter_language", null); + FragmentDialogAsk ask = new FragmentDialogAsk(); + ask.setArguments(args); + ask.setTargetFragment(FragmentMessages.this, REQUEST_ALL_READ); + ask.show(getParentFragmentManager(), "messages:allread"); - DB db = DB.getInstance(context); - try { - db.beginTransaction(); - - List ids = db.message().getMessageUnseen( - folder < 0 ? null : folder, - folder < 0 ? type : null, - filter_unflagged, filter_unknown, filter_snoozed, - language_detection ? filter_language : null); - for (long id : ids) { - EntityMessage message = db.message().getMessage(id); - if (message != null) - EntityOperation.queue(context, message, EntityOperation.SEEN, true); - } + } - db.setTransactionSuccessful(); - } finally { - db.endTransaction(); - } + private void markAllRead() { + Bundle args = new Bundle(); + args.putString("type", type); + args.putLong("folder", folder); - return null; - } + new SimpleTask() { + @Override + protected Void onExecute(Context context, Bundle args) throws Throwable { + String type = args.getString("type"); + long folder = args.getLong("folder"); - @Override - protected void onException(Bundle args, Throwable ex) { - Log.unexpectedError(getParentFragmentManager(), ex); - } - }.execute(FragmentMessages.this, args, "message:read"); + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext()); + boolean filter_unflagged = prefs.getBoolean("filter_unflagged", false); + boolean filter_unknown = prefs.getBoolean("filter_unknown", false); + boolean filter_snoozed = prefs.getBoolean("filter_snoozed", true); + boolean language_detection = prefs.getBoolean("language_detection", false); + String filter_language = prefs.getString("filter_language", null); + + DB db = DB.getInstance(context); + try { + db.beginTransaction(); + + List ids = db.message().getMessageUnseen( + folder < 0 ? null : folder, + folder < 0 ? type : null, + filter_unflagged, filter_unknown, filter_snoozed, + language_detection ? filter_language : null); + for (long id : ids) { + EntityMessage message = db.message().getMessage(id); + if (message != null) + EntityOperation.queue(context, message, EntityOperation.SEEN, true); } - }) - .setNegativeButton(android.R.string.cancel, null) - .show(); + + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); + } + + return null; + } + + @Override + protected void onException(Bundle args, Throwable ex) { + Log.unexpectedError(getParentFragmentManager(), ex); + } + }.execute(FragmentMessages.this, args, "messages:allread"); } private void onMenuSyncMore() { @@ -6047,6 +6058,10 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. if (resultCode == RESULT_OK) _onActionRaw(); break; + case REQUEST_ALL_READ: + if (requestCode == RESULT_OK) + markAllRead(); + break; } } catch (Throwable ex) { Log.e(ex); diff --git a/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java b/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java index fd5765a703..5f45a5c0db 100644 --- a/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java +++ b/app/src/main/java/eu/faircode/email/FragmentOptionsMisc.java @@ -151,7 +151,7 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc "selected_folders", "move_1_confirmed", "move_n_confirmed", "last_search_senders", "last_search_recipients", "last_search_subject", "last_search_keywords", "last_search_message", "last_search", "identities_asked", "identities_primary_hint", - "raw_asked", + "raw_asked", "all_read_asked", "cc_bcc", "inline_image_hint", "compose_reference", "send_dialog", "setup_reminder", "setup_advanced" };