2 * Copyright (C) 2016 The Android Open Source Project
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 package com.android.internal.util;
19 import android.content.Context;
20 import android.graphics.drawable.Drawable;
21 import android.provider.DocumentsContract;
23 import com.android.internal.R;
25 import java.util.HashMap;
27 public class MimeIconUtils {
29 private static HashMap<String, Integer> sMimeIcons = new HashMap<>();
31 private static void add(String mimeType, int resId) {
32 if (sMimeIcons.put(mimeType, resId) != null) {
33 throw new RuntimeException(mimeType + " already registered!");
41 icon = R.drawable.ic_doc_apk;
42 add("application/vnd.android.package-archive", icon);
45 icon = R.drawable.ic_doc_audio;
46 add("application/ogg", icon);
47 add("application/x-flac", icon);
50 icon = R.drawable.ic_doc_certificate;
51 add("application/pgp-keys", icon);
52 add("application/pgp-signature", icon);
53 add("application/x-pkcs12", icon);
54 add("application/x-pkcs7-certreqresp", icon);
55 add("application/x-pkcs7-crl", icon);
56 add("application/x-x509-ca-cert", icon);
57 add("application/x-x509-user-cert", icon);
58 add("application/x-pkcs7-certificates", icon);
59 add("application/x-pkcs7-mime", icon);
60 add("application/x-pkcs7-signature", icon);
63 icon = R.drawable.ic_doc_codes;
64 add("application/rdf+xml", icon);
65 add("application/rss+xml", icon);
66 add("application/x-object", icon);
67 add("application/xhtml+xml", icon);
68 add("text/css", icon);
69 add("text/html", icon);
70 add("text/xml", icon);
71 add("text/x-c++hdr", icon);
72 add("text/x-c++src", icon);
73 add("text/x-chdr", icon);
74 add("text/x-csrc", icon);
75 add("text/x-dsrc", icon);
76 add("text/x-csh", icon);
77 add("text/x-haskell", icon);
78 add("text/x-java", icon);
79 add("text/x-literate-haskell", icon);
80 add("text/x-pascal", icon);
81 add("text/x-tcl", icon);
82 add("text/x-tex", icon);
83 add("application/x-latex", icon);
84 add("application/x-texinfo", icon);
85 add("application/atom+xml", icon);
86 add("application/ecmascript", icon);
87 add("application/json", icon);
88 add("application/javascript", icon);
89 add("application/xml", icon);
90 add("text/javascript", icon);
91 add("application/x-javascript", icon);
94 icon = R.drawable.ic_doc_compressed;
95 add("application/mac-binhex40", icon);
96 add("application/rar", icon);
97 add("application/zip", icon);
98 add("application/x-apple-diskimage", icon);
99 add("application/x-debian-package", icon);
100 add("application/x-gtar", icon);
101 add("application/x-iso9660-image", icon);
102 add("application/x-lha", icon);
103 add("application/x-lzh", icon);
104 add("application/x-lzx", icon);
105 add("application/x-stuffit", icon);
106 add("application/x-tar", icon);
107 add("application/x-webarchive", icon);
108 add("application/x-webarchive-xml", icon);
109 add("application/gzip", icon);
110 add("application/x-7z-compressed", icon);
111 add("application/x-deb", icon);
112 add("application/x-rar-compressed", icon);
115 icon = R.drawable.ic_doc_contact;
116 add("text/x-vcard", icon);
117 add("text/vcard", icon);
120 icon = R.drawable.ic_doc_event;
121 add("text/calendar", icon);
122 add("text/x-vcalendar", icon);
125 icon = R.drawable.ic_doc_font;
126 add("application/x-font", icon);
127 add("application/font-woff", icon);
128 add("application/x-font-woff", icon);
129 add("application/x-font-ttf", icon);
132 icon = R.drawable.ic_doc_image;
133 add("application/vnd.oasis.opendocument.graphics", icon);
134 add("application/vnd.oasis.opendocument.graphics-template", icon);
135 add("application/vnd.oasis.opendocument.image", icon);
136 add("application/vnd.stardivision.draw", icon);
137 add("application/vnd.sun.xml.draw", icon);
138 add("application/vnd.sun.xml.draw.template", icon);
141 icon = R.drawable.ic_doc_pdf;
142 add("application/pdf", icon);
145 icon = R.drawable.ic_doc_presentation;
146 add("application/vnd.stardivision.impress", icon);
147 add("application/vnd.sun.xml.impress", icon);
148 add("application/vnd.sun.xml.impress.template", icon);
149 add("application/x-kpresenter", icon);
150 add("application/vnd.oasis.opendocument.presentation", icon);
153 icon = R.drawable.ic_doc_spreadsheet;
154 add("application/vnd.oasis.opendocument.spreadsheet", icon);
155 add("application/vnd.oasis.opendocument.spreadsheet-template", icon);
156 add("application/vnd.stardivision.calc", icon);
157 add("application/vnd.sun.xml.calc", icon);
158 add("application/vnd.sun.xml.calc.template", icon);
159 add("application/x-kspread", icon);
162 icon = R.drawable.ic_doc_document;
163 add("application/vnd.oasis.opendocument.text", icon);
164 add("application/vnd.oasis.opendocument.text-master", icon);
165 add("application/vnd.oasis.opendocument.text-template", icon);
166 add("application/vnd.oasis.opendocument.text-web", icon);
167 add("application/vnd.stardivision.writer", icon);
168 add("application/vnd.stardivision.writer-global", icon);
169 add("application/vnd.sun.xml.writer", icon);
170 add("application/vnd.sun.xml.writer.global", icon);
171 add("application/vnd.sun.xml.writer.template", icon);
172 add("application/x-abiword", icon);
173 add("application/x-kword", icon);
176 icon = R.drawable.ic_doc_video;
177 add("application/x-quicktimeplayer", icon);
178 add("application/x-shockwave-flash", icon);
181 icon = R.drawable.ic_doc_word;
182 add("application/msword", icon);
183 add("application/vnd.openxmlformats-officedocument.wordprocessingml.document", icon);
184 add("application/vnd.openxmlformats-officedocument.wordprocessingml.template", icon);
187 icon = R.drawable.ic_doc_excel;
188 add("application/vnd.ms-excel", icon);
189 add("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", icon);
190 add("application/vnd.openxmlformats-officedocument.spreadsheetml.template", icon);
193 icon = R.drawable.ic_doc_powerpoint;
194 add("application/vnd.ms-powerpoint", icon);
195 add("application/vnd.openxmlformats-officedocument.presentationml.presentation", icon);
196 add("application/vnd.openxmlformats-officedocument.presentationml.template", icon);
197 add("application/vnd.openxmlformats-officedocument.presentationml.slideshow", icon);
200 public static Drawable loadMimeIcon(Context context, String mimeType) {
201 if (DocumentsContract.Document.MIME_TYPE_DIR.equals(mimeType)) {
202 return context.getDrawable(R.drawable.ic_doc_folder);
205 // Look for exact match first
206 Integer resId = sMimeIcons.get(mimeType);
208 return context.getDrawable(resId);
211 if (mimeType == null) {
212 // TODO: generic icon?
216 // Otherwise look for partial match
217 final String typeOnly = mimeType.split("/")[0];
218 if ("audio".equals(typeOnly)) {
219 return context.getDrawable(R.drawable.ic_doc_audio);
220 } else if ("image".equals(typeOnly)) {
221 return context.getDrawable(R.drawable.ic_doc_image);
222 } else if ("text".equals(typeOnly)) {
223 return context.getDrawable(R.drawable.ic_doc_text);
224 } else if ("video".equals(typeOnly)) {
225 return context.getDrawable(R.drawable.ic_doc_video);
227 return context.getDrawable(R.drawable.ic_doc_generic);