package com.smartisanos.sidebar.util;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.net.Uri;
import android.text.TextUtils;
import android.view.DragEvent;
import com.smartisanos.sidebar.R;
/**
* Utilities for dealing with MIME types.
*/
public final class MimeUtils {
private static final Map<String, Integer> mimeTypeToIconMap = new HashMap<String, Integer>();
private static final Map<String, Integer> extensionToIconMap = new HashMap<String, Integer>();
static {
add("application/*", "fodp", R.drawable.file_icon_fodp);
add("application/*", "fods", R.drawable.file_icon_fods);
add("application/*", "fodt", R.drawable.file_icon_fodt);
add("application/*", "pages", R.drawable.file_icon_pages);
add("application/*", "numbers", R.drawable.file_icon_numbers);
add("application/vnd.ms-word.document.macroenabled.12", "docm", R.drawable.file_icon_docm);
add("application/x-7z-compressed", "7z", R.drawable.file_icon_7z);
add("application/vnd.oasis.opendocument.presentation", "odp", R.drawable.file_icon_odp);
add("application/vnd.oasis.opendocument.text", "odt", R.drawable.file_icon_odt);
add("application/pdf", "pdf", R.drawable.file_icon_pdf);
add("application/pgp-keys", "key", R.drawable.file_icon_key);
add("application/rar", "rar", R.drawable.file_icon_rar);
add("application/zip", "zip", R.drawable.file_icon_zip);
add("application/vnd.android.package-archive", "apk", R.drawable.file_icon_apk);
add("application/vnd.oasis.opendocument.spreadsheet", "ods", R.drawable.file_icon_ods);
add("application/msword", "doc", R.drawable.file_icon_doc);
add("application/msword", "dot", R.drawable.file_icon_dot);
add("application/vnd.ms-word.template.macroenabled.12", "dotm", R.drawable.file_icon_dotm);
add("application/vnd.openxmlformats-officedocument.wordprocessingml.document", "docx", R.drawable.file_icon_docx);
add("application/vnd.openxmlformats-officedocument.wordprocessingml.template", "dotx", R.drawable.file_icon_dotx);
add("application/vnd.ms-excel", "xls", R.drawable.file_icon_xls);
add("application/vnd.ms-excel", "xlt", R.drawable.file_icon_xlt);
add("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet","xlsx", R.drawable.file_icon_xlsx);
add("application/vnd.openxmlformats-officedocument.spreadsheetml.template", "xltx", R.drawable.file_icon_xltx);
add("application/vnd.ms-powerpoint", "ppt", R.drawable.file_icon_ppt);
add("application/vnd.ms-powerpoint", "pot", R.drawable.file_icon_pot);
add("application/vnd.openxmlformats-officedocument.presentationml.presentation", "pptx", R.drawable.file_icon_pptx);
add("application/vnd.ms-powerpoint.presentation.macroenabled.12", "pptm", R.drawable.file_icon_pptm);
add("application/vnd.openxmlformats-officedocument.presentationml.template", "potx", R.drawable.file_icon_potx);
add("text/plain", "txt", R.drawable.file_icon_txt);
add("message/rfc822", "eml", R.drawable.file_icon_eml);
}
private static void add(String mimeType, String extension, int resId) {
if (!TextUtils.isEmpty(mimeType)) {
mimeTypeToIconMap.put(mimeType, resId);
}
if (!TextUtils.isEmpty(extension)) {
extensionToIconMap.put(extension, resId);
}
}
private MimeUtils() {
}
public static int getResId(String mimeType, String extension) {
if (!TextUtils.isEmpty(extension)) {
if (extensionToIconMap.containsKey(extension)) {
return extensionToIconMap.get(extension);
}
}
if (!TextUtils.isEmpty(mimeType)) {
if (mimeTypeToIconMap.containsKey(mimeType)) {
return mimeTypeToIconMap.get(mimeType);
}
// use default for current type
if (mimeType.startsWith("images/")) {
return R.drawable.file_icon_type_image;
} else if (mimeType.startsWith("audio/")) {
return R.drawable.file_icon_type_audio;
} else if (mimeType.startsWith("video/")) {
return R.drawable.file_icon_type_video;
}
}
return R.drawable.file_icon_default;
}
public static String getCommonMimeType(List<String> mimeTypes) {
if (mimeTypes == null || mimeTypes.size() <= 0) {
return null;
}
boolean sameType = true;
for (int i = 1; i < mimeTypes.size(); ++i) {
if (!mimeTypes.get(0).equals(mimeTypes.get(i))) {
sameType = false;
break;
}
}
if (sameType) {
return mimeTypes.get(0);
}
int index0 = mimeTypes.get(0).indexOf("/");
if (index0 == -1) {
return null;
}
for (int i = 1; i < mimeTypes.size(); ++i) {
int indexNow = mimeTypes.get(i).indexOf("/");
if (indexNow == -1) {
return null;
}
if (indexNow != index0
|| !mimeTypes.get(0).regionMatches(0, mimeTypes.get(i), 0,
indexNow)) {
return "*/*";
}
}
return mimeTypes.get(0).substring(0, index0 + 1) + "*";
}
public static String getCommonMimeType(DragEvent event) {
List<String> mimeTypes = new ArrayList<String>();
for (int i = 0; i < event.getClipDescription().getMimeTypeCount(); ++i) {
mimeTypes.add(event.getClipDescription().getMimeType(i));
}
return MimeUtils.getCommonMimeType(mimeTypes);
}
public static ArrayList<Uri> getUris(DragEvent event) {
ArrayList<Uri> uris = new ArrayList<Uri>();
for (int i = 0; i < event.getClipData().getItemCount(); ++i) {
uris.add(event.getClipData().getItemAt(i).getUri());
}
return uris;
}
}