1/*
2 * Copyright (C) 2007-2008 Esmertec AG.
3 * Copyright (C) 2007-2008 The Android Open Source Project
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 *      http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17
18package com.google.android.mms;
19
20import java.util.ArrayList;
21
22public class ContentType {
23    public static final String MMS_MESSAGE       = "application/vnd.wap.mms-message";
24    // The phony content type for generic PDUs (e.g. ReadOrig.ind,
25    // Notification.ind, Delivery.ind).
26    public static final String MMS_GENERIC       = "application/vnd.wap.mms-generic";
27    public static final String MULTIPART_MIXED   = "application/vnd.wap.multipart.mixed";
28    public static final String MULTIPART_RELATED = "application/vnd.wap.multipart.related";
29    public static final String MULTIPART_ALTERNATIVE = "application/vnd.wap.multipart.alternative";
30
31    public static final String TEXT_PLAIN        = "text/plain";
32    public static final String TEXT_HTML         = "text/html";
33    public static final String TEXT_VCALENDAR    = "text/x-vCalendar";
34    public static final String TEXT_VCARD        = "text/x-vCard";
35
36    public static final String IMAGE_UNSPECIFIED = "image/*";
37    public static final String IMAGE_JPEG        = "image/jpeg";
38    public static final String IMAGE_JPG         = "image/jpg";
39    public static final String IMAGE_GIF         = "image/gif";
40    public static final String IMAGE_WBMP        = "image/vnd.wap.wbmp";
41    public static final String IMAGE_PNG         = "image/png";
42    public static final String IMAGE_X_MS_BMP    = "image/x-ms-bmp";
43
44    public static final String AUDIO_UNSPECIFIED = "audio/*";
45    public static final String AUDIO_AAC         = "audio/aac";
46    public static final String AUDIO_AMR         = "audio/amr";
47    public static final String AUDIO_IMELODY     = "audio/imelody";
48    public static final String AUDIO_MID         = "audio/mid";
49    public static final String AUDIO_MIDI        = "audio/midi";
50    public static final String AUDIO_MP3         = "audio/mp3";
51    public static final String AUDIO_MPEG3       = "audio/mpeg3";
52    public static final String AUDIO_MPEG        = "audio/mpeg";
53    public static final String AUDIO_MPG         = "audio/mpg";
54    public static final String AUDIO_MP4         = "audio/mp4";
55    public static final String AUDIO_X_MID       = "audio/x-mid";
56    public static final String AUDIO_X_MIDI      = "audio/x-midi";
57    public static final String AUDIO_X_MP3       = "audio/x-mp3";
58    public static final String AUDIO_X_MPEG3     = "audio/x-mpeg3";
59    public static final String AUDIO_X_MPEG      = "audio/x-mpeg";
60    public static final String AUDIO_X_MPG       = "audio/x-mpg";
61    public static final String AUDIO_3GPP        = "audio/3gpp";
62    public static final String AUDIO_X_WAV       = "audio/x-wav";
63    public static final String AUDIO_OGG         = "application/ogg";
64
65    public static final String VIDEO_UNSPECIFIED = "video/*";
66    public static final String VIDEO_3GPP        = "video/3gpp";
67    public static final String VIDEO_3G2         = "video/3gpp2";
68    public static final String VIDEO_H263        = "video/h263";
69    public static final String VIDEO_MP4         = "video/mp4";
70
71    public static final String APP_SMIL          = "application/smil";
72    public static final String APP_WAP_XHTML     = "application/vnd.wap.xhtml+xml";
73    public static final String APP_XHTML         = "application/xhtml+xml";
74
75    public static final String APP_DRM_CONTENT   = "application/vnd.oma.drm.content";
76    public static final String APP_DRM_MESSAGE   = "application/vnd.oma.drm.message";
77
78    private static final ArrayList<String> sSupportedContentTypes = new ArrayList<String>();
79    private static final ArrayList<String> sSupportedImageTypes = new ArrayList<String>();
80    private static final ArrayList<String> sSupportedAudioTypes = new ArrayList<String>();
81    private static final ArrayList<String> sSupportedVideoTypes = new ArrayList<String>();
82
83    static {
84        sSupportedContentTypes.add(TEXT_PLAIN);
85        sSupportedContentTypes.add(TEXT_HTML);
86        sSupportedContentTypes.add(TEXT_VCALENDAR);
87        sSupportedContentTypes.add(TEXT_VCARD);
88
89        sSupportedContentTypes.add(IMAGE_JPEG);
90        sSupportedContentTypes.add(IMAGE_GIF);
91        sSupportedContentTypes.add(IMAGE_WBMP);
92        sSupportedContentTypes.add(IMAGE_PNG);
93        sSupportedContentTypes.add(IMAGE_JPG);
94        sSupportedContentTypes.add(IMAGE_X_MS_BMP);
95        //supportedContentTypes.add(IMAGE_SVG); not yet supported.
96
97        sSupportedContentTypes.add(AUDIO_AAC);
98        sSupportedContentTypes.add(AUDIO_AMR);
99        sSupportedContentTypes.add(AUDIO_IMELODY);
100        sSupportedContentTypes.add(AUDIO_MID);
101        sSupportedContentTypes.add(AUDIO_MIDI);
102        sSupportedContentTypes.add(AUDIO_MP3);
103        sSupportedContentTypes.add(AUDIO_MP4);
104        sSupportedContentTypes.add(AUDIO_MPEG3);
105        sSupportedContentTypes.add(AUDIO_MPEG);
106        sSupportedContentTypes.add(AUDIO_MPG);
107        sSupportedContentTypes.add(AUDIO_X_MID);
108        sSupportedContentTypes.add(AUDIO_X_MIDI);
109        sSupportedContentTypes.add(AUDIO_X_MP3);
110        sSupportedContentTypes.add(AUDIO_X_MPEG3);
111        sSupportedContentTypes.add(AUDIO_X_MPEG);
112        sSupportedContentTypes.add(AUDIO_X_MPG);
113        sSupportedContentTypes.add(AUDIO_X_WAV);
114        sSupportedContentTypes.add(AUDIO_3GPP);
115        sSupportedContentTypes.add(AUDIO_OGG);
116
117        sSupportedContentTypes.add(VIDEO_3GPP);
118        sSupportedContentTypes.add(VIDEO_3G2);
119        sSupportedContentTypes.add(VIDEO_H263);
120        sSupportedContentTypes.add(VIDEO_MP4);
121
122        sSupportedContentTypes.add(APP_SMIL);
123        sSupportedContentTypes.add(APP_WAP_XHTML);
124        sSupportedContentTypes.add(APP_XHTML);
125
126        sSupportedContentTypes.add(APP_DRM_CONTENT);
127        sSupportedContentTypes.add(APP_DRM_MESSAGE);
128
129        // add supported image types
130        sSupportedImageTypes.add(IMAGE_JPEG);
131        sSupportedImageTypes.add(IMAGE_GIF);
132        sSupportedImageTypes.add(IMAGE_WBMP);
133        sSupportedImageTypes.add(IMAGE_PNG);
134        sSupportedImageTypes.add(IMAGE_JPG);
135        sSupportedImageTypes.add(IMAGE_X_MS_BMP);
136
137        // add supported audio types
138        sSupportedAudioTypes.add(AUDIO_AAC);
139        sSupportedAudioTypes.add(AUDIO_AMR);
140        sSupportedAudioTypes.add(AUDIO_IMELODY);
141        sSupportedAudioTypes.add(AUDIO_MID);
142        sSupportedAudioTypes.add(AUDIO_MIDI);
143        sSupportedAudioTypes.add(AUDIO_MP3);
144        sSupportedAudioTypes.add(AUDIO_MPEG3);
145        sSupportedAudioTypes.add(AUDIO_MPEG);
146        sSupportedAudioTypes.add(AUDIO_MPG);
147        sSupportedAudioTypes.add(AUDIO_MP4);
148        sSupportedAudioTypes.add(AUDIO_X_MID);
149        sSupportedAudioTypes.add(AUDIO_X_MIDI);
150        sSupportedAudioTypes.add(AUDIO_X_MP3);
151        sSupportedAudioTypes.add(AUDIO_X_MPEG3);
152        sSupportedAudioTypes.add(AUDIO_X_MPEG);
153        sSupportedAudioTypes.add(AUDIO_X_MPG);
154        sSupportedAudioTypes.add(AUDIO_X_WAV);
155        sSupportedAudioTypes.add(AUDIO_3GPP);
156        sSupportedAudioTypes.add(AUDIO_OGG);
157
158        // add supported video types
159        sSupportedVideoTypes.add(VIDEO_3GPP);
160        sSupportedVideoTypes.add(VIDEO_3G2);
161        sSupportedVideoTypes.add(VIDEO_H263);
162        sSupportedVideoTypes.add(VIDEO_MP4);
163    }
164
165    // This class should never be instantiated.
166    private ContentType() {
167    }
168
169    public static boolean isSupportedType(String contentType) {
170        return (null != contentType) && sSupportedContentTypes.contains(contentType);
171    }
172
173    public static boolean isSupportedImageType(String contentType) {
174        return isImageType(contentType) && isSupportedType(contentType);
175    }
176
177    public static boolean isSupportedAudioType(String contentType) {
178        return isAudioType(contentType) && isSupportedType(contentType);
179    }
180
181    public static boolean isSupportedVideoType(String contentType) {
182        return isVideoType(contentType) && isSupportedType(contentType);
183    }
184
185    public static boolean isTextType(String contentType) {
186        return (null != contentType) && contentType.startsWith("text/");
187    }
188
189    public static boolean isImageType(String contentType) {
190        return (null != contentType) && contentType.startsWith("image/");
191    }
192
193    public static boolean isAudioType(String contentType) {
194        return (null != contentType) && contentType.startsWith("audio/");
195    }
196
197    public static boolean isVideoType(String contentType) {
198        return (null != contentType) && contentType.startsWith("video/");
199    }
200
201    public static boolean isDrmType(String contentType) {
202        return (null != contentType)
203                && (contentType.equals(APP_DRM_CONTENT)
204                        || contentType.equals(APP_DRM_MESSAGE));
205    }
206
207    public static boolean isUnspecified(String contentType) {
208        return (null != contentType) && contentType.endsWith("*");
209    }
210
211    @SuppressWarnings("unchecked")
212    public static ArrayList<String> getImageTypes() {
213        return (ArrayList<String>) sSupportedImageTypes.clone();
214    }
215
216    @SuppressWarnings("unchecked")
217    public static ArrayList<String> getAudioTypes() {
218        return (ArrayList<String>) sSupportedAudioTypes.clone();
219    }
220
221    @SuppressWarnings("unchecked")
222    public static ArrayList<String> getVideoTypes() {
223        return (ArrayList<String>) sSupportedVideoTypes.clone();
224    }
225
226    @SuppressWarnings("unchecked")
227    public static ArrayList<String> getSupportedTypes() {
228        return (ArrayList<String>) sSupportedContentTypes.clone();
229    }
230}
231