diff --git a/app/src/main/java/eu/faircode/email/AdapterMessage.java b/app/src/main/java/eu/faircode/email/AdapterMessage.java index 6b38cfeead..26cde40fb5 100644 --- a/app/src/main/java/eu/faircode/email/AdapterMessage.java +++ b/app/src/main/java/eu/faircode/email/AdapterMessage.java @@ -467,6 +467,7 @@ public class AdapterMessage extends RecyclerView.Adapter selected = Arrays.asList(message.keywords); + for (String keyword : keywords.split(" ")) { + boolean set = selected.contains(keyword); + String title = prefs.getString("kwtitle." + keyword, keyword); + String c = "kwcolor." + keyword; + Integer color = (prefs.contains(c) ? prefs.getInt(c, Color.GRAY) : null); + + Button button = new Button(context, null, android.R.attr.buttonStyleSmall); + button.setId(View.generateViewId()); + button.setText(title); + button.setCompoundDrawablePadding(dp3); + button.setCompoundDrawablesRelative(null, null, set ? off : on, null); + if (color != null) + button.setBackgroundTintList(ColorStateList.valueOf(color)); + button.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + Bundle args = new Bundle(); + args.putLong("id", message.id); + args.putString("keyword", keyword); + args.putBoolean("set", !set); + + new SimpleTask() { + @Override + protected Void onExecute(Context context, Bundle args) throws Throwable { + long id = args.getLong("id"); + String keyword = args.getString("keyword"); + boolean set = args.getBoolean("set"); + + DB db = DB.getInstance(context); + try { + db.beginTransaction(); + + EntityMessage message = db.message().getMessage(id); + if (message == null) + return null; + + EntityOperation.queue(context, message, EntityOperation.KEYWORD, keyword, set); + + db.setTransactionSuccessful(); + } finally { + db.endTransaction(); + } + + return null; + } + + @Override + protected void onException(Bundle args, Throwable ex) { + + } + }.execute(context, owner, args, "toggle:keyword"); + } + }); + + ((ConstraintLayout) buttons.getParent()).addView(button); + buttons.addView(button); + } + } + private String formatAddresses(Address[] addresses, MessageHelper.AddressFormat format, int max) { List
list = new ArrayList<>(); if (addresses != null) diff --git a/app/src/main/res/drawable/twotone_close_12.xml b/app/src/main/res/drawable/twotone_close_12.xml new file mode 100644 index 0000000000..6a94b0c048 --- /dev/null +++ b/app/src/main/res/drawable/twotone_close_12.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/layout/include_message_navigation.xml b/app/src/main/res/layout/include_message_navigation.xml index f5efd41a43..d8533e51fd 100644 --- a/app/src/main/res/layout/include_message_navigation.xml +++ b/app/src/main/res/layout/include_message_navigation.xml @@ -455,6 +455,19 @@ app:tint="?attr/colorAccent" /> + + + app:layout_constraintTop_toBottomOf="@id/buttons" />