Loading media/java/android/media/MediaFile.java +3 −4 Original line number Diff line number Diff line Loading @@ -104,10 +104,9 @@ public class MediaFile { public static final int FILE_TYPE_MS_POWERPOINT = 106; public static final int FILE_TYPE_ZIP = 107; static class MediaFileType { int fileType; String mimeType; public static class MediaFileType { public final int fileType; public final String mimeType; MediaFileType(int fileType, String mimeType) { this.fileType = fileType; Loading media/java/android/media/MediaScanner.java +49 −23 Original line number Diff line number Diff line Loading @@ -368,6 +368,34 @@ public class MediaScanner } } private class FileInserter { ContentValues[] mValues = new ContentValues[1000]; int mIndex = 0; public Uri insert(ContentValues values) { if (mIndex == mValues.length) { flush(); } mValues[mIndex++] = values; // URI not needed when doing bulk inserts return null; } public void flush() { while (mIndex < mValues.length) { mValues[mIndex++] = null; } try { mMediaProvider.bulkInsert(mFilesUri, mValues); } catch (RemoteException e) { Log.e(TAG, "RemoteException in FileInserter.flush()", e); } mIndex = 0; } } private FileInserter mFileInserter; // hashes file path to FileCacheEntry. // path should be lower case if mCaseInsensitivePaths is true private HashMap<String, FileCacheEntry> mFileCache; Loading Loading @@ -805,37 +833,31 @@ public class MediaScanner } } Uri tableUri = mFilesUri; if (!mNoMedia) { if (MediaFile.isVideoFileType(mFileType)) { tableUri = mVideoUri; } else if (MediaFile.isImageFileType(mFileType)) { tableUri = mImagesUri; } else if (MediaFile.isAudioFileType(mFileType)) { tableUri = mAudioUri; } } Uri result = null; if (rowId == 0) { if (mMtpObjectHandle != 0) { values.put(MediaStore.MediaColumns.MEDIA_SCANNER_NEW_OBJECT_ID, mMtpObjectHandle); } if (tableUri == mFilesUri) { int format = entry.mFormat; if (format == 0) { format = MediaFile.getFormatCode(entry.mPath, mMimeType); } values.put(Files.FileColumns.FORMAT, format); } // new file, insert it result = mMediaProvider.insert(tableUri, values); if (mFileInserter != null) { result = mFileInserter.insert(values); } else { result = mMediaProvider.insert(mFilesUri, values); } if (result != null) { rowId = ContentUris.parseId(result); entry.mRowId = rowId; } } else { // updated file result = ContentUris.withAppendedId(tableUri, rowId); result = ContentUris.withAppendedId(mFilesUri, rowId); // path should never change, and we want to avoid replacing mixed cased paths // with squashed lower case paths values.remove(MediaStore.MediaColumns.DATA); Loading @@ -854,7 +876,7 @@ public class MediaScanner new String[] { genre }, null); if (cursor == null || cursor.getCount() == 0) { // genre does not exist, so create the genre in the genre table values.clear(); values = new ContentValues(); values.put(MediaStore.Audio.Genres.NAME, genre); uri = mMediaProvider.insert(mGenresUri, values); } else { Loading @@ -876,7 +898,7 @@ public class MediaScanner if (uri != null) { // add entry to audio_genre_map values.clear(); values = new ContentValues(); values.put(MediaStore.Audio.Genres.Members.AUDIO_ID, Long.valueOf(rowId)); mMediaProvider.insert(uri, values); } Loading @@ -885,19 +907,19 @@ public class MediaScanner if (notifications && !mDefaultNotificationSet) { if (TextUtils.isEmpty(mDefaultNotificationFilename) || doesPathHaveFilename(entry.mPath, mDefaultNotificationFilename)) { setSettingIfNotSet(Settings.System.NOTIFICATION_SOUND, tableUri, rowId); setSettingIfNotSet(Settings.System.NOTIFICATION_SOUND, mFilesUri, rowId); mDefaultNotificationSet = true; } } else if (ringtones && !mDefaultRingtoneSet) { if (TextUtils.isEmpty(mDefaultRingtoneFilename) || doesPathHaveFilename(entry.mPath, mDefaultRingtoneFilename)) { setSettingIfNotSet(Settings.System.RINGTONE, tableUri, rowId); setSettingIfNotSet(Settings.System.RINGTONE, mFilesUri, rowId); mDefaultRingtoneSet = true; } } else if (alarms && !mDefaultAlarmSet) { if (TextUtils.isEmpty(mDefaultAlarmAlertFilename) || doesPathHaveFilename(entry.mPath, mDefaultAlarmAlertFilename)) { setSettingIfNotSet(Settings.System.ALARM_ALERT, tableUri, rowId); setSettingIfNotSet(Settings.System.ALARM_ALERT, mFilesUri, rowId); mDefaultAlarmSet = true; } } Loading Loading @@ -1165,10 +1187,14 @@ public class MediaScanner initialize(volumeName); prescan(null, true); long prescan = System.currentTimeMillis(); mFileInserter = new FileInserter(); for (int i = 0; i < directories.length; i++) { processDirectory(directories[i], mClient); } mFileInserter.flush(); mFileInserter = null; long scan = System.currentTimeMillis(); postscan(directories); long end = System.currentTimeMillis(); Loading Loading
media/java/android/media/MediaFile.java +3 −4 Original line number Diff line number Diff line Loading @@ -104,10 +104,9 @@ public class MediaFile { public static final int FILE_TYPE_MS_POWERPOINT = 106; public static final int FILE_TYPE_ZIP = 107; static class MediaFileType { int fileType; String mimeType; public static class MediaFileType { public final int fileType; public final String mimeType; MediaFileType(int fileType, String mimeType) { this.fileType = fileType; Loading
media/java/android/media/MediaScanner.java +49 −23 Original line number Diff line number Diff line Loading @@ -368,6 +368,34 @@ public class MediaScanner } } private class FileInserter { ContentValues[] mValues = new ContentValues[1000]; int mIndex = 0; public Uri insert(ContentValues values) { if (mIndex == mValues.length) { flush(); } mValues[mIndex++] = values; // URI not needed when doing bulk inserts return null; } public void flush() { while (mIndex < mValues.length) { mValues[mIndex++] = null; } try { mMediaProvider.bulkInsert(mFilesUri, mValues); } catch (RemoteException e) { Log.e(TAG, "RemoteException in FileInserter.flush()", e); } mIndex = 0; } } private FileInserter mFileInserter; // hashes file path to FileCacheEntry. // path should be lower case if mCaseInsensitivePaths is true private HashMap<String, FileCacheEntry> mFileCache; Loading Loading @@ -805,37 +833,31 @@ public class MediaScanner } } Uri tableUri = mFilesUri; if (!mNoMedia) { if (MediaFile.isVideoFileType(mFileType)) { tableUri = mVideoUri; } else if (MediaFile.isImageFileType(mFileType)) { tableUri = mImagesUri; } else if (MediaFile.isAudioFileType(mFileType)) { tableUri = mAudioUri; } } Uri result = null; if (rowId == 0) { if (mMtpObjectHandle != 0) { values.put(MediaStore.MediaColumns.MEDIA_SCANNER_NEW_OBJECT_ID, mMtpObjectHandle); } if (tableUri == mFilesUri) { int format = entry.mFormat; if (format == 0) { format = MediaFile.getFormatCode(entry.mPath, mMimeType); } values.put(Files.FileColumns.FORMAT, format); } // new file, insert it result = mMediaProvider.insert(tableUri, values); if (mFileInserter != null) { result = mFileInserter.insert(values); } else { result = mMediaProvider.insert(mFilesUri, values); } if (result != null) { rowId = ContentUris.parseId(result); entry.mRowId = rowId; } } else { // updated file result = ContentUris.withAppendedId(tableUri, rowId); result = ContentUris.withAppendedId(mFilesUri, rowId); // path should never change, and we want to avoid replacing mixed cased paths // with squashed lower case paths values.remove(MediaStore.MediaColumns.DATA); Loading @@ -854,7 +876,7 @@ public class MediaScanner new String[] { genre }, null); if (cursor == null || cursor.getCount() == 0) { // genre does not exist, so create the genre in the genre table values.clear(); values = new ContentValues(); values.put(MediaStore.Audio.Genres.NAME, genre); uri = mMediaProvider.insert(mGenresUri, values); } else { Loading @@ -876,7 +898,7 @@ public class MediaScanner if (uri != null) { // add entry to audio_genre_map values.clear(); values = new ContentValues(); values.put(MediaStore.Audio.Genres.Members.AUDIO_ID, Long.valueOf(rowId)); mMediaProvider.insert(uri, values); } Loading @@ -885,19 +907,19 @@ public class MediaScanner if (notifications && !mDefaultNotificationSet) { if (TextUtils.isEmpty(mDefaultNotificationFilename) || doesPathHaveFilename(entry.mPath, mDefaultNotificationFilename)) { setSettingIfNotSet(Settings.System.NOTIFICATION_SOUND, tableUri, rowId); setSettingIfNotSet(Settings.System.NOTIFICATION_SOUND, mFilesUri, rowId); mDefaultNotificationSet = true; } } else if (ringtones && !mDefaultRingtoneSet) { if (TextUtils.isEmpty(mDefaultRingtoneFilename) || doesPathHaveFilename(entry.mPath, mDefaultRingtoneFilename)) { setSettingIfNotSet(Settings.System.RINGTONE, tableUri, rowId); setSettingIfNotSet(Settings.System.RINGTONE, mFilesUri, rowId); mDefaultRingtoneSet = true; } } else if (alarms && !mDefaultAlarmSet) { if (TextUtils.isEmpty(mDefaultAlarmAlertFilename) || doesPathHaveFilename(entry.mPath, mDefaultAlarmAlertFilename)) { setSettingIfNotSet(Settings.System.ALARM_ALERT, tableUri, rowId); setSettingIfNotSet(Settings.System.ALARM_ALERT, mFilesUri, rowId); mDefaultAlarmSet = true; } } Loading Loading @@ -1165,10 +1187,14 @@ public class MediaScanner initialize(volumeName); prescan(null, true); long prescan = System.currentTimeMillis(); mFileInserter = new FileInserter(); for (int i = 0; i < directories.length; i++) { processDirectory(directories[i], mClient); } mFileInserter.flush(); mFileInserter = null; long scan = System.currentTimeMillis(); postscan(directories); long end = System.currentTimeMillis(); Loading