From 807e5f7901f98ad14f78f6b038c286e6ff0f6fe1 Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Tue, 29 Dec 2015 00:31:44 +0100 Subject: keylist: fix highlighter (fixes #1637) --- .../keychain/ui/util/Highlighter.java | 43 ++++++++++------------ 1 file changed, 19 insertions(+), 24 deletions(-) (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/util') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/util/Highlighter.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/util/Highlighter.java index ac34d5526..ccaa9d408 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/util/Highlighter.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/util/Highlighter.java @@ -1,20 +1,3 @@ -/* - * Copyright (C) 2014 Thialfihar - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - package org.sufficientlysecure.keychain.ui.util; import android.content.Context; @@ -22,7 +5,6 @@ import android.text.Spannable; import android.text.style.ForegroundColorSpan; import org.sufficientlysecure.keychain.R; -import org.sufficientlysecure.keychain.ui.util.FormattingUtils; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -43,19 +25,32 @@ public class Highlighter { return highlight; } - Pattern pattern = Pattern.compile("(?i)(" + mQuery.trim().replaceAll("\\s+", "|") + ")"); + String queryPattern = buildPatternFromQuery(mQuery); + Pattern pattern = Pattern.compile("(" + queryPattern + ")", Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher(text); int colorEmphasis = FormattingUtils.getColorFromAttr(mContext, R.attr.colorEmphasis); while (matcher.find()) { - highlight.setSpan( - new ForegroundColorSpan(colorEmphasis), - matcher.start(), - matcher.end(), - Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + highlight.setSpan(new ForegroundColorSpan(colorEmphasis), + matcher.start(), matcher.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } return highlight; } + + private static String buildPatternFromQuery(String mQuery) { + String chunks[] = mQuery.split(" *, *"); + boolean firstChunk = true; + StringBuilder patternPiece = new StringBuilder(); + for (int i = 0; i < chunks.length; ++i) { + patternPiece.append(Pattern.quote(chunks[i])); + if (firstChunk) { + firstChunk = false; + continue; + } + patternPiece.append('|'); + } + return patternPiece.toString(); + } } -- cgit v1.2.3