281 lines
11 KiB
Java
281 lines
11 KiB
Java
/*
|
|
* Copyright (C) 2013 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
package com.android.documentsui;
|
|
|
|
import android.content.Context;
|
|
import android.content.pm.PackageManager;
|
|
import android.content.pm.ProviderInfo;
|
|
import android.graphics.drawable.Drawable;
|
|
import android.provider.DocumentsContract.Document;
|
|
import android.util.TypedValue;
|
|
|
|
import com.google.android.collect.Maps;
|
|
|
|
import java.util.HashMap;
|
|
|
|
public class IconUtils {
|
|
|
|
private static HashMap<String, Integer> sMimeIcons = Maps.newHashMap();
|
|
|
|
private static void add(String mimeType, int resId) {
|
|
if (sMimeIcons.put(mimeType, resId) != null) {
|
|
throw new RuntimeException(mimeType + " already registered!");
|
|
}
|
|
}
|
|
|
|
static {
|
|
int icon;
|
|
|
|
// Package
|
|
icon = R.drawable.ic_doc_apk;
|
|
add("application/vnd.android.package-archive", icon);
|
|
|
|
// Audio
|
|
icon = R.drawable.ic_doc_audio;
|
|
add("application/ogg", icon);
|
|
add("application/x-flac", icon);
|
|
|
|
// Certificate
|
|
icon = R.drawable.ic_doc_certificate;
|
|
add("application/pgp-keys", icon);
|
|
add("application/pgp-signature", icon);
|
|
add("application/x-pkcs12", icon);
|
|
add("application/x-pkcs7-certreqresp", icon);
|
|
add("application/x-pkcs7-crl", icon);
|
|
add("application/x-x509-ca-cert", icon);
|
|
add("application/x-x509-user-cert", icon);
|
|
add("application/x-pkcs7-certificates", icon);
|
|
add("application/x-pkcs7-mime", icon);
|
|
add("application/x-pkcs7-signature", icon);
|
|
|
|
// Source code
|
|
icon = R.drawable.ic_doc_codes;
|
|
add("application/rdf+xml", icon);
|
|
add("application/rss+xml", icon);
|
|
add("application/x-object", icon);
|
|
add("application/xhtml+xml", icon);
|
|
add("text/css", icon);
|
|
add("text/html", icon);
|
|
add("text/xml", icon);
|
|
add("text/x-c++hdr", icon);
|
|
add("text/x-c++src", icon);
|
|
add("text/x-chdr", icon);
|
|
add("text/x-csrc", icon);
|
|
add("text/x-dsrc", icon);
|
|
add("text/x-csh", icon);
|
|
add("text/x-haskell", icon);
|
|
add("text/x-java", icon);
|
|
add("text/x-literate-haskell", icon);
|
|
add("text/x-pascal", icon);
|
|
add("text/x-tcl", icon);
|
|
add("text/x-tex", icon);
|
|
add("application/x-latex", icon);
|
|
add("application/x-texinfo", icon);
|
|
add("application/atom+xml", icon);
|
|
add("application/ecmascript", icon);
|
|
add("application/json", icon);
|
|
add("application/javascript", icon);
|
|
add("application/xml", icon);
|
|
add("text/javascript", icon);
|
|
add("application/x-javascript", icon);
|
|
|
|
// Compressed
|
|
icon = R.drawable.ic_doc_compressed;
|
|
add("application/mac-binhex40", icon);
|
|
add("application/rar", icon);
|
|
add("application/zip", icon);
|
|
add("application/x-apple-diskimage", icon);
|
|
add("application/x-debian-package", icon);
|
|
add("application/x-gtar", icon);
|
|
add("application/x-iso9660-image", icon);
|
|
add("application/x-lha", icon);
|
|
add("application/x-lzh", icon);
|
|
add("application/x-lzx", icon);
|
|
add("application/x-stuffit", icon);
|
|
add("application/x-tar", icon);
|
|
add("application/x-webarchive", icon);
|
|
add("application/x-webarchive-xml", icon);
|
|
add("application/gzip", icon);
|
|
add("application/x-7z-compressed", icon);
|
|
add("application/x-deb", icon);
|
|
add("application/x-rar-compressed", icon);
|
|
|
|
// Contact
|
|
icon = R.drawable.ic_doc_contact;
|
|
add("text/x-vcard", icon);
|
|
add("text/vcard", icon);
|
|
|
|
// Event
|
|
icon = R.drawable.ic_doc_event;
|
|
add("text/calendar", icon);
|
|
add("text/x-vcalendar", icon);
|
|
|
|
// Font
|
|
icon = R.drawable.ic_doc_font;
|
|
add("application/x-font", icon);
|
|
add("application/font-woff", icon);
|
|
add("application/x-font-woff", icon);
|
|
add("application/x-font-ttf", icon);
|
|
|
|
// Image
|
|
icon = R.drawable.ic_doc_image;
|
|
add("application/vnd.oasis.opendocument.graphics", icon);
|
|
add("application/vnd.oasis.opendocument.graphics-template", icon);
|
|
add("application/vnd.oasis.opendocument.image", icon);
|
|
add("application/vnd.stardivision.draw", icon);
|
|
add("application/vnd.sun.xml.draw", icon);
|
|
add("application/vnd.sun.xml.draw.template", icon);
|
|
|
|
// PDF
|
|
icon = R.drawable.ic_doc_pdf;
|
|
add("application/pdf", icon);
|
|
|
|
// Presentation
|
|
icon = R.drawable.ic_doc_presentation;
|
|
add("application/vnd.stardivision.impress", icon);
|
|
add("application/vnd.sun.xml.impress", icon);
|
|
add("application/vnd.sun.xml.impress.template", icon);
|
|
add("application/x-kpresenter", icon);
|
|
add("application/vnd.oasis.opendocument.presentation", icon);
|
|
|
|
// Spreadsheet
|
|
icon = R.drawable.ic_doc_spreadsheet;
|
|
add("application/vnd.oasis.opendocument.spreadsheet", icon);
|
|
add("application/vnd.oasis.opendocument.spreadsheet-template", icon);
|
|
add("application/vnd.stardivision.calc", icon);
|
|
add("application/vnd.sun.xml.calc", icon);
|
|
add("application/vnd.sun.xml.calc.template", icon);
|
|
add("application/x-kspread", icon);
|
|
|
|
// Text
|
|
icon = R.drawable.ic_doc_text;
|
|
add("application/vnd.oasis.opendocument.text", icon);
|
|
add("application/vnd.oasis.opendocument.text-master", icon);
|
|
add("application/vnd.oasis.opendocument.text-template", icon);
|
|
add("application/vnd.oasis.opendocument.text-web", icon);
|
|
add("application/vnd.stardivision.writer", icon);
|
|
add("application/vnd.stardivision.writer-global", icon);
|
|
add("application/vnd.sun.xml.writer", icon);
|
|
add("application/vnd.sun.xml.writer.global", icon);
|
|
add("application/vnd.sun.xml.writer.template", icon);
|
|
add("application/x-abiword", icon);
|
|
add("application/x-kword", icon);
|
|
|
|
// Video
|
|
icon = R.drawable.ic_doc_video;
|
|
add("application/x-quicktimeplayer", icon);
|
|
add("application/x-shockwave-flash", icon);
|
|
|
|
// Word
|
|
icon = R.drawable.ic_doc_word;
|
|
add("application/msword", icon);
|
|
add("application/vnd.openxmlformats-officedocument.wordprocessingml.document", icon);
|
|
add("application/vnd.openxmlformats-officedocument.wordprocessingml.template", icon);
|
|
|
|
// Excel
|
|
icon = R.drawable.ic_doc_excel;
|
|
add("application/vnd.ms-excel", icon);
|
|
add("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", icon);
|
|
add("application/vnd.openxmlformats-officedocument.spreadsheetml.template", icon);
|
|
|
|
// Powerpoint
|
|
icon = R.drawable.ic_doc_powerpoint;
|
|
add("application/vnd.ms-powerpoint", icon);
|
|
add("application/vnd.openxmlformats-officedocument.presentationml.presentation", icon);
|
|
add("application/vnd.openxmlformats-officedocument.presentationml.template", icon);
|
|
add("application/vnd.openxmlformats-officedocument.presentationml.slideshow", icon);
|
|
}
|
|
|
|
public static Drawable loadPackageIcon(Context context, String authority, int icon) {
|
|
if (icon != 0) {
|
|
if (authority != null) {
|
|
final PackageManager pm = context.getPackageManager();
|
|
final ProviderInfo info = pm.resolveContentProvider(authority, 0);
|
|
if (info != null) {
|
|
return pm.getDrawable(info.packageName, icon, info.applicationInfo);
|
|
}
|
|
} else {
|
|
return context.getDrawable(icon);
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public static Drawable loadMimeIcon(
|
|
Context context, String mimeType, String authority, String docId, int mode) {
|
|
if (Document.MIME_TYPE_DIR.equals(mimeType)) {
|
|
// TODO: eventually move these hacky assets into that package
|
|
if ("com.android.providers.media.documents".equals(authority)
|
|
&& docId.startsWith("album")) {
|
|
return context.getDrawable(R.drawable.ic_doc_album);
|
|
}
|
|
|
|
if (mode == DocumentsActivity.State.MODE_GRID) {
|
|
return context.getDrawable(R.drawable.ic_grid_folder);
|
|
} else {
|
|
return context.getDrawable(R.drawable.ic_doc_folder);
|
|
}
|
|
}
|
|
|
|
return loadMimeIcon(context, mimeType);
|
|
}
|
|
|
|
public static Drawable loadMimeIcon(Context context, String mimeType) {
|
|
if (Document.MIME_TYPE_DIR.equals(mimeType)) {
|
|
return context.getDrawable(R.drawable.ic_doc_folder);
|
|
}
|
|
|
|
// Look for exact match first
|
|
Integer resId = sMimeIcons.get(mimeType);
|
|
if (resId != null) {
|
|
return context.getDrawable(resId);
|
|
}
|
|
|
|
if (mimeType == null) {
|
|
// TODO: generic icon?
|
|
return null;
|
|
}
|
|
|
|
// Otherwise look for partial match
|
|
final String typeOnly = mimeType.split("/")[0];
|
|
if ("audio".equals(typeOnly)) {
|
|
return context.getDrawable(R.drawable.ic_doc_audio);
|
|
} else if ("image".equals(typeOnly)) {
|
|
return context.getDrawable(R.drawable.ic_doc_image);
|
|
} else if ("text".equals(typeOnly)) {
|
|
return context.getDrawable(R.drawable.ic_doc_text);
|
|
} else if ("video".equals(typeOnly)) {
|
|
return context.getDrawable(R.drawable.ic_doc_video);
|
|
} else {
|
|
return context.getDrawable(R.drawable.ic_doc_generic);
|
|
}
|
|
}
|
|
|
|
public static Drawable applyTintColor(Context context, int drawableId, int tintColorId) {
|
|
final Drawable icon = context.getDrawable(drawableId);
|
|
icon.mutate();
|
|
icon.setTintList(context.getColorStateList(tintColorId));
|
|
return icon;
|
|
}
|
|
|
|
public static Drawable applyTintAttr(Context context, int drawableId, int tintAttrId) {
|
|
final TypedValue outValue = new TypedValue();
|
|
context.getTheme().resolveAttribute(tintAttrId, outValue, true);
|
|
return applyTintColor(context, drawableId, outValue.resourceId);
|
|
}
|
|
}
|