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

Commit fdfeece6 authored by Marco Nelissen's avatar Marco Nelissen Committed by android-build-merger
Browse files

Merge "Don't treat failed scans as valid media files" into pi-dev

am: e4dc997c

Change-Id: I15ad29a3a9abd3d9751ddfe1f418f4be5ff84a15
parents c302b3b4 e4dc997c
Loading
Loading
Loading
Loading
+24 −15
Original line number Original line Diff line number Diff line
@@ -488,6 +488,7 @@ public class MediaScanner implements AutoCloseable {
        private int mCompilation;
        private int mCompilation;
        private boolean mIsDrm;
        private boolean mIsDrm;
        private boolean mNoMedia;   // flag to suppress file from appearing in media tables
        private boolean mNoMedia;   // flag to suppress file from appearing in media tables
        private boolean mScanSuccess;
        private int mWidth;
        private int mWidth;
        private int mHeight;
        private int mHeight;


@@ -502,6 +503,7 @@ public class MediaScanner implements AutoCloseable {
            mFileType = 0;
            mFileType = 0;
            mFileSize = fileSize;
            mFileSize = fileSize;
            mIsDrm = false;
            mIsDrm = false;
            mScanSuccess = true;


            if (!isDirectory) {
            if (!isDirectory) {
                if (!noMedia && isNoMediaFile(path)) {
                if (!noMedia && isNoMediaFile(path)) {
@@ -623,14 +625,6 @@ public class MediaScanner implements AutoCloseable {
                    if (noMedia) {
                    if (noMedia) {
                        result = endFile(entry, false, false, false, false, false);
                        result = endFile(entry, false, false, false, false, false);
                    } else {
                    } else {
                        String lowpath = path.toLowerCase(Locale.ROOT);
                        boolean ringtones = (lowpath.indexOf(RINGTONES_DIR) > 0);
                        boolean notifications = (lowpath.indexOf(NOTIFICATIONS_DIR) > 0);
                        boolean alarms = (lowpath.indexOf(ALARMS_DIR) > 0);
                        boolean podcasts = (lowpath.indexOf(PODCAST_DIR) > 0);
                        boolean music = (lowpath.indexOf(MUSIC_DIR) > 0) ||
                            (!ringtones && !notifications && !alarms && !podcasts);

                        boolean isaudio = MediaFile.isAudioFileType(mFileType);
                        boolean isaudio = MediaFile.isAudioFileType(mFileType);
                        boolean isvideo = MediaFile.isVideoFileType(mFileType);
                        boolean isvideo = MediaFile.isVideoFileType(mFileType);
                        boolean isimage = MediaFile.isImageFileType(mFileType);
                        boolean isimage = MediaFile.isImageFileType(mFileType);
@@ -642,13 +636,22 @@ public class MediaScanner implements AutoCloseable {


                        // we only extract metadata for audio and video files
                        // we only extract metadata for audio and video files
                        if (isaudio || isvideo) {
                        if (isaudio || isvideo) {
                            processFile(path, mimeType, this);
                            mScanSuccess = processFile(path, mimeType, this);
                        }
                        }


                        if (isimage) {
                        if (isimage) {
                            processImageFile(path);
                            mScanSuccess = processImageFile(path);
                        }
                        }


                        String lowpath = path.toLowerCase(Locale.ROOT);
                        boolean ringtones = mScanSuccess && (lowpath.indexOf(RINGTONES_DIR) > 0);
                        boolean notifications = mScanSuccess &&
                                (lowpath.indexOf(NOTIFICATIONS_DIR) > 0);
                        boolean alarms = mScanSuccess && (lowpath.indexOf(ALARMS_DIR) > 0);
                        boolean podcasts = mScanSuccess && (lowpath.indexOf(PODCAST_DIR) > 0);
                        boolean music = mScanSuccess && ((lowpath.indexOf(MUSIC_DIR) > 0) ||
                            (!ringtones && !notifications && !alarms && !podcasts));

                        result = endFile(entry, ringtones, notifications, alarms, music, podcasts);
                        result = endFile(entry, ringtones, notifications, alarms, music, podcasts);
                    }
                    }
                }
                }
@@ -816,16 +819,18 @@ public class MediaScanner implements AutoCloseable {
            return genreTagValue;
            return genreTagValue;
        }
        }


        private void processImageFile(String path) {
        private boolean processImageFile(String path) {
            try {
            try {
                mBitmapOptions.outWidth = 0;
                mBitmapOptions.outWidth = 0;
                mBitmapOptions.outHeight = 0;
                mBitmapOptions.outHeight = 0;
                BitmapFactory.decodeFile(path, mBitmapOptions);
                BitmapFactory.decodeFile(path, mBitmapOptions);
                mWidth = mBitmapOptions.outWidth;
                mWidth = mBitmapOptions.outWidth;
                mHeight = mBitmapOptions.outHeight;
                mHeight = mBitmapOptions.outHeight;
                return mWidth > 0 && mHeight > 0;
            } catch (Throwable th) {
            } catch (Throwable th) {
                // ignore;
                // ignore;
            }
            }
            return false;
        }
        }


        public void setMimeType(String mimeType) {
        public void setMimeType(String mimeType) {
@@ -878,7 +883,7 @@ public class MediaScanner implements AutoCloseable {
                    }
                    }
                } else if (MediaFile.isImageFileType(mFileType)) {
                } else if (MediaFile.isImageFileType(mFileType)) {
                    // FIXME - add DESCRIPTION
                    // FIXME - add DESCRIPTION
                } else if (MediaFile.isAudioFileType(mFileType)) {
                } else if (mScanSuccess && MediaFile.isAudioFileType(mFileType)) {
                    map.put(Audio.Media.ARTIST, (mArtist != null && mArtist.length() > 0) ?
                    map.put(Audio.Media.ARTIST, (mArtist != null && mArtist.length() > 0) ?
                            mArtist : MediaStore.UNKNOWN_STRING);
                            mArtist : MediaStore.UNKNOWN_STRING);
                    map.put(Audio.Media.ALBUM_ARTIST, (mAlbumArtist != null &&
                    map.put(Audio.Media.ALBUM_ARTIST, (mAlbumArtist != null &&
@@ -894,6 +899,10 @@ public class MediaScanner implements AutoCloseable {
                    map.put(Audio.Media.DURATION, mDuration);
                    map.put(Audio.Media.DURATION, mDuration);
                    map.put(Audio.Media.COMPILATION, mCompilation);
                    map.put(Audio.Media.COMPILATION, mCompilation);
                }
                }
                if (!mScanSuccess) {
                    // force mediaprovider to not determine the media type from the mime type
                    map.put(Files.FileColumns.MEDIA_TYPE, 0);
                }
            }
            }
            return map;
            return map;
        }
        }
@@ -1001,7 +1010,7 @@ public class MediaScanner implements AutoCloseable {


            Uri tableUri = mFilesUri;
            Uri tableUri = mFilesUri;
            MediaInserter inserter = mMediaInserter;
            MediaInserter inserter = mMediaInserter;
            if (!mNoMedia) {
            if (mScanSuccess && !mNoMedia) {
                if (MediaFile.isVideoFileType(mFileType)) {
                if (MediaFile.isVideoFileType(mFileType)) {
                    tableUri = mVideoUri;
                    tableUri = mVideoUri;
                } else if (MediaFile.isImageFileType(mFileType)) {
                } else if (MediaFile.isImageFileType(mFileType)) {
@@ -1071,7 +1080,7 @@ public class MediaScanner implements AutoCloseable {
                values.remove(MediaStore.MediaColumns.DATA);
                values.remove(MediaStore.MediaColumns.DATA);


                int mediaType = 0;
                int mediaType = 0;
                if (!MediaScanner.isNoMediaPath(entry.mPath)) {
                if (mScanSuccess && !MediaScanner.isNoMediaPath(entry.mPath)) {
                    int fileType = MediaFile.getFileTypeForMimeType(mMimeType);
                    int fileType = MediaFile.getFileTypeForMimeType(mMimeType);
                    if (MediaFile.isAudioFileType(fileType)) {
                    if (MediaFile.isAudioFileType(fileType)) {
                        mediaType = FileColumns.MEDIA_TYPE_AUDIO;
                        mediaType = FileColumns.MEDIA_TYPE_AUDIO;
@@ -1890,7 +1899,7 @@ public class MediaScanner implements AutoCloseable {
    }
    }


    private native void processDirectory(String path, MediaScannerClient client);
    private native void processDirectory(String path, MediaScannerClient client);
    private native void processFile(String path, String mimeType, MediaScannerClient client);
    private native boolean processFile(String path, String mimeType, MediaScannerClient client);
    private native void setLocale(String locale);
    private native void setLocale(String locale);


    public native byte[] extractAlbumArt(FileDescriptor fd);
    public native byte[] extractAlbumArt(FileDescriptor fd);
+7 −6
Original line number Original line Diff line number Diff line
@@ -264,7 +264,7 @@ android_media_MediaScanner_processDirectory(
    env->ReleaseStringUTFChars(path, pathStr);
    env->ReleaseStringUTFChars(path, pathStr);
}
}


static void
static jboolean
android_media_MediaScanner_processFile(
android_media_MediaScanner_processFile(
        JNIEnv *env, jobject thiz, jstring path,
        JNIEnv *env, jobject thiz, jstring path,
        jstring mimeType, jobject client)
        jstring mimeType, jobject client)
@@ -275,17 +275,17 @@ android_media_MediaScanner_processFile(
    MediaScanner *mp = getNativeScanner_l(env, thiz);
    MediaScanner *mp = getNativeScanner_l(env, thiz);
    if (mp == NULL) {
    if (mp == NULL) {
        jniThrowException(env, kRunTimeException, "No scanner available");
        jniThrowException(env, kRunTimeException, "No scanner available");
        return;
        return false;
    }
    }


    if (path == NULL) {
    if (path == NULL) {
        jniThrowException(env, kIllegalArgumentException, NULL);
        jniThrowException(env, kIllegalArgumentException, NULL);
        return;
        return false;
    }
    }


    const char *pathStr = env->GetStringUTFChars(path, NULL);
    const char *pathStr = env->GetStringUTFChars(path, NULL);
    if (pathStr == NULL) {  // Out of memory
    if (pathStr == NULL) {  // Out of memory
        return;
        return false;
    }
    }


    const char *mimeTypeStr =
    const char *mimeTypeStr =
@@ -293,7 +293,7 @@ android_media_MediaScanner_processFile(
    if (mimeType && mimeTypeStr == NULL) {  // Out of memory
    if (mimeType && mimeTypeStr == NULL) {  // Out of memory
        // ReleaseStringUTFChars can be called with an exception pending.
        // ReleaseStringUTFChars can be called with an exception pending.
        env->ReleaseStringUTFChars(path, pathStr);
        env->ReleaseStringUTFChars(path, pathStr);
        return;
        return false;
    }
    }


    MyMediaScannerClient myClient(env, client);
    MyMediaScannerClient myClient(env, client);
@@ -305,6 +305,7 @@ android_media_MediaScanner_processFile(
    if (mimeType) {
    if (mimeType) {
        env->ReleaseStringUTFChars(mimeType, mimeTypeStr);
        env->ReleaseStringUTFChars(mimeType, mimeTypeStr);
    }
    }
    return result != MEDIA_SCAN_RESULT_ERROR;
}
}


static void
static void
@@ -421,7 +422,7 @@ static const JNINativeMethod gMethods[] = {


    {
    {
        "processFile",
        "processFile",
        "(Ljava/lang/String;Ljava/lang/String;Landroid/media/MediaScannerClient;)V",
        "(Ljava/lang/String;Ljava/lang/String;Landroid/media/MediaScannerClient;)Z",
        (void *)android_media_MediaScanner_processFile
        (void *)android_media_MediaScanner_processFile
    },
    },