Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 786e4e08 authored by tibbi's avatar tibbi
Browse files

allow highlighting all string occurrences in a text

parent d5c7ffbc
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -7,7 +7,7 @@ buildscript {
        propMinSdkVersion = 16
        propTargetSdkVersion = propCompileSdkVersion
        propVersionCode = 1
        propVersionName = '4.6.0'
        propVersionName = '4.6.2'
        kotlin_version = '1.2.60'
        support_libs = '27.1.1'
    }
+18 −5
Original line number Diff line number Diff line
@@ -228,17 +228,30 @@ fun String.substringTo(cnt: Int): String {
    }
}

fun String.highlightTextPart(textToHighlight: String, color: Int): SpannableString {
fun String.highlightTextPart(textToHighlight: String, color: Int, highlightAll: Boolean = false): SpannableString {
    val spannableString = SpannableString(this)
    if (textToHighlight.isEmpty()) {
        return spannableString
    }

    val startIndex = indexOf(textToHighlight, 0, true)
    var startIndex = indexOf(textToHighlight, 0, true)
    val indexes = ArrayList<Int>()
    while (startIndex >= 0) {
        if (startIndex != -1) {
        val endIndex = Math.min(startIndex + textToHighlight.length, length)
        spannableString.setSpan(ForegroundColorSpan(color), startIndex, endIndex, Spannable.SPAN_EXCLUSIVE_INCLUSIVE)
            indexes.add(startIndex)
        }

        startIndex = indexOf(textToHighlight, startIndex + textToHighlight.length, true)
        if (!highlightAll) {
            break
        }
    }

    indexes.forEach {
        val endIndex = Math.min(it + textToHighlight.length, length)
        spannableString.setSpan(ForegroundColorSpan(color), it, endIndex, Spannable.SPAN_EXCLUSIVE_INCLUSIVE)
    }

    return spannableString
}