Merge "Extract top level directory for public volumes" into rvc-dev
diff --git a/src/com/android/providers/media/util/FileUtils.java b/src/com/android/providers/media/util/FileUtils.java
index e711d0c..ca0c595 100644
--- a/src/com/android/providers/media/util/FileUtils.java
+++ b/src/com/android/providers/media/util/FileUtils.java
@@ -860,12 +860,6 @@
}
/**
- * Regex that matches any valid path in external storage,
- * and captures the top-level directory as the first group.
- */
- private static final Pattern PATTERN_TOP_LEVEL_DIR = Pattern.compile(
- "(?i)^/storage/[^/]+/[0-9]+/([^/]+)(/.*)?");
- /**
* Regex that matches paths in all well-known package-specific directories,
* and which captures the package name as the first group.
*/
@@ -979,11 +973,12 @@
*/
@Nullable
public static String extractTopLevelDir(String path) {
- Matcher m = PATTERN_TOP_LEVEL_DIR.matcher(path);
- if (m.matches()) {
- return m.group(1);
+ final String relativePath = extractRelativePath(path);
+ if (relativePath == null) {
+ return null;
}
- return null;
+ final String[] relativePathSegments = relativePath.split("/");
+ return relativePathSegments.length > 0 ? relativePathSegments[0] : null;
}
/**
diff --git a/tests/src/com/android/providers/media/util/FileUtilsTest.java b/tests/src/com/android/providers/media/util/FileUtilsTest.java
index da8ddce..451f774 100644
--- a/tests/src/com/android/providers/media/util/FileUtilsTest.java
+++ b/tests/src/com/android/providers/media/util/FileUtilsTest.java
@@ -41,6 +41,7 @@
import static com.android.providers.media.util.FileUtils.extractFileExtension;
import static com.android.providers.media.util.FileUtils.extractFileName;
import static com.android.providers.media.util.FileUtils.extractRelativePath;
+import static com.android.providers.media.util.FileUtils.extractTopLevelDir;
import static com.android.providers.media.util.FileUtils.extractVolumeName;
import static com.android.providers.media.util.FileUtils.extractVolumePath;
import static com.android.providers.media.util.FileUtils.translateModeAccessToPosix;
@@ -454,6 +455,21 @@
}
@Test
+ public void testExtractTopLevelDir() throws Exception {
+ for (String prefix : new String[] {
+ "/storage/emulated/0/",
+ "/storage/0000-0000/"
+ }) {
+ assertEquals(null,
+ extractTopLevelDir(prefix + "foo.jpg"));
+ assertEquals("DCIM",
+ extractTopLevelDir(prefix + "DCIM/foo.jpg"));
+ assertEquals("DCIM",
+ extractTopLevelDir(prefix + "DCIM/My Vacation/foo.jpg"));
+ }
+ }
+
+ @Test
public void testExtractDisplayName() throws Exception {
for (String probe : new String[] {
"foo.bar.baz",