public static boolean containsIgnoreCase(CharSequence str, CharSequence searchStr) {
        if (str == null || searchStr == null) {
            return false;
        }
        int len = searchStr.length();
        int max = str.length() - len;
        for (int i = 0; i <= max; i++) {
            if (CharSequenceUtils.regionMatches(str, true, i, searchStr, 0, len)) {
                return true;
            }
        }
        return false;
    }
<p>Checks if CharSequence contains a search CharSequence irrespective of case,
handling {@code null}. Case-insensitivity is defined as by
{@link String#equalsIgnoreCase(String)}.

<p>A {@code null} CharSequence will return {@code false}.</p>

<pre>
StringUtils.contains(null, *) = false
StringUtils.contains(*, null) = false
StringUtils.contains("", "") = true
StringUtils.contains("abc", "") = true
StringUtils.contains("abc", "a") = true
StringUtils.contains("abc", "z") = false
StringUtils.contains("abc", "A") = true
StringUtils.contains("abc", "Z") = false
</pre>

@param str  the CharSequence to check, may be null
@param searchStr  the CharSequence to find, may be null
@return true if the CharSequence contains the search CharSequence irrespective of
case or false if not or {@code null} string input
@since 3.0 Changed signature from containsIgnoreCase(String, String) to containsIgnoreCase(CharSequence, CharSequence)
android/android_framework/base/src/main/java/lang3/StringUtils.java