diff --git a/app/src/main/java/eu/faircode/email/AdapterRule.java b/app/src/main/java/eu/faircode/email/AdapterRule.java index 6c0dbf4ff9..43d357bb91 100644 --- a/app/src/main/java/eu/faircode/email/AdapterRule.java +++ b/app/src/main/java/eu/faircode/email/AdapterRule.java @@ -551,24 +551,9 @@ public class AdapterRule extends RecyclerView.Adapter { else { items = new ArrayList<>(); String query = search.toLowerCase().trim(); - for (TupleRuleEx rule : rules) { - if (rule.name.toLowerCase().contains(query)) + for (TupleRuleEx rule : rules) + if (rule.matches(query)) items.add(rule); - else - try { - JSONObject jcondition = new JSONObject(rule.condition); - Iterator keys = jcondition.keys(); - while (keys.hasNext()) { - String key = keys.next(); - if (jcondition.get(key).toString().toLowerCase().contains(query)) { - items.add(rule); - break; - } - } - } catch (JSONException ex) { - Log.e(ex); - } - } } DiffUtil.DiffResult diff = DiffUtil.calculateDiff(new DiffCallback(selected, items), false); diff --git a/app/src/main/java/eu/faircode/email/EntityRule.java b/app/src/main/java/eu/faircode/email/EntityRule.java index 18dd4841b7..12c9d1f8fb 100644 --- a/app/src/main/java/eu/faircode/email/EntityRule.java +++ b/app/src/main/java/eu/faircode/email/EntityRule.java @@ -52,6 +52,7 @@ import java.util.Arrays; import java.util.Calendar; import java.util.Collections; import java.util.Date; +import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.Objects; @@ -1121,6 +1122,41 @@ public class EntityRule { return false; } + boolean matches(String query) { + if (this.name.toLowerCase().contains(query)) + return true; + + try { + JSONObject jcondition = new JSONObject(this.condition); + JSONObject jaction = new JSONObject(this.action); + JSONObject jmerged = new JSONObject(); + jmerged.put("condition", jcondition); + jmerged.put("action", jaction); + return contains(jmerged, query); + } catch (JSONException ex) { + Log.e(ex); + } + + return false; + } + + private boolean contains(JSONObject jobject, String query) throws JSONException { + Iterator keys = jobject.keys(); + while (keys.hasNext()) { + String key = keys.next(); + Object value = jobject.get(key); + if (value instanceof JSONObject) { + if (contains((JSONObject) value, query)) + return true; + } else { + if (value.toString().toLowerCase().contains(query)) + return true; + } + } + + return false; + } + public JSONObject toJSON() throws JSONException { JSONObject json = new JSONObject(); json.put("id", id);