/* * Copyright (c) 2015-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ package com.facebook.common.media; import javax.annotation.Nullable; import java.util.Locale; import java.util.Map; import android.webkit.MimeTypeMap; import com.facebook.common.internal.ImmutableMap; /** * Utility class. */ public class MediaUtils { // Additional mime types that we know to be a particular media type but which may not be // supported natively on the device. public static final Map<String, String> ADDITIONAL_ALLOWED_MIME_TYPES = ImmutableMap.of("mkv", "video/x-matroska"); public static boolean isPhoto(@Nullable String mimeType) { return mimeType != null && mimeType.startsWith("image/"); } public static boolean isVideo(@Nullable String mimeType) { return mimeType != null && mimeType.startsWith("video/"); } public @Nullable static String extractMime(String path) { String extension = extractExtension(path); if (extension == null) { return null; } extension = extension.toLowerCase(Locale.US); String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension); // If we did not find a mime type for the extension specified, check our additional // extension/mime-type mappings. if (mimeType == null) { mimeType = ADDITIONAL_ALLOWED_MIME_TYPES.get(extension); } return mimeType; } private @Nullable static String extractExtension(String path) { int pos = path.lastIndexOf('.'); if (pos < 0 || pos == path.length() - 1) { return null; } return path.substring(pos + 1); } /** * @return true if the mime type is one of our whitelisted mimetypes that we support beyond * what the native platform supports. */ public static boolean isNonNativeSupportedMimeType(String mimeType) { return ADDITIONAL_ALLOWED_MIME_TYPES.containsValue(mimeType); } }