diff --git a/app/src/main/java/com/geeksville/mesh/model/DebugViewModel.kt b/app/src/main/java/com/geeksville/mesh/model/DebugViewModel.kt index 236f09eb1..f4f38c5a3 100644 --- a/app/src/main/java/com/geeksville/mesh/model/DebugViewModel.kt +++ b/app/src/main/java/com/geeksville/mesh/model/DebugViewModel.kt @@ -126,11 +126,13 @@ class LogSearchManager { } return filteredLogs.flatMapIndexed { logIndex, log -> searchText.split(" ").flatMap { term -> - val messageMatches = term.toRegex(RegexOption.IGNORE_CASE).findAll(log.logMessage) + val escapedTerm = Regex.escape(term) + val regex = escapedTerm.toRegex(RegexOption.IGNORE_CASE) + val messageMatches = regex.findAll(log.logMessage) .map { match -> SearchMatch(logIndex, match.range.first, match.range.last, "message") } - val typeMatches = term.toRegex(RegexOption.IGNORE_CASE).findAll(log.messageType) + val typeMatches = regex.findAll(log.messageType) .map { match -> SearchMatch(logIndex, match.range.first, match.range.last, "type") } - val dateMatches = term.toRegex(RegexOption.IGNORE_CASE).findAll(log.formattedReceivedDate) + val dateMatches = regex.findAll(log.formattedReceivedDate) .map { match -> SearchMatch(logIndex, match.range.first, match.range.last, "date") } messageMatches + typeMatches + dateMatches } diff --git a/app/src/main/java/com/geeksville/mesh/ui/debug/Debug.kt b/app/src/main/java/com/geeksville/mesh/ui/debug/Debug.kt index 901354a6f..a2d868a66 100644 --- a/app/src/main/java/com/geeksville/mesh/ui/debug/Debug.kt +++ b/app/src/main/java/com/geeksville/mesh/ui/debug/Debug.kt @@ -297,7 +297,7 @@ private fun rememberAnnotatedString( append(text) if (searchText.isNotEmpty()) { searchText.split(" ").forEach { term -> - term.toRegex(RegexOption.IGNORE_CASE).findAll(text).forEach { match -> + Regex(Regex.escape(term), RegexOption.IGNORE_CASE).findAll(text).forEach { match -> addStyle( style = highlightStyle, start = match.range.first, @@ -339,7 +339,7 @@ private fun rememberAnnotatedLogMessage(log: UiMeshLog, searchText: String): Ann // Add search highlight annotations if (searchText.isNotEmpty()) { searchText.split(" ").forEach { term -> - term.toRegex(RegexOption.IGNORE_CASE).findAll(log.logMessage).forEach { match -> + Regex(Regex.escape(term), RegexOption.IGNORE_CASE).findAll(log.logMessage).forEach { match -> addStyle( style = highlightStyle, start = match.range.first,