From 4d70bd7a928903b35c92619437c70bc382587b71 Mon Sep 17 00:00:00 2001 From: Ian Pedowitz Date: Wed, 11 Nov 2015 21:38:04 +0000 Subject: Revert "Fix race condition when setting default ringtones" This reverts commit f2cb9341ff864e6d9cc6797857665b2281643a74. Change-Id: I151972052aea47bf8c6823eb8bbf8161c5a7a4f0 --- media/java/android/media/MediaScanner.java | 89 ++++++++++-------------------- 1 file changed, 28 insertions(+), 61 deletions(-) (limited to 'media') diff --git a/media/java/android/media/MediaScanner.java b/media/java/android/media/MediaScanner.java index f36d640..9ea6722 100644 --- a/media/java/android/media/MediaScanner.java +++ b/media/java/android/media/MediaScanner.java @@ -20,7 +20,6 @@ import org.xml.sax.Attributes; import org.xml.sax.ContentHandler; import org.xml.sax.SAXException; -import android.content.ContentResolver; import android.content.ContentUris; import android.content.ContentValues; import android.content.Context; @@ -42,7 +41,6 @@ import android.provider.MediaStore.Files.FileColumns; import android.provider.MediaStore.Images; import android.provider.MediaStore.Video; import android.provider.Settings; -import android.provider.Settings.SettingNotFoundException; import android.sax.Element; import android.sax.ElementListener; import android.sax.RootElement; @@ -326,6 +324,8 @@ public class MediaScanner // used when scanning the image database so we know whether we have to prune // old thumbnail files private int mOriginalCount; + /** Whether the database had any entries in it before the scan started */ + private boolean mWasEmptyPriorToScan = false; /** Whether the scanner has set a default sound for the ringer ringtone. */ private boolean mDefaultRingtoneSet; /** Whether the scanner has set a default sound for the notification ringtone. */ @@ -535,18 +535,6 @@ public class MediaScanner if (mMtpObjectHandle != 0) { entry.mRowId = 0; } - - 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; - } - // rescan for metadata if file was modified since last scan if (entry != null && (entry.mLastModifiedChanged || scanAlways)) { if (noMedia) { @@ -926,26 +914,6 @@ public class MediaScanner } Uri result = null; boolean needToSetSettings = false; - // Setting a flag in order not to use bulk insert for the file related with - // notifications, ringtones, and alarms, because the rowId of the inserted file is - // needed. - if (notifications && !mDefaultNotificationSet) { - if (TextUtils.isEmpty(mDefaultNotificationFilename) || - doesPathHaveFilename(entry.mPath, mDefaultNotificationFilename)) { - needToSetSettings = true; - } - } else if (ringtones && !mDefaultRingtoneSet) { - if (TextUtils.isEmpty(mDefaultRingtoneFilename) || - doesPathHaveFilename(entry.mPath, mDefaultRingtoneFilename)) { - needToSetSettings = true; - } - } else if (alarms && !mDefaultAlarmSet) { - if (TextUtils.isEmpty(mDefaultAlarmAlertFilename) || - doesPathHaveFilename(entry.mPath, mDefaultAlarmAlertFilename)) { - needToSetSettings = true; - } - } - if (rowId == 0) { if (mMtpObjectHandle != 0) { values.put(MediaStore.MediaColumns.MEDIA_SCANNER_NEW_OBJECT_ID, mMtpObjectHandle); @@ -957,6 +925,28 @@ public class MediaScanner } values.put(Files.FileColumns.FORMAT, format); } + // Setting a flag in order not to use bulk insert for the file related with + // notifications, ringtones, and alarms, because the rowId of the inserted file is + // needed. + if (mWasEmptyPriorToScan) { + if (notifications && !mDefaultNotificationSet) { + if (TextUtils.isEmpty(mDefaultNotificationFilename) || + doesPathHaveFilename(entry.mPath, mDefaultNotificationFilename)) { + needToSetSettings = true; + } + } else if (ringtones && !mDefaultRingtoneSet) { + if (TextUtils.isEmpty(mDefaultRingtoneFilename) || + doesPathHaveFilename(entry.mPath, mDefaultRingtoneFilename)) { + needToSetSettings = true; + } + } else if (alarms && !mDefaultAlarmSet) { + if (TextUtils.isEmpty(mDefaultAlarmAlertFilename) || + doesPathHaveFilename(entry.mPath, mDefaultAlarmAlertFilename)) { + needToSetSettings = true; + } + } + } + // New file, insert it. // Directories need to be inserted before the files they contain, so they // get priority when bulk inserting. @@ -1026,20 +1016,13 @@ public class MediaScanner private void setSettingIfNotSet(String settingName, Uri uri, long rowId) { - if(wasSettingAlreadySet(settingName)) { - return; - } - String existingSettingValue = Settings.System.getString(mContext.getContentResolver(), settingName); if (TextUtils.isEmpty(existingSettingValue)) { // Set the setting to the given URI - - ContentResolver cr = mContext.getContentResolver(); - Settings.System.putString(cr, settingName, + Settings.System.putString(mContext.getContentResolver(), settingName, ContentUris.withAppendedId(uri, rowId).toString()); - Settings.System.putInt(cr, settingSetIndicatorName(settingName), 1); } } @@ -1067,20 +1050,6 @@ public class MediaScanner }; // end of anonymous MediaScannerClient instance - private String settingSetIndicatorName(String base) { - return base + "_set"; - } - - private boolean wasSettingAlreadySet(String name) { - ContentResolver cr = mContext.getContentResolver(); - String indicatorName = settingSetIndicatorName(name); - try { - return Settings.System.getInt(cr, indicatorName) != 0; - } catch (SettingNotFoundException e) { - return false; - } - } - private void prescan(String filePath, boolean prescanFiles) throws RemoteException { Cursor c = null; String where = null; @@ -1102,10 +1071,6 @@ public class MediaScanner selectionArgs = new String[] { "" }; } - mDefaultRingtoneSet = wasSettingAlreadySet(Settings.System.RINGTONE); - mDefaultNotificationSet = wasSettingAlreadySet(Settings.System.NOTIFICATION_SOUND); - mDefaultAlarmSet = wasSettingAlreadySet(Settings.System.ALARM_ALERT); - // Tell the provider to not delete the file. // If the file is truly gone the delete is unnecessary, and we want to avoid // accidentally deleting files that are really there (this may happen if the @@ -1124,6 +1089,7 @@ public class MediaScanner // with CursorWindow positioning. long lastId = Long.MIN_VALUE; Uri limitUri = mFilesUri.buildUpon().appendQueryParameter("limit", "1000").build(); + mWasEmptyPriorToScan = true; while (true) { selectionArgs[0] = "" + lastId; @@ -1142,6 +1108,7 @@ public class MediaScanner if (num == 0) { break; } + mWasEmptyPriorToScan = false; while (c.moveToNext()) { long rowId = c.getLong(FILES_PRESCAN_ID_COLUMN_INDEX); String path = c.getString(FILES_PRESCAN_PATH_COLUMN_INDEX); @@ -1293,7 +1260,7 @@ public class MediaScanner } } - private void postscan(final String[] directories) throws RemoteException { + private void postscan(String[] directories) throws RemoteException { // handle playlists last, after we know what media files are on the storage. if (mProcessPlaylists) { -- cgit v1.1