From a0fa0b487cca881878de86cf53e06569cc4dbbb3 Mon Sep 17 00:00:00 2001 From: M66B Date: Sun, 30 Jun 2024 18:24:39 +0200 Subject: [PATCH] Hightlight partial search results --- app/src/main/java/eu/faircode/email/ActivityView.java | 1 + .../main/java/eu/faircode/email/AdapterMessage.java | 11 +++++++---- .../eu/faircode/email/BoundaryCallbackMessages.java | 4 ++++ .../main/java/eu/faircode/email/FragmentMessages.java | 9 +++++++-- app/src/main/java/eu/faircode/email/HtmlHelper.java | 11 ++++++++--- 5 files changed, 27 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/ActivityView.java b/app/src/main/java/eu/faircode/email/ActivityView.java index 117b66e30c..1395515f88 100644 --- a/app/src/main/java/eu/faircode/email/ActivityView.java +++ b/app/src/main/java/eu/faircode/email/ActivityView.java @@ -2567,6 +2567,7 @@ public class ActivityView extends ActivityBilling implements FragmentManager.OnB args.putBoolean("filter_archive", intent.getBooleanExtra("filter_archive", true)); args.putBoolean("found", found); args.putString("searched", intent.getStringExtra("searched")); + args.putBoolean("searchedPartial", intent.getBooleanExtra("searchedPartial", false)); args.putBoolean("pinned", intent.getBooleanExtra("pinned", false)); args.putString("msgid", intent.getStringExtra("msgid")); diff --git a/app/src/main/java/eu/faircode/email/AdapterMessage.java b/app/src/main/java/eu/faircode/email/AdapterMessage.java index e1d9002eec..0b6b5340fb 100644 --- a/app/src/main/java/eu/faircode/email/AdapterMessage.java +++ b/app/src/main/java/eu/faircode/email/AdapterMessage.java @@ -210,6 +210,7 @@ public class AdapterMessage extends RecyclerView.Adapter flags = new ArrayList<>(); if (with_unseen) diff --git a/app/src/main/java/eu/faircode/email/FragmentMessages.java b/app/src/main/java/eu/faircode/email/FragmentMessages.java index 51d4ca344c..c55bb787a2 100644 --- a/app/src/main/java/eu/faircode/email/FragmentMessages.java +++ b/app/src/main/java/eu/faircode/email/FragmentMessages.java @@ -327,6 +327,7 @@ public class FragmentMessages extends FragmentBase private boolean filter_archive; private boolean found; private String searched; + private boolean searchedPartial; private boolean pinned; private String msgid; private BoundaryCallbackMessages.SearchCriteria criteria = null; @@ -471,11 +472,14 @@ public class FragmentMessages extends FragmentBase filter_archive = args.getBoolean("filter_archive", true); found = args.getBoolean("found", false); searched = args.getString("searched"); + searchedPartial = args.getBoolean("searchedPartial"); pinned = args.getBoolean("pinned", false); msgid = args.getString("msgid"); criteria = (BoundaryCallbackMessages.SearchCriteria) args.getSerializable("criteria"); - if (criteria != null) + if (criteria != null) { searched = criteria.query; + searchedPartial = criteria.isPartial(); + } pane = args.getBoolean("pane", false); primary = args.getLong("primary", -1); connected = args.getBoolean("connected", false); @@ -1260,7 +1264,7 @@ public class FragmentMessages extends FragmentBase filter_trash = false; adapter = new AdapterMessage( - this, type, found, searched, viewType, + this, type, found, searched, searchedPartial, viewType, compact, zoom, large_buttons, sort, ascending, filter_duplicates, filter_trash, iProperties); @@ -8082,6 +8086,7 @@ public class FragmentMessages extends FragmentBase nargs.putInt("lpos", forward ^ reversed ? lpos + 1 : lpos - 1); nargs.putBoolean("found", found); nargs.putString("searched", searched); + nargs.putBoolean("searchedPartial", searchedPartial); nargs.putBoolean("pane", pane); nargs.putLong("primary", primary); nargs.putBoolean("connected", connected); diff --git a/app/src/main/java/eu/faircode/email/HtmlHelper.java b/app/src/main/java/eu/faircode/email/HtmlHelper.java index 68f2d9415c..9af7ff991e 100644 --- a/app/src/main/java/eu/faircode/email/HtmlHelper.java +++ b/app/src/main/java/eu/faircode/email/HtmlHelper.java @@ -3199,7 +3199,7 @@ public class HtmlHelper { return ssb; } - static void highlightSearched(Context context, Document document, String query) { + static void highlightSearched(Context context, Document document, String query, boolean partial) { try { int color = Helper.resolveColor(context, R.attr.colorHighlight); @@ -3213,8 +3213,13 @@ public class HtmlHelper { sb.append(Pattern.quote(w)); } } - sb.insert(0, ".*?\\b("); - sb.append(")\\b.*?"); + if (partial) { + sb.insert(0, ".*?("); + sb.append(").*?"); + } else { + sb.insert(0, ".*?\\b("); + sb.append(")\\b.*?"); + } // TODO: match für for fur Pattern p = Pattern.compile(sb.toString(), Pattern.DOTALL | Pattern.CASE_INSENSITIVE);