package com.hawkbrowser.base;
import java.util.HashMap;
import java.util.concurrent.locks.ReentrantLock;
import com.hawkbrowser.R;
import com.hawkbrowser.util.CommonUtil;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.webkit.MimeTypeMap;
public class MimeManager {
public static final String MIME_TEXT = "text/plain";
private static MimeManager mInstance;
private static final ReentrantLock mLock = new ReentrantLock();
private HashMap mExtToDrawable;
private HashMap mExtToMimeType;
private MimeManager() {
mExtToMimeType = new HashMap();
mExtToMimeType.put("txt", MIME_TEXT);
mExtToMimeType.put("log", MIME_TEXT);
mExtToDrawable = new HashMap();
}
public static MimeManager instance() {
if(null == mInstance) {
mLock.lock();
if(null == mInstance) {
mInstance = new MimeManager();
}
mLock.unlock();
}
return mInstance;
}
public String getMimeType(String path) {
String type = null;
String ext = getFileExt(path);
if((null != ext) && !ext.isEmpty()) {
MimeTypeMap mime = MimeTypeMap.getSingleton();
type = mime.getMimeTypeFromExtension(ext);
if(null == type) {
type = (String)mExtToMimeType.get(ext);
}
}
if((null == type) || type.isEmpty()) {
type = "*/*";
}
return type;
}
public Drawable getDrawable(Context context, String path) {
// Try load cache icon for apk
Drawable icon = (Drawable) mExtToDrawable.get(path);
if(null == icon) {
if(path.endsWith(".apk")) {
icon = CommonUtil.getIconFromApk(context, path);
mExtToDrawable.put(path, icon);
} else {
// Try load cache icon for ext
String ext = getFileExt(path);
icon = (Drawable) mExtToDrawable.get(ext);
if(null == icon) {
icon = loadDefaultDrawable(context, path);
mExtToDrawable.put(ext, icon);
}
}
}
return icon;
}
private Drawable loadDefaultDrawable(Context context, String path) {
Drawable icon = null;
String type = getMimeType(path);
if(type.indexOf("image") != -1) {
icon = context.getResources().getDrawable(R.drawable.icon_photo);
} else if(type.indexOf("video") != -1) {
icon = context.getResources().getDrawable(R.drawable.icon_movie);
} else if(type.indexOf("audio") != -1) {
icon = context.getResources().getDrawable(R.drawable.icon_music);
}
return icon;
}
private String getFileExt(String path) {
int pos = path.lastIndexOf('.');
return (-1 != pos) ? path.substring(pos + 1) : "";
}
}