From 4d29d8f012410bdacd5fb3c45c5f082a328f4028 Mon Sep 17 00:00:00 2001 From: tofunmi Date: Thu, 8 Feb 2024 04:57:48 -0800 Subject: [PATCH] DefaultAssetLoaderFactory: Simplify file extension retrival Change the file extension retrieval back to how it was before https://github.com/androidx/media/commit/5488d33da89b78d01eafbbf2d0b5bb8fc7f4bb69 to reduce the change of false negatives in `isImage()` PiperOrigin-RevId: 605281186 --- .../androidx/media3/common/FileTypes.java | 28 ------------------- .../DefaultAssetLoaderFactory.java | 10 +++++-- 2 files changed, 7 insertions(+), 31 deletions(-) diff --git a/libraries/common/src/main/java/androidx/media3/common/FileTypes.java b/libraries/common/src/main/java/androidx/media3/common/FileTypes.java index d4dff3266b..c31de70e68 100644 --- a/libraries/common/src/main/java/androidx/media3/common/FileTypes.java +++ b/libraries/common/src/main/java/androidx/media3/common/FileTypes.java @@ -19,7 +19,6 @@ import static androidx.media3.common.MimeTypes.normalizeMimeType; import static java.lang.annotation.ElementType.TYPE_USE; import android.net.Uri; -import android.text.TextUtils; import androidx.annotation.IntDef; import androidx.annotation.Nullable; import androidx.annotation.VisibleForTesting; @@ -30,7 +29,6 @@ import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import java.util.List; import java.util.Map; -import java.util.regex.Pattern; /** Defines common file type constants and helper methods. */ @UnstableApi @@ -329,30 +327,4 @@ public final class FileTypes { return FileTypes.UNKNOWN; } } - - /** - * Returns the file extension of the given {@link Uri} or an empty string if there is no - * extension. - * - *

This method is a convenience method for obtaining the extension of a url and has undefined - * results for other Strings. - */ - public static String getFileExtensionFromUri(Uri uri) { - String path = uri.getPath(); - if (TextUtils.isEmpty(path)) { - return ""; - } - int filenamePos = path.lastIndexOf('/'); - String filename = 0 <= filenamePos ? path.substring(filenamePos + 1) : path; - - // If the filename contains special characters, we don't consider it valid for our matching - // purposes. - if (!filename.isEmpty() && Pattern.matches("[a-zA-Z_0-9\\.\\-\\(\\)\\%]+", filename)) { - int dotPos = filename.lastIndexOf('.'); - if (0 <= dotPos) { - return filename.substring(dotPos + 1); - } - } - return ""; - } } diff --git a/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultAssetLoaderFactory.java b/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultAssetLoaderFactory.java index a21c9ac7ae..edc458836e 100644 --- a/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultAssetLoaderFactory.java +++ b/libraries/transformer/src/main/java/androidx/media3/transformer/DefaultAssetLoaderFactory.java @@ -16,6 +16,7 @@ package androidx.media3.transformer; +import static androidx.media3.common.util.Assertions.checkNotNull; import static androidx.media3.common.util.Assertions.checkState; import android.content.ContentResolver; @@ -24,7 +25,6 @@ import android.graphics.BitmapFactory; import android.graphics.ColorSpace; import android.os.Looper; import androidx.annotation.Nullable; -import androidx.media3.common.FileTypes; import androidx.media3.common.MediaItem; import androidx.media3.common.MimeTypes; import androidx.media3.common.util.BitmapLoader; @@ -175,8 +175,12 @@ public final class DefaultAssetLoaderFactory implements AssetLoader.Factory { ContentResolver cr = context.getContentResolver(); mimeType = cr.getType(localConfiguration.uri); } else { - String fileExtension = FileTypes.getFileExtensionFromUri(localConfiguration.uri); - mimeType = getCommonImageMimeTypeFromExtension(Ascii.toLowerCase(fileExtension)); + String uriPath = checkNotNull(localConfiguration.uri.getPath()); + int fileExtensionStart = uriPath.lastIndexOf("."); + if (fileExtensionStart != -1) { + String extension = Ascii.toLowerCase(uriPath.substring(fileExtensionStart + 1)); + mimeType = getCommonImageMimeTypeFromExtension(Ascii.toLowerCase(extension)); + } } } if (mimeType == null) {