am 11fe181e: Add faster TextUtil function for searching delimited lists.
Merge commit '11fe181e16501103d7c0f70344661ea2ef5d3df9' into gingerbread-plus-aosp * commit '11fe181e16501103d7c0f70344661ea2ef5d3df9': Add faster TextUtil function for searching delimited lists.
This commit is contained in:
@@ -3481,13 +3481,7 @@ public final class Settings {
|
||||
*/
|
||||
public static final boolean isLocationProviderEnabled(ContentResolver cr, String provider) {
|
||||
String allowedProviders = Settings.Secure.getString(cr, LOCATION_PROVIDERS_ALLOWED);
|
||||
if (allowedProviders != null) {
|
||||
return (allowedProviders.equals(provider) ||
|
||||
allowedProviders.contains("," + provider + ",") ||
|
||||
allowedProviders.startsWith(provider + ",") ||
|
||||
allowedProviders.endsWith("," + provider));
|
||||
}
|
||||
return false;
|
||||
return TextUtils.delimitedStringContains(allowedProviders, ',', provider);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1651,7 +1651,36 @@ public class TextUtils {
|
||||
|
||||
return mode;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Does a comma-delimited list 'delimitedString' contain a certain item?
|
||||
* (without allocating memory)
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public static boolean delimitedStringContains(
|
||||
String delimitedString, char delimiter, String item) {
|
||||
if (isEmpty(delimitedString) || isEmpty(item)) {
|
||||
return false;
|
||||
}
|
||||
int pos = -1;
|
||||
int length = delimitedString.length();
|
||||
while ((pos = delimitedString.indexOf(item, pos + 1)) != -1) {
|
||||
if (pos > 0 && delimitedString.charAt(pos - 1) != delimiter) {
|
||||
continue;
|
||||
}
|
||||
int expectedDelimiterPos = pos + item.length();
|
||||
if (expectedDelimiterPos == length) {
|
||||
// Match at end of string.
|
||||
return true;
|
||||
}
|
||||
if (delimitedString.charAt(expectedDelimiterPos) == delimiter) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private static Object sLock = new Object();
|
||||
private static char[] sTemp = null;
|
||||
}
|
||||
|
||||
@@ -349,6 +349,26 @@ public class TextUtilsTest extends TestCase {
|
||||
}
|
||||
}
|
||||
|
||||
@SmallTest
|
||||
public void testDelimitedStringContains() {
|
||||
assertFalse(TextUtils.delimitedStringContains("", ',', null));
|
||||
assertFalse(TextUtils.delimitedStringContains(null, ',', ""));
|
||||
// Whole match
|
||||
assertTrue(TextUtils.delimitedStringContains("gps", ',', "gps"));
|
||||
// At beginning.
|
||||
assertTrue(TextUtils.delimitedStringContains("gps,gpsx,network,mock", ',', "gps"));
|
||||
assertTrue(TextUtils.delimitedStringContains("gps,network,mock", ',', "gps"));
|
||||
// In middle, both without, before & after a false match.
|
||||
assertTrue(TextUtils.delimitedStringContains("network,gps,mock", ',', "gps"));
|
||||
assertTrue(TextUtils.delimitedStringContains("network,gps,gpsx,mock", ',', "gps"));
|
||||
assertTrue(TextUtils.delimitedStringContains("network,gpsx,gps,mock", ',', "gps"));
|
||||
// At the end.
|
||||
assertTrue(TextUtils.delimitedStringContains("network,mock,gps", ',', "gps"));
|
||||
assertTrue(TextUtils.delimitedStringContains("network,mock,gpsx,gps", ',', "gps"));
|
||||
// Not present (but with a false match)
|
||||
assertFalse(TextUtils.delimitedStringContains("network,mock,gpsx", ',', "gps"));
|
||||
}
|
||||
|
||||
/**
|
||||
* CharSequence wrapper for testing the cases where text is copied into
|
||||
* a char array instead of working from a String or a Spanned.
|
||||
|
||||
Reference in New Issue
Block a user