Loading core/java/android/provider/Settings.java +1 −7 Original line number Diff line number Diff line Loading @@ -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); } /** Loading core/java/android/text/TextUtils.java +30 −1 Original line number Diff line number Diff line Loading @@ -1652,6 +1652,35 @@ 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; } core/tests/coretests/src/android/text/TextUtilsTest.java +20 −0 Original line number Diff line number Diff line Loading @@ -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. Loading Loading
core/java/android/provider/Settings.java +1 −7 Original line number Diff line number Diff line Loading @@ -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); } /** Loading
core/java/android/text/TextUtils.java +30 −1 Original line number Diff line number Diff line Loading @@ -1652,6 +1652,35 @@ 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; }
core/tests/coretests/src/android/text/TextUtilsTest.java +20 −0 Original line number Diff line number Diff line Loading @@ -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. Loading