// Path: matisse/src/main/java/com/zhihu/matisse/MimeType.java
// @SuppressWarnings("unused")
// 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"
//     )),
//     WEBP("image/webp", arraySetOf(
//             "webp"
//     )),
// 
//     // ============== videos ==============
//     MPEG("video/mpeg", arraySetOf(
//             "mpeg",
//             "mpg"
//     )),
//     MP4("video/mp4", arraySetOf(
//             "mp4",
//             "m4v"
//     )),
//     QUICKTIME("video/quicktime", arraySetOf(
//             "mov"
//     )),
//     THREEGPP("video/3gpp", arraySetOf(
//             "3gp",
//             "3gpp"
//     )),
//     THREEGPP2("video/3gpp2", arraySetOf(
//             "3g2",
//             "3gpp2"
//     )),
//     MKV("video/x-matroska", arraySetOf(
//             "mkv"
//     )),
//     WEBM("video/webm", arraySetOf(
//             "webm"
//     )),
//     TS("video/mp2ts", arraySetOf(
//             "ts"
//     )),
//     AVI("video/avi", arraySetOf(
//             "avi"
//     ));
// 
//     private final String mMimeTypeName;
//     private final Set<String> mExtensions;
// 
//     MimeType(String mimeTypeName, Set<String> extensions) {
//         mMimeTypeName = mimeTypeName;
//         mExtensions = extensions;
//     }
// 
//     public static Set<MimeType> ofAll() {
//         return EnumSet.allOf(MimeType.class);
//     }
// 
//     public static Set<MimeType> of(MimeType type, MimeType... rest) {
//         return EnumSet.of(type, rest);
//     }
// 
//     public static Set<MimeType> ofImage() {
//         return EnumSet.of(JPEG, PNG, GIF, BMP, WEBP);
//     }
// 
//     public static Set<MimeType> ofImage(boolean onlyGif) {
//         return EnumSet.of(GIF);
//     }
// 
//     public static Set<MimeType> ofGif() {
//         return ofImage(true);
//     }
// 
//     public static Set<MimeType> 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<String> arraySetOf(String... suffixes) {
//         return new ArraySet<>(Arrays.asList(suffixes));
//     }
// 
//     @Override
//     public String toString() {
//         return mMimeTypeName;
//     }
// 
//     public boolean checkType(ContentResolver resolver, Uri uri) {
//         MimeTypeMap map = MimeTypeMap.getSingleton();
//         if (uri == null) {
//             return false;
//         }
//         String type = map.getExtensionFromMimeType(resolver.getType(uri));
//         String path = null;
//         // lazy load the path and prevent resolve for multiple times
//         boolean pathParsed = false;
//         for (String extension : mExtensions) {
//             if (extension.equals(type)) {
//                 return true;
//             }
//             if (!pathParsed) {
//                 // we only resolve the path for one time
//                 path = PhotoMetadataUtils.getPath(resolver, uri);
//                 if (!TextUtils.isEmpty(path)) {
//                     path = path.toLowerCase(Locale.US);
//                 }
//                 pathParsed = true;
//             }
//             if (path != null && path.endsWith(extension)) {
//                 return true;
//             }
//         }
//         return false;
//     }
// }


