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" />
+
+