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