10b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey/*
20b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey * Copyright (C) 2013 The Android Open Source Project
30b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey *
40b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey * Licensed under the Apache License, Version 2.0 (the "License");
50b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey * you may not use this file except in compliance with the License.
60b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey * You may obtain a copy of the License at
70b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey *
80b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey *      http://www.apache.org/licenses/LICENSE-2.0
90b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey *
100b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey * Unless required by applicable law or agreed to in writing, software
110b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey * distributed under the License is distributed on an "AS IS" BASIS,
120b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey * See the License for the specific language governing permissions and
140b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey * limitations under the License.
150b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey */
160b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
170b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkeypackage com.android.documentsui;
180b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
190b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkeyimport android.content.Context;
200b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkeyimport android.content.pm.PackageManager;
210b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkeyimport android.content.pm.ProviderInfo;
220b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkeyimport android.content.res.Resources;
230b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkeyimport android.graphics.drawable.Drawable;
240b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkeyimport android.provider.DocumentsContract.Document;
25c29dd61cbfc9f073239bdce3f4fe397deae2c623Jeff Sharkeyimport android.util.TypedValue;
260b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
270b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkeyimport com.google.android.collect.Maps;
280b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
290b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkeyimport java.util.HashMap;
300b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
310b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkeypublic class IconUtils {
320b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
330b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey    private static HashMap<String, Integer> sMimeIcons = Maps.newHashMap();
340b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
350b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey    private static void add(String mimeType, int resId) {
360b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        if (sMimeIcons.put(mimeType, resId) != null) {
370b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey            throw new RuntimeException(mimeType + " already registered!");
380b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        }
390b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey    }
400b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
410b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey    static {
420b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        int icon;
430b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
440b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        // Package
450b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        icon = R.drawable.ic_doc_apk;
460b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.android.package-archive", icon);
470b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
480b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        // Audio
49c29dd61cbfc9f073239bdce3f4fe397deae2c623Jeff Sharkey        icon = R.drawable.ic_doc_audio;
500b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/ogg", icon);
510b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-flac", icon);
520b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
530b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        // Certificate
540b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        icon = R.drawable.ic_doc_certificate;
550b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/pgp-keys", icon);
560b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/pgp-signature", icon);
570b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-pkcs12", icon);
580b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-pkcs7-certreqresp", icon);
590b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-pkcs7-crl", icon);
600b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-x509-ca-cert", icon);
610b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-x509-user-cert", icon);
620b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-pkcs7-certificates", icon);
630b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-pkcs7-mime", icon);
640b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-pkcs7-signature", icon);
650b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
660b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        // Source code
670b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        icon = R.drawable.ic_doc_codes;
680b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/rdf+xml", icon);
690b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/rss+xml", icon);
700b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-object", icon);
710b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/xhtml+xml", icon);
720b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("text/css", icon);
730b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("text/html", icon);
740b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("text/xml", icon);
750b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("text/x-c++hdr", icon);
760b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("text/x-c++src", icon);
770b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("text/x-chdr", icon);
780b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("text/x-csrc", icon);
790b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("text/x-dsrc", icon);
800b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("text/x-csh", icon);
810b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("text/x-haskell", icon);
820b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("text/x-java", icon);
830b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("text/x-literate-haskell", icon);
840b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("text/x-pascal", icon);
850b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("text/x-tcl", icon);
860b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("text/x-tex", icon);
870b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-latex", icon);
880b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-texinfo", icon);
890b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/atom+xml", icon);
900b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/ecmascript", icon);
910b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/json", icon);
920b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/javascript", icon);
930b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/xml", icon);
940b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("text/javascript", icon);
950b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-javascript", icon);
960b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
970b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        // Compressed
980b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        icon = R.drawable.ic_doc_compressed;
990b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/mac-binhex40", icon);
1000b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/rar", icon);
1010b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/zip", icon);
1020b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-apple-diskimage", icon);
1030b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-debian-package", icon);
1040b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-gtar", icon);
1050b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-iso9660-image", icon);
1060b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-lha", icon);
1070b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-lzh", icon);
1080b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-lzx", icon);
1090b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-stuffit", icon);
1100b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-tar", icon);
1110b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-webarchive", icon);
1120b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-webarchive-xml", icon);
1130b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/gzip", icon);
1140b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-7z-compressed", icon);
1150b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-deb", icon);
1160b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-rar-compressed", icon);
1170b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
1180b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        // Contact
1190b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        icon = R.drawable.ic_doc_contact;
1200b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("text/x-vcard", icon);
1210b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("text/vcard", icon);
1220b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
1230b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        // Event
1240b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        icon = R.drawable.ic_doc_event;
1250b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("text/calendar", icon);
1260b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("text/x-vcalendar", icon);
1270b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
1280b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        // Font
1290b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        icon = R.drawable.ic_doc_font;
1300b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-font", icon);
1310b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/font-woff", icon);
1320b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-font-woff", icon);
1330b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-font-ttf", icon);
1340b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
1350b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        // Image
136c29dd61cbfc9f073239bdce3f4fe397deae2c623Jeff Sharkey        icon = R.drawable.ic_doc_image;
1370b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.oasis.opendocument.graphics", icon);
1380b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.oasis.opendocument.graphics-template", icon);
1390b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.oasis.opendocument.image", icon);
1400b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.stardivision.draw", icon);
1410b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.sun.xml.draw", icon);
1420b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.sun.xml.draw.template", icon);
1430b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
1440b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        // PDF
1450b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        icon = R.drawable.ic_doc_pdf;
1460b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/pdf", icon);
1470b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
1480b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        // Presentation
1490b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        icon = R.drawable.ic_doc_presentation;
1500b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.stardivision.impress", icon);
1510b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.sun.xml.impress", icon);
1520b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.sun.xml.impress.template", icon);
1530b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-kpresenter", icon);
1540b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.oasis.opendocument.presentation", icon);
1550b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
1560b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        // Spreadsheet
1570b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        icon = R.drawable.ic_doc_spreadsheet;
1580b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.oasis.opendocument.spreadsheet", icon);
1590b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.oasis.opendocument.spreadsheet-template", icon);
1600b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.stardivision.calc", icon);
1610b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.sun.xml.calc", icon);
1620b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.sun.xml.calc.template", icon);
1630b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-kspread", icon);
1640b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
1650b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        // Text
1660b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        icon = R.drawable.ic_doc_text;
1670b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.oasis.opendocument.text", icon);
1680b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.oasis.opendocument.text-master", icon);
1690b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.oasis.opendocument.text-template", icon);
1700b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.oasis.opendocument.text-web", icon);
1710b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.stardivision.writer", icon);
1720b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.stardivision.writer-global", icon);
1730b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.sun.xml.writer", icon);
1740b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.sun.xml.writer.global", icon);
1750b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.sun.xml.writer.template", icon);
1760b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-abiword", icon);
1770b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-kword", icon);
1780b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
1790b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        // Video
180c29dd61cbfc9f073239bdce3f4fe397deae2c623Jeff Sharkey        icon = R.drawable.ic_doc_video;
1810b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-quicktimeplayer", icon);
1820b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-shockwave-flash", icon);
183770a53288643197a903999fac5469e4f1e6e4b2cJeff Sharkey
184770a53288643197a903999fac5469e4f1e6e4b2cJeff Sharkey        // Word
185770a53288643197a903999fac5469e4f1e6e4b2cJeff Sharkey        icon = R.drawable.ic_doc_word;
186770a53288643197a903999fac5469e4f1e6e4b2cJeff Sharkey        add("application/msword", icon);
187770a53288643197a903999fac5469e4f1e6e4b2cJeff Sharkey        add("application/vnd.openxmlformats-officedocument.wordprocessingml.document", icon);
188770a53288643197a903999fac5469e4f1e6e4b2cJeff Sharkey        add("application/vnd.openxmlformats-officedocument.wordprocessingml.template", icon);
189770a53288643197a903999fac5469e4f1e6e4b2cJeff Sharkey
190770a53288643197a903999fac5469e4f1e6e4b2cJeff Sharkey        // Excel
191770a53288643197a903999fac5469e4f1e6e4b2cJeff Sharkey        icon = R.drawable.ic_doc_excel;
192770a53288643197a903999fac5469e4f1e6e4b2cJeff Sharkey        add("application/vnd.ms-excel", icon);
193770a53288643197a903999fac5469e4f1e6e4b2cJeff Sharkey        add("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", icon);
194770a53288643197a903999fac5469e4f1e6e4b2cJeff Sharkey        add("application/vnd.openxmlformats-officedocument.spreadsheetml.template", icon);
195770a53288643197a903999fac5469e4f1e6e4b2cJeff Sharkey
196770a53288643197a903999fac5469e4f1e6e4b2cJeff Sharkey        // Powerpoint
197770a53288643197a903999fac5469e4f1e6e4b2cJeff Sharkey        icon = R.drawable.ic_doc_powerpoint;
198770a53288643197a903999fac5469e4f1e6e4b2cJeff Sharkey        add("application/vnd.ms-powerpoint", icon);
199770a53288643197a903999fac5469e4f1e6e4b2cJeff Sharkey        add("application/vnd.openxmlformats-officedocument.presentationml.presentation", icon);
200770a53288643197a903999fac5469e4f1e6e4b2cJeff Sharkey        add("application/vnd.openxmlformats-officedocument.presentationml.template", icon);
201770a53288643197a903999fac5469e4f1e6e4b2cJeff Sharkey        add("application/vnd.openxmlformats-officedocument.presentationml.slideshow", icon);
2020b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey    }
2030b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
2040b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey    public static Drawable loadPackageIcon(Context context, String authority, int icon) {
2050b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        if (icon != 0) {
2060b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey            if (authority != null) {
2070b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey                final PackageManager pm = context.getPackageManager();
2080b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey                final ProviderInfo info = pm.resolveContentProvider(authority, 0);
2090b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey                if (info != null) {
2100b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey                    return pm.getDrawable(info.packageName, icon, info.applicationInfo);
2110b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey                }
2120b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey            } else {
21303d30a573b8bc8e169e153a0fffa053ffedcd5eeAlan Viverette                return context.getDrawable(icon);
2140b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey            }
2150b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        }
2160b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        return null;
2170b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey    }
2180b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
219563ee0fbe99c234f3364044cb762a75abbbaa797Jeff Sharkey    public static Drawable loadMimeIcon(
220563ee0fbe99c234f3364044cb762a75abbbaa797Jeff Sharkey            Context context, String mimeType, String authority, String docId, int mode) {
221563ee0fbe99c234f3364044cb762a75abbbaa797Jeff Sharkey        if (Document.MIME_TYPE_DIR.equals(mimeType)) {
222563ee0fbe99c234f3364044cb762a75abbbaa797Jeff Sharkey            // TODO: eventually move these hacky assets into that package
223563ee0fbe99c234f3364044cb762a75abbbaa797Jeff Sharkey            if ("com.android.providers.media.documents".equals(authority)
224563ee0fbe99c234f3364044cb762a75abbbaa797Jeff Sharkey                    && docId.startsWith("album")) {
22503d30a573b8bc8e169e153a0fffa053ffedcd5eeAlan Viverette                return context.getDrawable(R.drawable.ic_doc_album);
226563ee0fbe99c234f3364044cb762a75abbbaa797Jeff Sharkey            }
227563ee0fbe99c234f3364044cb762a75abbbaa797Jeff Sharkey
228563ee0fbe99c234f3364044cb762a75abbbaa797Jeff Sharkey            if (mode == DocumentsActivity.State.MODE_GRID) {
22903d30a573b8bc8e169e153a0fffa053ffedcd5eeAlan Viverette                return context.getDrawable(R.drawable.ic_grid_folder);
230563ee0fbe99c234f3364044cb762a75abbbaa797Jeff Sharkey            } else {
23103d30a573b8bc8e169e153a0fffa053ffedcd5eeAlan Viverette                return context.getDrawable(R.drawable.ic_doc_folder);
232563ee0fbe99c234f3364044cb762a75abbbaa797Jeff Sharkey            }
233563ee0fbe99c234f3364044cb762a75abbbaa797Jeff Sharkey        }
234563ee0fbe99c234f3364044cb762a75abbbaa797Jeff Sharkey
235563ee0fbe99c234f3364044cb762a75abbbaa797Jeff Sharkey        return loadMimeIcon(context, mimeType);
236563ee0fbe99c234f3364044cb762a75abbbaa797Jeff Sharkey    }
237563ee0fbe99c234f3364044cb762a75abbbaa797Jeff Sharkey
2380b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey    public static Drawable loadMimeIcon(Context context, String mimeType) {
2390b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        if (Document.MIME_TYPE_DIR.equals(mimeType)) {
24003d30a573b8bc8e169e153a0fffa053ffedcd5eeAlan Viverette            return context.getDrawable(R.drawable.ic_doc_folder);
2410b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        }
2420b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
2430b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        // Look for exact match first
2440b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        Integer resId = sMimeIcons.get(mimeType);
2450b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        if (resId != null) {
24603d30a573b8bc8e169e153a0fffa053ffedcd5eeAlan Viverette            return context.getDrawable(resId);
2470b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        }
2480b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
2490b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        if (mimeType == null) {
2500b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey            // TODO: generic icon?
2510b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey            return null;
2520b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        }
2530b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
2540b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        // Otherwise look for partial match
2550b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        final String typeOnly = mimeType.split("/")[0];
2560b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        if ("audio".equals(typeOnly)) {
25703d30a573b8bc8e169e153a0fffa053ffedcd5eeAlan Viverette            return context.getDrawable(R.drawable.ic_doc_audio);
2580b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        } else if ("image".equals(typeOnly)) {
25903d30a573b8bc8e169e153a0fffa053ffedcd5eeAlan Viverette            return context.getDrawable(R.drawable.ic_doc_image);
2600b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        } else if ("text".equals(typeOnly)) {
26103d30a573b8bc8e169e153a0fffa053ffedcd5eeAlan Viverette            return context.getDrawable(R.drawable.ic_doc_text);
2620b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        } else if ("video".equals(typeOnly)) {
26303d30a573b8bc8e169e153a0fffa053ffedcd5eeAlan Viverette            return context.getDrawable(R.drawable.ic_doc_video);
2640b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        } else {
26503d30a573b8bc8e169e153a0fffa053ffedcd5eeAlan Viverette            return context.getDrawable(R.drawable.ic_doc_generic);
2660b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        }
2670b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey    }
268c29dd61cbfc9f073239bdce3f4fe397deae2c623Jeff Sharkey
269cbce47001e15be85b084c36a64c20039a0c4a667Jeff Sharkey    public static Drawable applyTintColor(Context context, int drawableId, int tintColorId) {
27003d30a573b8bc8e169e153a0fffa053ffedcd5eeAlan Viverette        final Drawable icon = context.getDrawable(drawableId);
271c29dd61cbfc9f073239bdce3f4fe397deae2c623Jeff Sharkey        icon.mutate();
272cbce47001e15be85b084c36a64c20039a0c4a667Jeff Sharkey        icon.setTintList(context.getResources().getColorStateList(tintColorId));
273c29dd61cbfc9f073239bdce3f4fe397deae2c623Jeff Sharkey        return icon;
274c29dd61cbfc9f073239bdce3f4fe397deae2c623Jeff Sharkey    }
275cbce47001e15be85b084c36a64c20039a0c4a667Jeff Sharkey
276cbce47001e15be85b084c36a64c20039a0c4a667Jeff Sharkey    public static Drawable applyTintAttr(Context context, int drawableId, int tintAttrId) {
277cbce47001e15be85b084c36a64c20039a0c4a667Jeff Sharkey        final TypedValue outValue = new TypedValue();
278cbce47001e15be85b084c36a64c20039a0c4a667Jeff Sharkey        context.getTheme().resolveAttribute(tintAttrId, outValue, true);
279cbce47001e15be85b084c36a64c20039a0c4a667Jeff Sharkey        return applyTintColor(context, drawableId, outValue.resourceId);
280cbce47001e15be85b084c36a64c20039a0c4a667Jeff Sharkey    }
2810b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey}
282