Fixing Helpers to correctly parse file names / extensions in the case where the filen...
olly [Tue, 21 Dec 2010 19:09:12 +0000 (19:09 +0000)]
e.g. /mnt/sdcard/Android/data/com.google.android.youtube/files/file

Change-Id: I5aad1625a9f36135e947c0f929ee740fc66eb0d3

src/com/android/providers/downloads/Helpers.java

index ac4c650..f392f3e 100644 (file)
@@ -157,7 +157,8 @@ public class Helpers {
         // Add an extension if filename does not have one
         String extension = null;
         int dotIndex = filename.lastIndexOf('.');
-        if (dotIndex < 0) {
+        boolean missingExtension = dotIndex < 0 || dotIndex < filename.lastIndexOf("/");
+        if (missingExtension) {
             extension = chooseExtensionFromMimeType(mimeType, true);
         } else {
             extension = chooseExtensionFromFilename(mimeType, destination, filename, dotIndex);
@@ -414,12 +415,11 @@ public class Helpers {
     }
 
     private static String chooseExtensionFromFilename(String mimeType, int destination,
-            String filename, int dotIndex) {
+            String filename, int lastDotIndex) {
         String extension = null;
         if (mimeType != null) {
             // Compare the last segment of the extension against the mime type.
             // If there's a mismatch, discard the entire extension.
-            int lastDotIndex = filename.lastIndexOf('.');
             String typeFromExt = MimeTypeMap.getSingleton().getMimeTypeFromExtension(
                     filename.substring(lastDotIndex + 1));
             if (typeFromExt == null || !typeFromExt.equalsIgnoreCase(mimeType)) {
@@ -439,7 +439,7 @@ public class Helpers {
             if (Constants.LOGVV) {
                 Log.v(Constants.TAG, "keeping extension");
             }
-            extension = filename.substring(dotIndex);
+            extension = filename.substring(lastDotIndex);
         }
         return extension;
     }