Loading media/java/android/media/MediaScanner.java +36 −15 Original line number Diff line number Diff line Loading @@ -21,12 +21,14 @@ import android.content.ContentResolver; import android.content.ContentUris; import android.content.ContentValues; import android.content.Context; import android.content.SharedPreferences; import android.database.Cursor; import android.database.SQLException; import android.drm.DrmManagerClient; import android.graphics.BitmapFactory; import android.mtp.MtpConstants; import android.net.Uri; import android.os.Build; import android.os.Environment; import android.os.RemoteException; import android.os.SystemProperties; Loading Loading @@ -153,6 +155,11 @@ public class MediaScanner implements AutoCloseable { private static final String MUSIC_DIR = "/music/"; private static final String PODCAST_DIR = "/podcasts/"; public static final String SCANNED_BUILD_PREFS_NAME = "MediaScanBuild"; public static final String LAST_INTERNAL_SCAN_FINGERPRINT = "lastScanFingerprint"; private static final String SYSTEM_SOUNDS_DIR = "/system/media/audio"; private static String sLastInternalScanFingerprint; private static final String[] ID3_GENRES = { // ID3v1 Genres "Blues", Loading Loading @@ -402,6 +409,13 @@ public class MediaScanner implements AutoCloseable { mMediaProvider = mContext.getContentResolver() .acquireContentProviderClient(MediaStore.AUTHORITY); if (sLastInternalScanFingerprint == null) { final SharedPreferences scanSettings = mContext.getSharedPreferences(SCANNED_BUILD_PREFS_NAME, Context.MODE_PRIVATE); sLastInternalScanFingerprint = scanSettings.getString(LAST_INTERNAL_SCAN_FINGERPRINT, new String()); } mAudioUri = Audio.Media.getContentUri(volumeName); mVideoUri = Video.Media.getContentUri(volumeName); mImagesUri = Images.Media.getContentUri(volumeName); Loading Loading @@ -585,8 +599,8 @@ public class MediaScanner implements AutoCloseable { entry.mRowId = 0; } if (entry.mPath != null && ((!mDefaultNotificationSet && if (entry.mPath != null) { if (((!mDefaultNotificationSet && doesPathHaveFilename(entry.mPath, mDefaultNotificationFilename)) || (!mDefaultRingtoneSet && doesPathHaveFilename(entry.mPath, mDefaultRingtoneFilename)) Loading @@ -595,6 +609,14 @@ public class MediaScanner implements AutoCloseable { Log.w(TAG, "forcing rescan of " + entry.mPath + "since ringtone setting didn't finish"); scanAlways = true; } else if (isSystemSoundWithMetadata(entry.mPath) && !Build.FINGERPRINT.equals(sLastInternalScanFingerprint)) { // file is located on the system partition where the date cannot be trusted: // rescan if the build fingerprint has changed since the last scan. Log.i(TAG, "forcing rescan of " + entry.mPath + " since build fingerprint changed"); scanAlways = true; } } // rescan for metadata if file was modified since last scan Loading Loading @@ -1128,6 +1150,15 @@ public class MediaScanner implements AutoCloseable { }; // end of anonymous MediaScannerClient instance private static boolean isSystemSoundWithMetadata(String path) { if (path.startsWith(SYSTEM_SOUNDS_DIR + ALARMS_DIR) || path.startsWith(SYSTEM_SOUNDS_DIR + RINGTONES_DIR) || path.startsWith(SYSTEM_SOUNDS_DIR + NOTIFICATIONS_DIR)) { return true; } return false; } private String settingSetIndicatorName(String base) { return base + "_set"; } Loading Loading @@ -1252,16 +1283,6 @@ public class MediaScanner implements AutoCloseable { } } private boolean inScanDirectory(String path, String[] directories) { for (int i = 0; i < directories.length; i++) { String directory = directories[i]; if (path.startsWith(directory)) { return true; } } return false; } private void pruneDeadThumbnailFiles() { HashSet<String> existingFiles = new HashSet<String>(); String directory = "/sdcard/DCIM/.thumbnails"; Loading Loading
media/java/android/media/MediaScanner.java +36 −15 Original line number Diff line number Diff line Loading @@ -21,12 +21,14 @@ import android.content.ContentResolver; import android.content.ContentUris; import android.content.ContentValues; import android.content.Context; import android.content.SharedPreferences; import android.database.Cursor; import android.database.SQLException; import android.drm.DrmManagerClient; import android.graphics.BitmapFactory; import android.mtp.MtpConstants; import android.net.Uri; import android.os.Build; import android.os.Environment; import android.os.RemoteException; import android.os.SystemProperties; Loading Loading @@ -153,6 +155,11 @@ public class MediaScanner implements AutoCloseable { private static final String MUSIC_DIR = "/music/"; private static final String PODCAST_DIR = "/podcasts/"; public static final String SCANNED_BUILD_PREFS_NAME = "MediaScanBuild"; public static final String LAST_INTERNAL_SCAN_FINGERPRINT = "lastScanFingerprint"; private static final String SYSTEM_SOUNDS_DIR = "/system/media/audio"; private static String sLastInternalScanFingerprint; private static final String[] ID3_GENRES = { // ID3v1 Genres "Blues", Loading Loading @@ -402,6 +409,13 @@ public class MediaScanner implements AutoCloseable { mMediaProvider = mContext.getContentResolver() .acquireContentProviderClient(MediaStore.AUTHORITY); if (sLastInternalScanFingerprint == null) { final SharedPreferences scanSettings = mContext.getSharedPreferences(SCANNED_BUILD_PREFS_NAME, Context.MODE_PRIVATE); sLastInternalScanFingerprint = scanSettings.getString(LAST_INTERNAL_SCAN_FINGERPRINT, new String()); } mAudioUri = Audio.Media.getContentUri(volumeName); mVideoUri = Video.Media.getContentUri(volumeName); mImagesUri = Images.Media.getContentUri(volumeName); Loading Loading @@ -585,8 +599,8 @@ public class MediaScanner implements AutoCloseable { entry.mRowId = 0; } if (entry.mPath != null && ((!mDefaultNotificationSet && if (entry.mPath != null) { if (((!mDefaultNotificationSet && doesPathHaveFilename(entry.mPath, mDefaultNotificationFilename)) || (!mDefaultRingtoneSet && doesPathHaveFilename(entry.mPath, mDefaultRingtoneFilename)) Loading @@ -595,6 +609,14 @@ public class MediaScanner implements AutoCloseable { Log.w(TAG, "forcing rescan of " + entry.mPath + "since ringtone setting didn't finish"); scanAlways = true; } else if (isSystemSoundWithMetadata(entry.mPath) && !Build.FINGERPRINT.equals(sLastInternalScanFingerprint)) { // file is located on the system partition where the date cannot be trusted: // rescan if the build fingerprint has changed since the last scan. Log.i(TAG, "forcing rescan of " + entry.mPath + " since build fingerprint changed"); scanAlways = true; } } // rescan for metadata if file was modified since last scan Loading Loading @@ -1128,6 +1150,15 @@ public class MediaScanner implements AutoCloseable { }; // end of anonymous MediaScannerClient instance private static boolean isSystemSoundWithMetadata(String path) { if (path.startsWith(SYSTEM_SOUNDS_DIR + ALARMS_DIR) || path.startsWith(SYSTEM_SOUNDS_DIR + RINGTONES_DIR) || path.startsWith(SYSTEM_SOUNDS_DIR + NOTIFICATIONS_DIR)) { return true; } return false; } private String settingSetIndicatorName(String base) { return base + "_set"; } Loading Loading @@ -1252,16 +1283,6 @@ public class MediaScanner implements AutoCloseable { } } private boolean inScanDirectory(String path, String[] directories) { for (int i = 0; i < directories.length; i++) { String directory = directories[i]; if (path.startsWith(directory)) { return true; } } return false; } private void pruneDeadThumbnailFiles() { HashSet<String> existingFiles = new HashSet<String>(); String directory = "/sdcard/DCIM/.thumbnails"; Loading