summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jean-Michel Trivi <jmtrivi@google.com> 2016-09-14 22:23:24 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2016-09-14 22:23:26 +0000
commit3fb30a2a43ab3e29c035ebeda0a316350c88bc3b (patch)
tree8a0aa0eec39cabffc8aac71b563e02da307ca13b
parent1b75cd38589d1c873003b90b95494f669c83e71f (diff)
parent17d24400906235a172fc760e98656589692f798a (diff)
Merge "MediaScanner: check build fingerprint for system sound scan" into nyc-mr1-dev
-rw-r--r--media/java/android/media/MediaScanner.java51
1 files changed, 36 insertions, 15 deletions
diff --git a/media/java/android/media/MediaScanner.java b/media/java/android/media/MediaScanner.java
index c8ab5f9bc429..0fafe4b19a42 100644
--- a/media/java/android/media/MediaScanner.java
+++ b/media/java/android/media/MediaScanner.java
@@ -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;
@@ -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",
@@ -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);
@@ -585,16 +599,24 @@ 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))
|| (!mDefaultAlarmSet &&
doesPathHaveFilename(entry.mPath, mDefaultAlarmAlertFilename)))) {
- Log.w(TAG, "forcing rescan of " + entry.mPath +
- "since ringtone setting didn't finish");
- scanAlways = true;
+ 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
@@ -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";
}
@@ -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";