OSDN Git Service

DO NOT MERGE MediaScanner: Add special casing of WMP album art files to isNoMediaPath()
authorMike Lockwood <lockwood@android.com>
Mon, 2 May 2011 22:51:11 +0000 (18:51 -0400)
committerMike Lockwood <lockwood@android.com>
Wed, 4 May 2011 01:03:57 +0000 (21:03 -0400)
This will prevent MediaProvider from adding these files to the images table

Change-Id: Ibc4128762f221b370a00e331aca633aafae0ad70
Signed-off-by: Mike Lockwood <lockwood@android.com>
media/java/android/media/MediaScanner.java

index cd300ef..d1eb388 100644 (file)
@@ -432,34 +432,8 @@ public class MediaScanner
             mFileSize = fileSize;
 
             if (!isDirectory) {
-                // special case certain file names
-                // I use regionMatches() instead of substring() below
-                // to avoid memory allocation
-                int lastSlash = path.lastIndexOf('/');
-                if (lastSlash >= 0 && lastSlash + 2 < path.length()) {
-                    if (!noMedia) {
-                        // ignore those ._* files created by MacOS
-                        if (path.regionMatches(lastSlash + 1, "._", 0, 2)) {
-                            noMedia = true;
-                        }
-
-                        // ignore album art files created by Windows Media Player:
-                        // Folder.jpg, AlbumArtSmall.jpg, AlbumArt_{...}_Large.jpg
-                        // and AlbumArt_{...}_Small.jpg
-                        if (path.regionMatches(true, path.length() - 4, ".jpg", 0, 4)) {
-                            if (path.regionMatches(true, lastSlash + 1, "AlbumArt_{", 0, 10) ||
-                                    path.regionMatches(true, lastSlash + 1, "AlbumArt.", 0, 9)) {
-                                noMedia = true;
-                            }
-                            int length = path.length() - lastSlash - 1;
-                            if ((length == 17 && path.regionMatches(
-                                    true, lastSlash + 1, "AlbumArtSmall", 0, 13)) ||
-                                    (length == 10
-                                     && path.regionMatches(true, lastSlash + 1, "Folder", 0, 6))) {
-                                noMedia = true;
-                            }
-                        }
-                    }
+                if (!noMedia && isNoMediaFile(path)) {
+                    noMedia = true;
                 }
                 mNoMedia = noMedia;
 
@@ -1233,6 +1207,40 @@ public class MediaScanner
         }
     }
 
+    private static boolean isNoMediaFile(String path) {
+        File file = new File(path);
+        if (file.isDirectory()) return false;
+
+        // special case certain file names
+        // I use regionMatches() instead of substring() below
+        // to avoid memory allocation
+        int lastSlash = path.lastIndexOf('/');
+        if (lastSlash >= 0 && lastSlash + 2 < path.length()) {
+            // ignore those ._* files created by MacOS
+            if (path.regionMatches(lastSlash + 1, "._", 0, 2)) {
+                return true;
+            }
+
+            // ignore album art files created by Windows Media Player:
+            // Folder.jpg, AlbumArtSmall.jpg, AlbumArt_{...}_Large.jpg
+            // and AlbumArt_{...}_Small.jpg
+            if (path.regionMatches(true, path.length() - 4, ".jpg", 0, 4)) {
+                if (path.regionMatches(true, lastSlash + 1, "AlbumArt_{", 0, 10) ||
+                        path.regionMatches(true, lastSlash + 1, "AlbumArt.", 0, 9)) {
+                    return true;
+                }
+                int length = path.length() - lastSlash - 1;
+                if ((length == 17 && path.regionMatches(
+                        true, lastSlash + 1, "AlbumArtSmall", 0, 13)) ||
+                        (length == 10
+                         && path.regionMatches(true, lastSlash + 1, "Folder", 0, 6))) {
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
     public static boolean isNoMediaPath(String path) {
         if (path == null) return false;
 
@@ -1254,7 +1262,7 @@ public class MediaScanner
             }
             offset = slashIndex;
         }
-        return false;
+        return isNoMediaFile(path);
     }
 
     public void scanMtpFile(String path, String volumeName, int objectHandle, int format) {