From ab8ae3761e32da2c07f3cb6e08a3158e9f44a480 Mon Sep 17 00:00:00 2001 From: M66B Date: Fri, 8 Nov 2024 10:56:31 +0100 Subject: [PATCH] Added batch manage keywords button --- .../email/FragmentDialogQuickActions.java | 3 ++ .../eu/faircode/email/FragmentMessages.java | 28 +++++++++++++++++-- .../main/res/layout/dialog_quick_actions.xml | 15 +++++++++- app/src/main/res/layout/fragment_messages.xml | 16 ++++++++++- 4 files changed, 58 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/FragmentDialogQuickActions.java b/app/src/main/java/eu/faircode/email/FragmentDialogQuickActions.java index acb35dff33..0f4bb0c95b 100644 --- a/app/src/main/java/eu/faircode/email/FragmentDialogQuickActions.java +++ b/app/src/main/java/eu/faircode/email/FragmentDialogQuickActions.java @@ -63,6 +63,7 @@ public class FragmentDialogQuickActions extends FragmentDialogBase { final CheckBox cbDelete = dview.findViewById(R.id.cbDelete); final CheckBox cbJunk = dview.findViewById(R.id.cbJunk); final CheckBox cbInbox = dview.findViewById(R.id.cbInbox); + final CheckBox cbKeywords = dview.findViewById(R.id.cbKeywords); final CheckBox cbClear = dview.findViewById(R.id.cbClear); cbSummarize.setVisibility(AI.isAvailable(context) ? View.VISIBLE : View.GONE); @@ -86,6 +87,7 @@ public class FragmentDialogQuickActions extends FragmentDialogBase { cbDelete.setChecked(prefs.getBoolean("more_delete", false)); cbJunk.setChecked(prefs.getBoolean("more_junk", true)); cbInbox.setChecked(prefs.getBoolean("more_inbox", true)); + cbKeywords.setChecked(prefs.getBoolean("more_keywords", false)); cbClear.setChecked(prefs.getBoolean("more_clear", true)); return new AlertDialog.Builder(getContext()) @@ -111,6 +113,7 @@ public class FragmentDialogQuickActions extends FragmentDialogBase { editor.putBoolean("more_delete", cbDelete.isChecked()); editor.putBoolean("more_junk", cbJunk.isChecked()); editor.putBoolean("more_inbox", cbInbox.isChecked()); + editor.putBoolean("more_keywords", cbKeywords.isChecked()); editor.putBoolean("more_clear", cbClear.isChecked()); editor.apply(); sendResult(Activity.RESULT_OK); diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index e310088be9..0517857f46 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -315,6 +315,7 @@ public class FragmentMessages extends FragmentBase private ImageButton ibDelete; private ImageButton ibJunk; private ImageButton ibInbox; + private ImageButton ibKeywords; private ImageButton ibMoreSettings; private FloatingActionButton fabSearch; private FloatingActionButton fabError; @@ -666,6 +667,7 @@ public class FragmentMessages extends FragmentBase ibDelete = view.findViewById(R.id.ibDelete); ibJunk = view.findViewById(R.id.ibJunk); ibInbox = view.findViewById(R.id.ibInbox); + ibKeywords = view.findViewById(R.id.ibKeywords); ibMoreSettings = view.findViewById(R.id.ibMoreSettings); fabSearch = view.findViewById(R.id.fabSearch); fabError = view.findViewById(R.id.fabError); @@ -1831,6 +1833,14 @@ public class FragmentMessages extends FragmentBase } }); + ibKeywords.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + boolean more_clear = prefs.getBoolean("more_clear", true); + onActionManageKeywords(more_clear); + } + }); + ibMoreSettings.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -4686,7 +4696,7 @@ public class FragmentMessages extends FragmentBase onActionMoveSelectionAccount(result.copyto.id, true, result.folders); return true; } else if (itemId == R.string.title_manage_keywords) { - onActionManageKeywords(); + onActionManageKeywords(false); return true; } else if (itemId == R.string.title_search_sender) { long[] ids = getSelection(); @@ -5188,7 +5198,7 @@ public class FragmentMessages extends FragmentBase fragment.show(getParentFragmentManager(), "messages:move"); } - private void onActionManageKeywords() { + private void onActionManageKeywords(boolean clear) { Bundle args = new Bundle(); args.putLongArray("ids", getSelection()); @@ -5282,6 +5292,14 @@ public class FragmentMessages extends FragmentBase fragment.show(getParentFragmentManager(), "keywords:add"); } }) + .setOnDismissListener(new DialogInterface.OnDismissListener() { + @Override + public void onDismiss(DialogInterface dialog) { + if (clear && selectionTracker != null) + selectionTracker.clearSelection(); + + } + }) .show(); } @@ -7390,6 +7408,7 @@ public class FragmentMessages extends FragmentBase boolean more_trash = prefs.getBoolean("more_trash", true); boolean more_delete = prefs.getBoolean("more_delete", false); boolean more_move = prefs.getBoolean("more_move", true); + boolean more_keywords = prefs.getBoolean("more_keywords", false); boolean inTrash = EntityFolder.TRASH.equals(type); boolean inJunk = EntityFolder.JUNK.equals(type); @@ -7426,6 +7445,10 @@ public class FragmentMessages extends FragmentBase if (inbox) count++; + boolean keywords = (more_keywords && count < FragmentDialogQuickActions.MAX_QUICK_ACTIONS && !result.hasPop && result.hasImap); + if (keywords) + count++; + boolean importance_high = (more_importance_high && count < FragmentDialogQuickActions.MAX_QUICK_ACTIONS && !EntityMessage.PRIORITIY_HIGH.equals(result.importance)); if (importance_high) @@ -7497,6 +7520,7 @@ public class FragmentMessages extends FragmentBase ibDelete.setVisibility(delete ? View.VISIBLE : View.GONE); ibJunk.setVisibility(junk ? View.VISIBLE : View.GONE); ibInbox.setVisibility(inbox ? View.VISIBLE : View.GONE); + ibKeywords.setVisibility(keywords ? View.VISIBLE : View.GONE); cardMore.setTag(fabMore.isOrWillBeShown() ? result : null); cardMore.setVisibility(fabMore.isOrWillBeShown() ? View.VISIBLE : View.GONE); } diff --git a/app/src/main/res/layout/dialog_quick_actions.xml b/app/src/main/res/layout/dialog_quick_actions.xml index 29f6561c3e..da0d23feaa 100644 --- a/app/src/main/res/layout/dialog_quick_actions.xml +++ b/app/src/main/res/layout/dialog_quick_actions.xml @@ -252,6 +252,19 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/cbJunk" /> + + + app:layout_constraintTop_toBottomOf="@id/cbKeywords" /> + +