We are now defaulting to treating 3GP files as video files for
determining the default icon as it was parsing the video files for
their metadata which was causing ANR problems. On top of this, it was
discovered that the metadata parser was leaking memory.
Change-Id: I88f6cf3d8ae1a62d1294bd3272b27715c2352525
Ticket: QRDL-931
FileSystemObject fso = getItem(position);
FileSystemObject fso = getItem(position);
- Drawable dwIcon = this.mIconHolder.getDrawable(MimeTypeHelper.getIcon(getContext(), fso));
+ Drawable dwIcon = this.mIconHolder.getDrawable(
+ MimeTypeHelper.getIcon(getContext(), fso, true));
mIconHolder.loadDrawable(viewHolder.mIvIcon, fso, dwIcon);
viewHolder.mTvName.setText(fso.getName());
mIconHolder.loadDrawable(viewHolder.mIvIcon, fso, dwIcon);
viewHolder.mTvName.setText(fso.getName());
}
} catch (RuntimeException e) {
Log.e(TAG, "Unable to open 3GP file to determine mimetype");
}
} catch (RuntimeException e) {
Log.e(TAG, "Unable to open 3GP file to determine mimetype");
+ } finally {
+ retriever.release();
}
// Default to video 3gp if the file is unreadable as this was the default before
// ambiguous resolution support was added.
}
// Default to video 3gp if the file is unreadable as this was the default before
// ambiguous resolution support was added.
* @return String The associated mime/type icon resource identifier
*/
public static final String getIcon(Context context, FileSystemObject fso) {
* @return String The associated mime/type icon resource identifier
*/
public static final String getIcon(Context context, FileSystemObject fso) {
+ return getIcon(context, fso, false);
+ }
+
+ public static final String getIcon(Context context, FileSystemObject fso, boolean firstFound) {
//Ensure that mime types are loaded
if (sMimeTypes == null) {
loadMimeTypes(context);
//Ensure that mime types are loaded
if (sMimeTypes == null) {
loadMimeTypes(context);
//Get the extension and delivery
String ext = FileHelper.getExtension(fso);
if (ext != null) {
//Get the extension and delivery
String ext = FileHelper.getExtension(fso);
if (ext != null) {
- MimeTypeInfo mimeTypeInfo = getMimeTypeInternal(fso, ext);
+ MimeTypeInfo mimeTypeInfo = getMimeTypeInternal(fso, ext, firstFound);
if (mimeTypeInfo != null) {
// Create a new drawable
if (mimeTypeInfo != null) {
// Create a new drawable
private static final MimeTypeInfo getMimeTypeInternal(FileSystemObject fso, String ext) {
return getMimeTypeInternal(fso.getFullPath(), ext);
}
private static final MimeTypeInfo getMimeTypeInternal(FileSystemObject fso, String ext) {
return getMimeTypeInternal(fso.getFullPath(), ext);
}
+
+ private static final MimeTypeInfo getMimeTypeInternal(FileSystemObject fso,
+ String ext,
+ boolean firstFound) {
+ return getMimeTypeInternal(fso.getFullPath(), ext, firstFound);
+ }
+
/**
* Get the MimeTypeInfo that describes this file.
* @param absolutePath The absolute path of the file.
/**
* Get the MimeTypeInfo that describes this file.
* @param absolutePath The absolute path of the file.
* @return The MimeTypeInfo object that describes this file, or null if it cannot be retrieved.
*/
private static final MimeTypeInfo getMimeTypeInternal(String absolutePath, String ext) {
* @return The MimeTypeInfo object that describes this file, or null if it cannot be retrieved.
*/
private static final MimeTypeInfo getMimeTypeInternal(String absolutePath, String ext) {
+ return getMimeTypeInternal(absolutePath, ext, false);
+ }
+
+ private static final MimeTypeInfo getMimeTypeInternal(String absolutePath,
+ String ext,
+ boolean firstFound) {
MimeTypeInfo mimeTypeInfo = null;
ArrayList<MimeTypeInfo> mimeTypeInfoList = sMimeTypes.get(ext.toLowerCase(Locale.ROOT));
// Multiple mimetypes map to the same extension, try to resolve it.
MimeTypeInfo mimeTypeInfo = null;
ArrayList<MimeTypeInfo> mimeTypeInfoList = sMimeTypes.get(ext.toLowerCase(Locale.ROOT));
// Multiple mimetypes map to the same extension, try to resolve it.
- if (mimeTypeInfoList != null && mimeTypeInfoList.size() > 1) {
+ if (mimeTypeInfoList != null && mimeTypeInfoList.size() > 1 && !firstFound) {
if (absolutePath != null) {
String mimeType = getAmbiguousExtensionMimeType(absolutePath, ext);
mimeTypeInfo = sExtensionMimeTypes.get(ext + mimeType);
if (absolutePath != null) {
String mimeType = getAmbiguousExtensionMimeType(absolutePath, ext);
mimeTypeInfo = sExtensionMimeTypes.get(ext + mimeType);