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 18 package com.android.messaging.util; 19 20 import android.webkit.MimeTypeMap; 21 22 public final class ContentType { 23 public static String THREE_GPP_EXTENSION = "3gp"; 24 public static String VIDEO_MP4_EXTENSION = "mp4"; 25 // Default extension used when we don't know one. 26 public static String DEFAULT_EXTENSION = "dat"; 27 28 public static final int TYPE_IMAGE = 0; 29 public static final int TYPE_VIDEO = 1; 30 public static final int TYPE_AUDIO = 2; 31 public static final int TYPE_VCARD = 3; 32 public static final int TYPE_OTHER = 4; 33 34 public static final String ANY_TYPE = "*/*"; 35 public static final String MMS_MESSAGE = "application/vnd.wap.mms-message"; 36 // The phony content type for generic PDUs (e.g. ReadOrig.ind, 37 // Notification.ind, Delivery.ind). 38 public static final String MMS_GENERIC = "application/vnd.wap.mms-generic"; 39 public static final String MMS_MULTIPART_MIXED = "application/vnd.wap.multipart.mixed"; 40 public static final String MMS_MULTIPART_RELATED = "application/vnd.wap.multipart.related"; 41 public static final String MMS_MULTIPART_ALTERNATIVE = 42 "application/vnd.wap.multipart.alternative"; 43 44 public static final String TEXT_PLAIN = "text/plain"; 45 public static final String TEXT_HTML = "text/html"; 46 public static final String TEXT_VCALENDAR = "text/x-vCalendar"; 47 public static final String TEXT_VCARD = "text/x-vCard"; 48 49 public static final String IMAGE_PREFIX = "image/"; 50 public static final String IMAGE_UNSPECIFIED = "image/*"; 51 public static final String IMAGE_JPEG = "image/jpeg"; 52 public static final String IMAGE_JPG = "image/jpg"; 53 public static final String IMAGE_GIF = "image/gif"; 54 public static final String IMAGE_WBMP = "image/vnd.wap.wbmp"; 55 public static final String IMAGE_PNG = "image/png"; 56 public static final String IMAGE_X_MS_BMP = "image/x-ms-bmp"; 57 58 public static final String AUDIO_UNSPECIFIED = "audio/*"; 59 public static final String AUDIO_AAC = "audio/aac"; 60 public static final String AUDIO_AMR = "audio/amr"; 61 public static final String AUDIO_IMELODY = "audio/imelody"; 62 public static final String AUDIO_MID = "audio/mid"; 63 public static final String AUDIO_MIDI = "audio/midi"; 64 public static final String AUDIO_MP3 = "audio/mp3"; 65 public static final String AUDIO_MPEG3 = "audio/mpeg3"; 66 public static final String AUDIO_MPEG = "audio/mpeg"; 67 public static final String AUDIO_MPG = "audio/mpg"; 68 public static final String AUDIO_MP4 = "audio/mp4"; 69 public static final String AUDIO_MP4_LATM = "audio/mp4-latm"; 70 public static final String AUDIO_X_MID = "audio/x-mid"; 71 public static final String AUDIO_X_MIDI = "audio/x-midi"; 72 public static final String AUDIO_X_MP3 = "audio/x-mp3"; 73 public static final String AUDIO_X_MPEG3 = "audio/x-mpeg3"; 74 public static final String AUDIO_X_MPEG = "audio/x-mpeg"; 75 public static final String AUDIO_X_MPG = "audio/x-mpg"; 76 public static final String AUDIO_3GPP = "audio/3gpp"; 77 public static final String AUDIO_X_WAV = "audio/x-wav"; 78 public static final String AUDIO_OGG = "application/ogg"; 79 80 public static final String MULTIPART_MIXED = "multipart/mixed"; 81 82 public static final String VIDEO_UNSPECIFIED = "video/*"; 83 public static final String VIDEO_3GP = "video/3gp"; 84 public static final String VIDEO_3GPP = "video/3gpp"; 85 public static final String VIDEO_3G2 = "video/3gpp2"; 86 public static final String VIDEO_H263 = "video/h263"; 87 public static final String VIDEO_M4V = "video/m4v"; 88 public static final String VIDEO_MP4 = "video/mp4"; 89 public static final String VIDEO_MPEG = "video/mpeg"; 90 public static final String VIDEO_MPEG4 = "video/mpeg4"; 91 public static final String VIDEO_WEBM = "video/webm"; 92 93 public static final String APP_SMIL = "application/smil"; 94 public static final String APP_WAP_XHTML = "application/vnd.wap.xhtml+xml"; 95 public static final String APP_XHTML = "application/xhtml+xml"; 96 97 public static final String APP_DRM_CONTENT = "application/vnd.oma.drm.content"; 98 public static final String APP_DRM_MESSAGE = "application/vnd.oma.drm.message"; 99 100 // This class should never be instantiated. 101 private ContentType() { 102 } 103 104 public static boolean isTextType(final String contentType) { 105 return TEXT_PLAIN.equals(contentType) 106 || TEXT_HTML.equals(contentType) 107 || APP_WAP_XHTML.equals(contentType); 108 } 109 110 public static boolean isMediaType(final String contentType) { 111 return isImageType(contentType) 112 || isVideoType(contentType) 113 || isAudioType(contentType) 114 || isVCardType(contentType); 115 } 116 117 public static boolean isImageType(final String contentType) { 118 return (null != contentType) && contentType.startsWith(IMAGE_PREFIX); 119 } 120 121 public static boolean isAudioType(final String contentType) { 122 return (null != contentType) && 123 (contentType.startsWith("audio/") || contentType.equalsIgnoreCase(AUDIO_OGG)); 124 } 125 126 public static boolean isVideoType(final String contentType) { 127 return (null != contentType) && contentType.startsWith("video/"); 128 } 129 130 public static boolean isVCardType(final String contentType) { 131 return (null != contentType) && contentType.equalsIgnoreCase(TEXT_VCARD); 132 } 133 134 public static boolean isDrmType(final String contentType) { 135 return (null != contentType) 136 && (contentType.equals(APP_DRM_CONTENT) 137 || contentType.equals(APP_DRM_MESSAGE)); 138 } 139 140 public static boolean isUnspecified(final String contentType) { 141 return (null != contentType) && contentType.endsWith("*"); 142 } 143 144 /** 145 * If the content type is a type which can be displayed in the conversation list as a preview. 146 */ 147 public static boolean isConversationListPreviewableType(final String contentType) { 148 return ContentType.isAudioType(contentType) || ContentType.isVideoType(contentType) || 149 ContentType.isImageType(contentType) || ContentType.isVCardType(contentType); 150 } 151 152 /** 153 * Given a filename, look at the extension and try and determine the mime type. 154 * 155 * @param fileName a filename to determine the type from, such as img1231.jpg 156 * @param contentTypeDefault type to use when the content type can't be determined from the file 157 * extension. It can be null or a type such as ContentType.IMAGE_UNSPECIFIED 158 * @return Content type of the extension. 159 */ 160 public static String getContentTypeFromExtension(final String fileName, 161 final String contentTypeDefault) { 162 final MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton(); 163 final String extension = MimeTypeMap.getFileExtensionFromUrl(fileName); 164 String contentType = mimeTypeMap.getMimeTypeFromExtension(extension); 165 if (contentType == null) { 166 contentType = contentTypeDefault; 167 } 168 return contentType; 169 } 170 171 /** 172 * Get the common file extension for a given content type 173 * @param contentType The content type 174 * @return The extension without the . 175 */ 176 public static String getExtension(final String contentType) { 177 if (VIDEO_MP4.equals(contentType)) { 178 return VIDEO_MP4_EXTENSION; 179 } else if (VIDEO_3GPP.equals(contentType)) { 180 return THREE_GPP_EXTENSION; 181 } else { 182 return DEFAULT_EXTENSION; 183 } 184 } 185 } 186