From a8a656b0c595fa876a387a91f8813f88a2d3abe7 Mon Sep 17 00:00:00 2001 From: Marco Nelissen Date: Wed, 12 Jan 2011 14:30:30 -0800 Subject: [PATCH] Fix scanning of modified files. When a media file, particularly a music file, is updated, the media scanner should use the correct Uri to update it, and not the generic files Uri. Otherwise, things like artist and album name will not be properly updated. Change-Id: I576629c51282bfbeb61c23f1e43b072700084a6c --- media/java/android/media/MediaScanner.java | 24 ++++++++++++---------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/media/java/android/media/MediaScanner.java b/media/java/android/media/MediaScanner.java index 37086236290b8..6b438bf3041f6 100644 --- a/media/java/android/media/MediaScanner.java +++ b/media/java/android/media/MediaScanner.java @@ -462,7 +462,10 @@ public class MediaScanner key = path.toLowerCase(); } FileCacheEntry entry = mFileCache.get(key); - if (entry == null) { + // add some slack to avoid a rounding error + long delta = (entry != null) ? (lastModified - entry.mLastModified) : 0; + boolean wasModified = delta > 1 || delta < -1; + if (entry == null || wasModified) { Uri tableUri; if (isDirectory) { tableUri = mFilesUri; @@ -475,18 +478,17 @@ public class MediaScanner } else { tableUri = mFilesUri; } - entry = new FileCacheEntry(tableUri, 0, path, 0, - (isDirectory ? MtpConstants.FORMAT_ASSOCIATION : 0)); - mFileCache.put(key, entry); - } - entry.mSeenInFileSystem = true; - - // add some slack to avoid a rounding error - long delta = lastModified - entry.mLastModified; - if (delta > 1 || delta < -1) { - entry.mLastModified = lastModified; + if (wasModified) { + entry.mLastModified = lastModified; + entry.mTableUri = tableUri; + } else { + entry = new FileCacheEntry(tableUri, 0, path, lastModified, + (isDirectory ? MtpConstants.FORMAT_ASSOCIATION : 0)); + mFileCache.put(key, entry); + } entry.mLastModifiedChanged = true; } + entry.mSeenInFileSystem = true; if (mProcessPlaylists && MediaFile.isPlayListFileType(mFileType)) { mPlayLists.add(entry);