From 5ce12583f6d542b327e36c867afdbd294fc056fd Mon Sep 17 00:00:00 2001 From: M66B Date: Tue, 4 Feb 2020 09:36:41 +0100 Subject: [PATCH] Multiple select, set importance --- .../eu/faircode/email/FragmentMessages.java | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index 4f3771df58..ed9f758620 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -68,6 +68,7 @@ import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.MotionEvent; +import android.view.SubMenu; import android.view.View; import android.view.ViewGroup; import android.view.animation.Animation; @@ -2089,6 +2090,11 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. if (result.unflagged || result.flagged) popupMenu.getMenu().add(Menu.NONE, R.string.title_flag_color, order++, R.string.title_flag_color); + SubMenu importance = popupMenu.getMenu().addSubMenu(R.string.title_set_importance); + importance.add(Menu.NONE, R.string.title_importance_low, 1, R.string.title_importance_low); + importance.add(Menu.NONE, R.string.title_importance_normal, 2, R.string.title_importance_normal); + importance.add(Menu.NONE, R.string.title_importance_high, 3, R.string.title_importance_high); + if (result.hasArchive && !result.isArchive) // has archive and not is archive/drafts popupMenu.getMenu().add(Menu.NONE, R.string.title_archive, order++, R.string.title_archive); @@ -2136,6 +2142,15 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. case R.string.title_flag_color: onActionFlagColorSelection(); return true; + case R.string.title_importance_low: + onActionSetImportanceSelection(EntityMessage.PRIORITIY_LOW); + return true; + case R.string.title_importance_normal: + onActionSetImportanceSelection(EntityMessage.PRIORITIY_NORMAL); + return true; + case R.string.title_importance_high: + onActionSetImportanceSelection(EntityMessage.PRIORITIY_HIGH); + return true; case R.string.title_archive: onActionMoveSelection(EntityFolder.ARCHIVE); return true; @@ -2372,6 +2387,53 @@ public class FragmentMessages extends FragmentBase implements SharedPreferences. fragment.show(getParentFragmentManager(), "messages:color"); } + private void onActionSetImportanceSelection(int importance) { + Bundle args = new Bundle(); + args.putLongArray("selected", getSelection()); + args.putInt("importance", importance); + + new SimpleTask() { + @Override + protected Void onExecute(Context context, Bundle args) { + long[] selected = args.getLongArray("selected"); + Integer importance = args.getInt("importance"); + if (EntityMessage.PRIORITIY_NORMAL.equals(importance)) + importance = null; + + DB db = DB.getInstance(context); + try { + db.beginTransaction(); + + for (long id : selected) { + EntityMessage message = db.message().getMessage(id); + if (message == null) + continue; + + EntityAccount account = db.account().getAccount(message.account); + if (account == null) + continue; + + List messages = db.message().getMessagesByThread( + message.account, message.thread, threading ? null : id, message.folder); + for (EntityMessage threaded : messages) + db.message().setMessageImportance(threaded.id, importance); + } + + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); + } + + return null; + } + + @Override + protected void onException(Bundle args, Throwable ex) { + Log.unexpectedError(getParentFragmentManager(), ex); + } + }.execute(this, args, "messages:set:importance"); + } + private void onActionDeleteSelection() { Bundle args = new Bundle(); args.putLongArray("selected", getSelection());