mirror of
https://github.com/signalapp/Signal-Android.git
synced 2025-12-24 04:58:45 +00:00
Add fix for m4a mapping to audio/mpeg.
This commit is contained in:
@@ -48,7 +48,9 @@ class ShareRepository(context: Context) {
|
||||
}
|
||||
|
||||
val uri = multiShareExternal.uri
|
||||
val mimeType = getMimeType(appContext, uri, multiShareExternal.mimeType)
|
||||
val size = getSize(appContext, uri)
|
||||
val name = getFileName(appContext, uri)
|
||||
val mimeType = getMimeType(appContext, uri, multiShareExternal.mimeType, name?.substringAfterLast('.', ""))
|
||||
|
||||
val stream: InputStream = try {
|
||||
appContext.contentResolver.openInputStream(uri)
|
||||
@@ -57,9 +59,6 @@ class ShareRepository(context: Context) {
|
||||
null
|
||||
} ?: return ResolvedShareData.Failure
|
||||
|
||||
val size = getSize(appContext, uri)
|
||||
val name = getFileName(appContext, uri)
|
||||
|
||||
val blobUri: Uri = try {
|
||||
BlobProvider.getInstance()
|
||||
.forData(stream, size)
|
||||
@@ -142,8 +141,8 @@ class ShareRepository(context: Context) {
|
||||
companion object {
|
||||
private val TAG = Log.tag(ShareRepository::class.java)
|
||||
|
||||
private fun getMimeType(context: Context, uri: Uri, mimeType: String?): String {
|
||||
var updatedMimeType = MediaUtil.getMimeType(context, uri)
|
||||
private fun getMimeType(context: Context, uri: Uri, mimeType: String?, fileExtension: String? = null): String {
|
||||
var updatedMimeType = MediaUtil.getMimeType(context, uri, fileExtension)
|
||||
if (updatedMimeType == null) {
|
||||
updatedMimeType = MediaUtil.getCorrectedMimeType(mimeType)
|
||||
}
|
||||
|
||||
@@ -60,6 +60,7 @@ public class MediaUtil {
|
||||
public static final String IMAGE_WEBP = "image/webp";
|
||||
public static final String IMAGE_GIF = "image/gif";
|
||||
public static final String AUDIO_AAC = "audio/aac";
|
||||
public static final String AUDIO_MP4 = "audio/mp4";
|
||||
public static final String AUDIO_UNSPECIFIED = "audio/*";
|
||||
public static final String VIDEO_MP4 = "video/mp4";
|
||||
public static final String VIDEO_UNSPECIFIED = "video/*";
|
||||
@@ -108,6 +109,10 @@ public class MediaUtil {
|
||||
}
|
||||
|
||||
public static @Nullable String getMimeType(@NonNull Context context, @Nullable Uri uri) {
|
||||
return getMimeType(context, uri, null);
|
||||
}
|
||||
|
||||
public static @Nullable String getMimeType(@NonNull Context context, @Nullable Uri uri, @Nullable String fileExtension) {
|
||||
if (uri == null) return null;
|
||||
|
||||
if (PartAuthority.isLocalUri(uri)) {
|
||||
@@ -116,8 +121,12 @@ public class MediaUtil {
|
||||
|
||||
String type = context.getContentResolver().getType(uri);
|
||||
if (type == null || isOctetStream(type)) {
|
||||
final String extension = MimeTypeMap.getFileExtensionFromUrl(uri.toString());
|
||||
String extension = MimeTypeMap.getFileExtensionFromUrl(uri.toString());
|
||||
if (TextUtils.isEmpty(extension) && fileExtension != null) {
|
||||
extension = fileExtension;
|
||||
}
|
||||
type = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension.toLowerCase());
|
||||
return getCorrectedMimeType(type, fileExtension);
|
||||
}
|
||||
|
||||
return getCorrectedMimeType(type);
|
||||
@@ -128,14 +137,37 @@ public class MediaUtil {
|
||||
.getExtensionFromMimeType(getMimeType(context, uri));
|
||||
}
|
||||
|
||||
private static String safeMimeTypeOverride(String originalType, String overrideType) {
|
||||
if (MimeTypeMap.getSingleton().hasMimeType(overrideType)) {
|
||||
return overrideType;
|
||||
}
|
||||
return originalType;
|
||||
}
|
||||
|
||||
public static @Nullable String overrideMimeTypeWithExtension(@Nullable String mimeType, @Nullable String fileExtension) {
|
||||
if (fileExtension == null) {
|
||||
return mimeType;
|
||||
}
|
||||
switch (fileExtension.toLowerCase()) {
|
||||
case "m4a":
|
||||
return safeMimeTypeOverride(mimeType, AUDIO_MP4);
|
||||
default:
|
||||
return mimeType;
|
||||
}
|
||||
}
|
||||
|
||||
public static @Nullable String getCorrectedMimeType(@Nullable String mimeType) {
|
||||
return getCorrectedMimeType(mimeType, null);
|
||||
}
|
||||
|
||||
public static @Nullable String getCorrectedMimeType(@Nullable String mimeType, @Nullable String fileExtension) {
|
||||
if (mimeType == null) return null;
|
||||
|
||||
switch(mimeType) {
|
||||
case "image/jpg":
|
||||
return MimeTypeMap.getSingleton().hasMimeType(IMAGE_JPEG)
|
||||
? IMAGE_JPEG
|
||||
: mimeType;
|
||||
return safeMimeTypeOverride(mimeType, IMAGE_JPEG);
|
||||
case "audio/mpeg":
|
||||
return overrideMimeTypeWithExtension(mimeType, fileExtension);
|
||||
default:
|
||||
return mimeType;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user