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:
Brad Fitzpatrick
2010-09-12 11:03:48 -07:00
committed by Android Git Automerger
3 changed files with 51 additions and 8 deletions

View File

@@ -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);
}
/**

View File

@@ -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;
}