only highlight alphanumeric chars

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java |  4 
src/main/java/eu/siacs/conversations/utils/StylingHelper.java       | 20 
2 files changed, 22 insertions(+), 2 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/ui/adapter/MessageAdapter.java 🔗

@@ -1007,8 +1007,8 @@ public class MessageAdapter extends ArrayAdapter<Message> implements CopyTextVie
 		}
 	}
 
-	public void setHighlightedTerm(List<String> term) {
-		this.highlightedTerm = term;
+	public void setHighlightedTerm(List<String> terms) {
+		this.highlightedTerm = terms == null ? null : StylingHelper.filterHighlightedWords(terms);
 	}
 
 	public interface OnQuoteListener {

src/main/java/eu/siacs/conversations/utils/StylingHelper.java 🔗

@@ -47,6 +47,7 @@ import android.text.style.TypefaceSpan;
 import android.widget.EditText;
 import android.widget.TextView;
 
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
@@ -99,6 +100,25 @@ public class StylingHelper {
 		}
 	}
 
+	public static List<String> filterHighlightedWords(List<String> terms) {
+		List<String> words = new ArrayList<>();
+		for(String term : terms) {
+			if (!FtsUtils.isKeyword(term)) {
+				StringBuilder builder = new StringBuilder();
+				for (int codepoint, i = 0; i < term.length(); i += Character.charCount(codepoint)) {
+					codepoint = term.codePointAt(i);
+					if (Character.isLetterOrDigit(codepoint)) {
+						builder.append(Character.toChars(codepoint));
+					}
+				}
+				if (builder.length() > 0) {
+					words.add(builder.toString());
+				}
+			}
+		}
+		return words;
+	}
+
 	private static void highlight(final Context context, final Editable editable, String needle, boolean dark) {
 		final int length = needle.length();
 		String string = editable.toString();