Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit bc723321 authored by herriojr's avatar herriojr Committed by Jon Herriott
Browse files

Fixed ANR & Memory Leak Associated with 3GP

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
(cherry picked from commit 6f6094da)
parent 51e49c9b
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -204,7 +204,8 @@ public class FileSystemObjectAdapter

        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());
+2 −0
Original line number Diff line number Diff line
@@ -74,6 +74,8 @@ public abstract class AmbiguousExtensionHelper {
                }
            } 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.
+19 −2
Original line number Diff line number Diff line
@@ -265,6 +265,10 @@ public final class MimeTypeHelper {
     * @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);
@@ -288,7 +292,7 @@ public final class MimeTypeHelper {
        //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
@@ -434,6 +438,13 @@ public final class MimeTypeHelper {
    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.
@@ -441,10 +452,16 @@ public final class MimeTypeHelper {
     * @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.
        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);