package com.ypx.imagepicker.bean; import androidx.collection.ArraySet; import java.util.ArrayList; import java.util.Arrays; import java.util.EnumSet; import java.util.List; import java.util.Set; /** * MIME Type enumeration to restrict selectable media on the selection activity. Matisse only supports images and * videos. *

* Good example of mime types Android supports: * https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/media/java/android/media/MediaFile.java */ public enum MimeType { // ============== images ============== JPEG("image/jpeg", arraySetOf( "jpg", "jpeg" )), PNG("image/png", arraySetOf( "png" )), GIF("image/gif", arraySetOf( "gif" )), BMP("image/x-ms-bmp", arraySetOf( "bmp", "x-ms-bmp" )), WEBP("image/webp", arraySetOf( "webp" )), // ============== videos ============== MPEG("video/mpeg", arraySetOf( "mpeg", "mpg" )), MP4("video/mp4", arraySetOf( "mp4" )), QUICKTIME("video/quicktime", arraySetOf( "mov","quicktime" )), THREEGPP("video/3gpp", arraySetOf( "3gp", "3gpp" )), THREEGPP2("video/3gpp2", arraySetOf( "3g2", "3gpp2" )), MKV("video/x-matroska", arraySetOf( "mkv","x-matroska" )), WEBM("video/webm", arraySetOf( "webm" )), TS("video/mp2ts", arraySetOf( "ts","mp2ts" )), AVI("video/avi", arraySetOf( "avi" )); private final String mMimeTypeName; private final Set mExtensions; MimeType(String mimeTypeName, Set extensions) { mMimeTypeName = mimeTypeName; mExtensions = extensions; } public Set getExtensions() { return mExtensions; } public String getSuffix() { return new ArrayList<>(mExtensions).get(0); } public static Set ofAll() { return EnumSet.allOf(MimeType.class); } public static Set of(MimeType type, MimeType... rest) { return EnumSet.of(type, rest); } public static Set ofImage() { return EnumSet.of(JPEG, PNG, GIF, BMP, WEBP); } public static Set ofVideo() { return EnumSet.of(MPEG, MP4, QUICKTIME, THREEGPP, THREEGPP2, MKV, WEBM, TS, AVI); } public static boolean isImage(String mimeType) { if (mimeType == null) return false; return mimeType.startsWith("image"); } public static boolean isVideo(String mimeType) { if (mimeType == null) return false; return mimeType.startsWith("video"); } public static boolean isGif(String mimeType) { if (mimeType == null) return false; return mimeType.equals(MimeType.GIF.toString()); } private static Set arraySetOf(String... suffixes) { return new ArraySet<>(Arrays.asList(suffixes)); } @Override public String toString() { return mMimeTypeName; } public static ArrayList getMimeTypeList(Set mimeTypes) { if (mimeTypes == null) { return new ArrayList<>(); } ArrayList mimeList = new ArrayList<>(); for (MimeType mimeType : mimeTypes) { if (mimeType.mExtensions != null) { for (String s : mimeType.mExtensions) { if (MimeType.isImage(String.valueOf(mimeType))) { mimeList.add("image/" + s); } else if (MimeType.isVideo(String.valueOf(mimeType))) { mimeList.add("video/" + s); } } } } return mimeList; } }