Merge \"Move the MIME type icon detection into the platform.\" into nyc-mr1-dev

am: 9459f93c97

Change-Id: I151a72b8ee1c16ef94da70e85378dd44b4ac077c
This commit is contained in:
Daniel Nishi
2016-07-06 20:02:45 +00:00
committed by android-build-merger
26 changed files with 317 additions and 207 deletions

View File

@@ -34,6 +34,7 @@ import android.database.CrossProcessCursorWrapper;
import android.database.Cursor;
import android.database.IContentObserver;
import android.graphics.Point;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.os.CancellationSignal;
@@ -51,6 +52,7 @@ import android.util.EventLog;
import android.util.Log;
import com.android.internal.util.ArrayUtils;
import com.android.internal.util.MimeIconUtils;
import com.android.internal.util.Preconditions;
import dalvik.system.CloseGuard;
@@ -2693,4 +2695,9 @@ public abstract class ContentResolver {
public int resolveUserId(Uri uri) {
return ContentProvider.getUserIdFromUri(uri, mContext.getUserId());
}
/** @hide */
public Drawable getTypeDrawable(String mimeType) {
return MimeIconUtils.loadMimeIcon(mContext, mimeType);
}
}

View File

@@ -0,0 +1,230 @@
/*
* Copyright (C) 2016 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.internal.util;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.provider.DocumentsContract;
import com.android.internal.R;
import java.util.HashMap;
public class MimeIconUtils {
private static HashMap<String, Integer> sMimeIcons = new HashMap<>();
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);
// Document
icon = R.drawable.ic_doc_document;
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 loadMimeIcon(Context context, String mimeType) {
if (DocumentsContract.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);
}
}
}

View File

@@ -0,0 +1,24 @@
<!--
Copyright (C) 2015 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.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF737373"
android:pathData="M10 4H4c-1.1 0,-1.99.9,-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2,-.9 2,-2V8c0,-1.1,-.9,-2,-2,-2h-8l-2,-2z"/>
</vector>

View File

@@ -0,0 +1,24 @@
<!--
Copyright (C) 2015 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.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF737373"
android:pathData="M14 2H6c-1.1 0,-1.99.9,-1.99 2L4 20c0 1.1.89 2 1.99 2H18c1.1 0 2,-.9 2,-2V8l-6,-6zm2 16H8v-2h8v2zm0,-4H8v-2h8v2zm-3,-5V3.5L18.5 9H13z"/>
</vector>

View File

@@ -2638,4 +2638,30 @@
<!-- Package name for the device provisioning package -->
<java-symbol type="string" name="config_deviceProvisioningPackage" />
<!-- Used for MimeIconUtils. -->
<java-symbol type="drawable" name="ic_doc_apk" />
<java-symbol type="drawable" name="ic_doc_audio" />
<java-symbol type="drawable" name="ic_doc_certificate" />
<java-symbol type="drawable" name="ic_doc_codes" />
<java-symbol type="drawable" name="ic_doc_compressed" />
<java-symbol type="drawable" name="ic_doc_contact" />
<java-symbol type="drawable" name="ic_doc_event" />
<java-symbol type="drawable" name="ic_doc_font" />
<java-symbol type="drawable" name="ic_doc_image" />
<java-symbol type="drawable" name="ic_doc_pdf" />
<java-symbol type="drawable" name="ic_doc_presentation" />
<java-symbol type="drawable" name="ic_doc_spreadsheet" />
<java-symbol type="drawable" name="ic_doc_document" />
<java-symbol type="drawable" name="ic_doc_video" />
<java-symbol type="drawable" name="ic_doc_word" />
<java-symbol type="drawable" name="ic_doc_excel" />
<java-symbol type="drawable" name="ic_doc_powerpoint" />
<java-symbol type="drawable" name="ic_doc_folder" />
<java-symbol type="drawable" name="ic_doc_audio" />
<java-symbol type="drawable" name="ic_doc_image" />
<java-symbol type="drawable" name="ic_doc_text" />
<java-symbol type="drawable" name="ic_doc_video" />
<java-symbol type="drawable" name="ic_doc_generic" />
</resources>

View File

@@ -23,181 +23,7 @@ import android.graphics.drawable.Drawable;
import android.provider.DocumentsContract.Document;
import android.util.TypedValue;
import java.util.HashMap;
public class IconUtils {
private static HashMap<String, Integer> sMimeIcons = new HashMap<>();
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);
// Document
icon = R.drawable.ic_doc_document;
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) {
@@ -225,7 +51,7 @@ public class IconUtils {
if (mode == State.MODE_GRID) {
return context.getDrawable(R.drawable.ic_grid_folder);
} else {
return context.getDrawable(R.drawable.ic_doc_folder);
return context.getDrawable(com.android.internal.R.drawable.ic_doc_folder);
}
}
@@ -233,34 +59,7 @@ public class IconUtils {
}
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);
}
return context.getContentResolver().getTypeDrawable(mimeType);
}
public static Drawable applyTintColor(Context context, int drawableId, int tintColorId) {

View File

@@ -1391,7 +1391,7 @@ public class DirectoryFragment extends Fragment
return mIconHelper.getDocumentIcon(mContext, doc.authority, doc.documentId,
doc.mimeType, doc.icon);
}
return mContext.getDrawable(R.drawable.ic_doc_generic);
return mContext.getDrawable(com.android.internal.R.drawable.ic_doc_generic);
}
private String getTitle(List<DocumentInfo> docs) {

View File

@@ -213,13 +213,13 @@ public class RootInfo implements Durable, Parcelable, Comparable<RootInfo> {
derivedIcon = R.drawable.ic_root_download;
} else if (isImages()) {
derivedType = TYPE_IMAGES;
derivedIcon = R.drawable.ic_doc_image;
derivedIcon = com.android.internal.R.drawable.ic_doc_image;
} else if (isVideos()) {
derivedType = TYPE_VIDEO;
derivedIcon = R.drawable.ic_doc_video;
derivedIcon = com.android.internal.R.drawable.ic_doc_video;
} else if (isAudio()) {
derivedType = TYPE_AUDIO;
derivedIcon = R.drawable.ic_doc_audio;
derivedIcon = com.android.internal.R.drawable.ic_doc_audio;
} else if (isRecents()) {
derivedType = TYPE_RECENTS;
} else {