lmw
2025-04-24 718f31c92e2029d05260810435a2c70cef6e6ce5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
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.
 * <p>
 * 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<String> mExtensions;
 
    MimeType(String mimeTypeName, Set<String> extensions) {
        mMimeTypeName = mimeTypeName;
        mExtensions = extensions;
    }
 
    public Set<String> getExtensions() {
        return mExtensions;
    }
 
    public String getSuffix() {
        return new ArrayList<>(mExtensions).get(0);
    }
 
    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> 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 static ArrayList<String> getMimeTypeList(Set<MimeType> mimeTypes) {
        if (mimeTypes == null) {
            return new ArrayList<>();
        }
        ArrayList<String> 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;
    }
}