IconUtils.java revision 7a3b88cf56ded3afb9bd6d1ad150b2d6b1f2f4d7
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.graphics.drawable.Drawable;
230b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkeyimport android.provider.DocumentsContract.Document;
24c29dd61cbfc9f073239bdce3f4fe397deae2c623Jeff Sharkeyimport android.util.TypedValue;
250b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
260b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkeyimport java.util.HashMap;
270b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
280b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkeypublic class IconUtils {
290b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
3058efce36cd1b26006e08ddd696292bf06fc34c81Steve McKay    private static HashMap<String, Integer> sMimeIcons = new HashMap<>();
310b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
320b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey    private static void add(String mimeType, int resId) {
330b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        if (sMimeIcons.put(mimeType, resId) != null) {
340b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey            throw new RuntimeException(mimeType + " already registered!");
350b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        }
360b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey    }
370b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
380b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey    static {
390b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        int icon;
400b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
410b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        // Package
420b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        icon = R.drawable.ic_doc_apk;
430b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.android.package-archive", icon);
440b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
450b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        // Audio
46c29dd61cbfc9f073239bdce3f4fe397deae2c623Jeff Sharkey        icon = R.drawable.ic_doc_audio;
470b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/ogg", icon);
480b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-flac", icon);
490b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
500b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        // Certificate
510b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        icon = R.drawable.ic_doc_certificate;
520b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/pgp-keys", icon);
530b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/pgp-signature", icon);
540b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-pkcs12", icon);
550b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-pkcs7-certreqresp", icon);
560b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-pkcs7-crl", icon);
570b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-x509-ca-cert", icon);
580b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-x509-user-cert", icon);
590b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-pkcs7-certificates", icon);
600b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-pkcs7-mime", icon);
610b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-pkcs7-signature", icon);
620b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
630b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        // Source code
640b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        icon = R.drawable.ic_doc_codes;
650b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/rdf+xml", icon);
660b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/rss+xml", icon);
670b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-object", icon);
680b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/xhtml+xml", icon);
690b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("text/css", icon);
700b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("text/html", icon);
710b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("text/xml", icon);
720b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("text/x-c++hdr", icon);
730b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("text/x-c++src", icon);
740b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("text/x-chdr", icon);
750b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("text/x-csrc", icon);
760b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("text/x-dsrc", icon);
770b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("text/x-csh", icon);
780b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("text/x-haskell", icon);
790b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("text/x-java", icon);
800b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("text/x-literate-haskell", icon);
810b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("text/x-pascal", icon);
820b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("text/x-tcl", icon);
830b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("text/x-tex", icon);
840b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-latex", icon);
850b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-texinfo", icon);
860b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/atom+xml", icon);
870b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/ecmascript", icon);
880b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/json", icon);
890b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/javascript", icon);
900b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/xml", icon);
910b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("text/javascript", icon);
920b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-javascript", icon);
930b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
940b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        // Compressed
950b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        icon = R.drawable.ic_doc_compressed;
960b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/mac-binhex40", icon);
970b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/rar", icon);
980b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/zip", icon);
990b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-apple-diskimage", icon);
1000b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-debian-package", icon);
1010b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-gtar", icon);
1020b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-iso9660-image", icon);
1030b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-lha", icon);
1040b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-lzh", icon);
1050b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-lzx", icon);
1060b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-stuffit", icon);
1070b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-tar", icon);
1080b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-webarchive", icon);
1090b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-webarchive-xml", icon);
1100b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/gzip", icon);
1110b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-7z-compressed", icon);
1120b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-deb", icon);
1130b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-rar-compressed", icon);
1140b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
1150b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        // Contact
1160b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        icon = R.drawable.ic_doc_contact;
1170b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("text/x-vcard", icon);
1180b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("text/vcard", icon);
1190b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
1200b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        // Event
1210b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        icon = R.drawable.ic_doc_event;
1220b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("text/calendar", icon);
1230b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("text/x-vcalendar", icon);
1240b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
1250b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        // Font
1260b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        icon = R.drawable.ic_doc_font;
1270b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-font", icon);
1280b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/font-woff", icon);
1290b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-font-woff", icon);
1300b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-font-ttf", icon);
1310b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
1320b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        // Image
133c29dd61cbfc9f073239bdce3f4fe397deae2c623Jeff Sharkey        icon = R.drawable.ic_doc_image;
1340b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.oasis.opendocument.graphics", icon);
1350b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.oasis.opendocument.graphics-template", icon);
1360b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.oasis.opendocument.image", icon);
1370b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.stardivision.draw", icon);
1380b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.sun.xml.draw", icon);
1390b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.sun.xml.draw.template", icon);
1400b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
1410b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        // PDF
1420b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        icon = R.drawable.ic_doc_pdf;
1430b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/pdf", icon);
1440b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
1450b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        // Presentation
1460b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        icon = R.drawable.ic_doc_presentation;
1470b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.stardivision.impress", icon);
1480b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.sun.xml.impress", icon);
1490b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.sun.xml.impress.template", icon);
1500b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-kpresenter", icon);
1510b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.oasis.opendocument.presentation", icon);
1520b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
1530b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        // Spreadsheet
1540b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        icon = R.drawable.ic_doc_spreadsheet;
1550b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.oasis.opendocument.spreadsheet", icon);
1560b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.oasis.opendocument.spreadsheet-template", icon);
1570b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.stardivision.calc", icon);
1580b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.sun.xml.calc", icon);
1590b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.sun.xml.calc.template", icon);
1600b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-kspread", icon);
1610b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
1620b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        // Text
1630b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        icon = R.drawable.ic_doc_text;
1640b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.oasis.opendocument.text", icon);
1650b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.oasis.opendocument.text-master", icon);
1660b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.oasis.opendocument.text-template", icon);
1670b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.oasis.opendocument.text-web", icon);
1680b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.stardivision.writer", icon);
1690b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.stardivision.writer-global", icon);
1700b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.sun.xml.writer", icon);
1710b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.sun.xml.writer.global", icon);
1720b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/vnd.sun.xml.writer.template", icon);
1730b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-abiword", icon);
1740b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-kword", icon);
1750b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
1760b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        // Video
177c29dd61cbfc9f073239bdce3f4fe397deae2c623Jeff Sharkey        icon = R.drawable.ic_doc_video;
1780b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-quicktimeplayer", icon);
1790b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        add("application/x-shockwave-flash", icon);
180770a53288643197a903999fac5469e4f1e6e4b2cJeff Sharkey
181770a53288643197a903999fac5469e4f1e6e4b2cJeff Sharkey        // Word
182770a53288643197a903999fac5469e4f1e6e4b2cJeff Sharkey        icon = R.drawable.ic_doc_word;
183770a53288643197a903999fac5469e4f1e6e4b2cJeff Sharkey        add("application/msword", icon);
184770a53288643197a903999fac5469e4f1e6e4b2cJeff Sharkey        add("application/vnd.openxmlformats-officedocument.wordprocessingml.document", icon);
185770a53288643197a903999fac5469e4f1e6e4b2cJeff Sharkey        add("application/vnd.openxmlformats-officedocument.wordprocessingml.template", icon);
186770a53288643197a903999fac5469e4f1e6e4b2cJeff Sharkey
187770a53288643197a903999fac5469e4f1e6e4b2cJeff Sharkey        // Excel
188770a53288643197a903999fac5469e4f1e6e4b2cJeff Sharkey        icon = R.drawable.ic_doc_excel;
189770a53288643197a903999fac5469e4f1e6e4b2cJeff Sharkey        add("application/vnd.ms-excel", icon);
190770a53288643197a903999fac5469e4f1e6e4b2cJeff Sharkey        add("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", icon);
191770a53288643197a903999fac5469e4f1e6e4b2cJeff Sharkey        add("application/vnd.openxmlformats-officedocument.spreadsheetml.template", icon);
192770a53288643197a903999fac5469e4f1e6e4b2cJeff Sharkey
193770a53288643197a903999fac5469e4f1e6e4b2cJeff Sharkey        // Powerpoint
194770a53288643197a903999fac5469e4f1e6e4b2cJeff Sharkey        icon = R.drawable.ic_doc_powerpoint;
195770a53288643197a903999fac5469e4f1e6e4b2cJeff Sharkey        add("application/vnd.ms-powerpoint", icon);
196770a53288643197a903999fac5469e4f1e6e4b2cJeff Sharkey        add("application/vnd.openxmlformats-officedocument.presentationml.presentation", icon);
197770a53288643197a903999fac5469e4f1e6e4b2cJeff Sharkey        add("application/vnd.openxmlformats-officedocument.presentationml.template", icon);
198770a53288643197a903999fac5469e4f1e6e4b2cJeff Sharkey        add("application/vnd.openxmlformats-officedocument.presentationml.slideshow", icon);
1990b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey    }
2000b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
2010b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey    public static Drawable loadPackageIcon(Context context, String authority, int icon) {
2020b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        if (icon != 0) {
2030b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey            if (authority != null) {
2040b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey                final PackageManager pm = context.getPackageManager();
2050b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey                final ProviderInfo info = pm.resolveContentProvider(authority, 0);
2060b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey                if (info != null) {
2070b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey                    return pm.getDrawable(info.packageName, icon, info.applicationInfo);
2080b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey                }
2090b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey            } else {
21003d30a573b8bc8e169e153a0fffa053ffedcd5eeAlan Viverette                return context.getDrawable(icon);
2110b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey            }
2120b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        }
2130b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        return null;
2140b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey    }
2150b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
216563ee0fbe99c234f3364044cb762a75abbbaa797Jeff Sharkey    public static Drawable loadMimeIcon(
217563ee0fbe99c234f3364044cb762a75abbbaa797Jeff Sharkey            Context context, String mimeType, String authority, String docId, int mode) {
218563ee0fbe99c234f3364044cb762a75abbbaa797Jeff Sharkey        if (Document.MIME_TYPE_DIR.equals(mimeType)) {
219563ee0fbe99c234f3364044cb762a75abbbaa797Jeff Sharkey            // TODO: eventually move these hacky assets into that package
220563ee0fbe99c234f3364044cb762a75abbbaa797Jeff Sharkey            if ("com.android.providers.media.documents".equals(authority)
221563ee0fbe99c234f3364044cb762a75abbbaa797Jeff Sharkey                    && docId.startsWith("album")) {
22203d30a573b8bc8e169e153a0fffa053ffedcd5eeAlan Viverette                return context.getDrawable(R.drawable.ic_doc_album);
223563ee0fbe99c234f3364044cb762a75abbbaa797Jeff Sharkey            }
224563ee0fbe99c234f3364044cb762a75abbbaa797Jeff Sharkey
2257a3b88cf56ded3afb9bd6d1ad150b2d6b1f2f4d7Steve McKay            if (mode == State.MODE_GRID) {
22603d30a573b8bc8e169e153a0fffa053ffedcd5eeAlan Viverette                return context.getDrawable(R.drawable.ic_grid_folder);
227563ee0fbe99c234f3364044cb762a75abbbaa797Jeff Sharkey            } else {
22803d30a573b8bc8e169e153a0fffa053ffedcd5eeAlan Viverette                return context.getDrawable(R.drawable.ic_doc_folder);
229563ee0fbe99c234f3364044cb762a75abbbaa797Jeff Sharkey            }
230563ee0fbe99c234f3364044cb762a75abbbaa797Jeff Sharkey        }
231563ee0fbe99c234f3364044cb762a75abbbaa797Jeff Sharkey
232563ee0fbe99c234f3364044cb762a75abbbaa797Jeff Sharkey        return loadMimeIcon(context, mimeType);
233563ee0fbe99c234f3364044cb762a75abbbaa797Jeff Sharkey    }
234563ee0fbe99c234f3364044cb762a75abbbaa797Jeff Sharkey
2350b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey    public static Drawable loadMimeIcon(Context context, String mimeType) {
2360b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        if (Document.MIME_TYPE_DIR.equals(mimeType)) {
23703d30a573b8bc8e169e153a0fffa053ffedcd5eeAlan Viverette            return context.getDrawable(R.drawable.ic_doc_folder);
2380b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        }
2390b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
2400b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        // Look for exact match first
2410b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        Integer resId = sMimeIcons.get(mimeType);
2420b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        if (resId != null) {
24303d30a573b8bc8e169e153a0fffa053ffedcd5eeAlan Viverette            return context.getDrawable(resId);
2440b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        }
2450b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
2460b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        if (mimeType == null) {
2470b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey            // TODO: generic icon?
2480b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey            return null;
2490b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        }
2500b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey
2510b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        // Otherwise look for partial match
2520b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        final String typeOnly = mimeType.split("/")[0];
2530b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        if ("audio".equals(typeOnly)) {
25403d30a573b8bc8e169e153a0fffa053ffedcd5eeAlan Viverette            return context.getDrawable(R.drawable.ic_doc_audio);
2550b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        } else if ("image".equals(typeOnly)) {
25603d30a573b8bc8e169e153a0fffa053ffedcd5eeAlan Viverette            return context.getDrawable(R.drawable.ic_doc_image);
2570b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        } else if ("text".equals(typeOnly)) {
25803d30a573b8bc8e169e153a0fffa053ffedcd5eeAlan Viverette            return context.getDrawable(R.drawable.ic_doc_text);
2590b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        } else if ("video".equals(typeOnly)) {
26003d30a573b8bc8e169e153a0fffa053ffedcd5eeAlan Viverette            return context.getDrawable(R.drawable.ic_doc_video);
2610b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        } else {
26203d30a573b8bc8e169e153a0fffa053ffedcd5eeAlan Viverette            return context.getDrawable(R.drawable.ic_doc_generic);
2630b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey        }
2640b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey    }
265c29dd61cbfc9f073239bdce3f4fe397deae2c623Jeff Sharkey
266cbce47001e15be85b084c36a64c20039a0c4a667Jeff Sharkey    public static Drawable applyTintColor(Context context, int drawableId, int tintColorId) {
26703d30a573b8bc8e169e153a0fffa053ffedcd5eeAlan Viverette        final Drawable icon = context.getDrawable(drawableId);
268c29dd61cbfc9f073239bdce3f4fe397deae2c623Jeff Sharkey        icon.mutate();
2694a357cd2e55293402d7172766f7f9419815fc1e8Alan Viverette        icon.setTintList(context.getColorStateList(tintColorId));
270c29dd61cbfc9f073239bdce3f4fe397deae2c623Jeff Sharkey        return icon;
271c29dd61cbfc9f073239bdce3f4fe397deae2c623Jeff Sharkey    }
272cbce47001e15be85b084c36a64c20039a0c4a667Jeff Sharkey
273cbce47001e15be85b084c36a64c20039a0c4a667Jeff Sharkey    public static Drawable applyTintAttr(Context context, int drawableId, int tintAttrId) {
274cbce47001e15be85b084c36a64c20039a0c4a667Jeff Sharkey        final TypedValue outValue = new TypedValue();
275cbce47001e15be85b084c36a64c20039a0c4a667Jeff Sharkey        context.getTheme().resolveAttribute(tintAttrId, outValue, true);
276cbce47001e15be85b084c36a64c20039a0c4a667Jeff Sharkey        return applyTintColor(context, drawableId, outValue.resourceId);
277cbce47001e15be85b084c36a64c20039a0c4a667Jeff Sharkey    }
2780b14db3cf5eac43736462999337c9a3efdc1ac81Jeff Sharkey}
279