import android.content.ContentUris;
import android.database.Cursor;
import android.net.Uri;
import android.os.Parcel;
import android.os.Parcelable;
import android.provider.MediaStore;
import androidx.annotation.Nullable;
import com.zhihu.matisse.MimeType;
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeLong(id);
        dest.writeString(mimeType);
        dest.writeParcelable(uri, 0);
        dest.writeLong(size);
        dest.writeLong(duration);
    }

    public Uri getContentUri() {
        return uri;
    }

    public boolean isCapture() {
        return id == ITEM_ID_CAPTURE;
    }

    public boolean isImage() {
        return MimeType.isImage(mimeType);
    }

    public boolean isGif() {
        return MimeType.isGif(mimeType);
    }

    public boolean isVideo() {
// Path: matisse/src/main/java/com/zhihu/matisse/MimeType.java
// @SuppressWarnings("unused")
// 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"
//     )),
//     WEBP("image/webp", arraySetOf(
//             "webp"
//     )),
// 
//     // ============== videos ==============
//     MPEG("video/mpeg", arraySetOf(
//             "mpeg",
//             "mpg"
//     )),
//     MP4("video/mp4", arraySetOf(
//             "mp4",
//             "m4v"
//     )),
//     QUICKTIME("video/quicktime", arraySetOf(
//             "mov"
//     )),
//     THREEGPP("video/3gpp", arraySetOf(
//             "3gp",
//             "3gpp"
//     )),
//     THREEGPP2("video/3gpp2", arraySetOf(
//             "3g2",
//             "3gpp2"
//     )),
//     MKV("video/x-matroska", arraySetOf(
//             "mkv"
//     )),
//     WEBM("video/webm", arraySetOf(
//             "webm"
//     )),
//     TS("video/mp2ts", arraySetOf(
//             "ts"
//     )),
//     AVI("video/avi", arraySetOf(
//             "avi"
//     ));
// 
//     private final String mMimeTypeName;
//     private final Set<String> mExtensions;
// 
//     MimeType(String mimeTypeName, Set<String> extensions) {
//         mMimeTypeName = mimeTypeName;
//         mExtensions = extensions;
//     }
// 
//     public static Set<MimeType> ofAll() {
//         return EnumSet.allOf(MimeType.class);
//     }
// 
//     public static Set<MimeType> of(MimeType type, MimeType... rest) {
//         return EnumSet.of(type, rest);
//     }
// 
//     public static Set<MimeType> ofImage() {
//         return EnumSet.of(JPEG, PNG, GIF, BMP, WEBP);
//     }
// 
//     public static Set<MimeType> ofImage(boolean onlyGif) {
//         return EnumSet.of(GIF);
//     }
// 
//     public static Set<MimeType> ofGif() {
//         return ofImage(true);
//     }
// 
//     public static Set<MimeType> 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<String> arraySetOf(String... suffixes) {
//         return new ArraySet<>(Arrays.asList(suffixes));
//     }
// 
//     @Override
//     public String toString() {
//         return mMimeTypeName;
//     }
// 
//     public boolean checkType(ContentResolver resolver, Uri uri) {
//         MimeTypeMap map = MimeTypeMap.getSingleton();
//         if (uri == null) {
//             return false;
//         }
//         String type = map.getExtensionFromMimeType(resolver.getType(uri));
//         String path = null;
//         // lazy load the path and prevent resolve for multiple times
//         boolean pathParsed = false;
//         for (String extension : mExtensions) {
//             if (extension.equals(type)) {
//                 return true;
//             }
//             if (!pathParsed) {
//                 // we only resolve the path for one time
//                 path = PhotoMetadataUtils.getPath(resolver, uri);
//                 if (!TextUtils.isEmpty(path)) {
//                     path = path.toLowerCase(Locale.US);
//                 }
//                 pathParsed = true;
//             }
//             if (path != null && path.endsWith(extension)) {
//                 return true;
//             }
//         }
//         return false;
//     }
// }


// Path: matisse/src/main/java/com/zhihu/matisse/internal/entity/Item.java
import android.content.ContentUris;
import android.database.Cursor;
import android.net.Uri;
import android.os.Parcel;
import android.os.Parcelable;
import android.provider.MediaStore;
import androidx.annotation.Nullable;
import com.zhihu.matisse.MimeType;

    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeLong(id);
        dest.writeString(mimeType);
        dest.writeParcelable(uri, 0);
        dest.writeLong(size);
        dest.writeLong(duration);
    }

    public Uri getContentUri() {
        return uri;
    }

    public boolean isCapture() {
        return id == ITEM_ID_CAPTURE;
    }

    public boolean isImage() {
        return MimeType.isImage(mimeType);
    }

    public boolean isGif() {
        return MimeType.isGif(mimeType);
    }

    public boolean isVideo() {
        return MimeType.isVideo(mimeType);