Merge "Revert "Fix race condition when setting default ringtones"" into mnc-dr-dev am: 88d4cc1001 am: 4f22c781b6

am: 44df02fc17

* commit '44df02fc17bb0f3f1c445166c6cbd7f4d92b4eb6':
  Revert "Fix race condition when setting default ringtones"
This commit is contained in:
Ian Pedowitz
2015-11-11 22:04:28 +00:00
committed by android-build-merger

View File

@ -20,7 +20,6 @@ import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler; import org.xml.sax.ContentHandler;
import org.xml.sax.SAXException; import org.xml.sax.SAXException;
import android.content.ContentResolver;
import android.content.ContentUris; import android.content.ContentUris;
import android.content.ContentValues; import android.content.ContentValues;
import android.content.Context; import android.content.Context;
@ -42,7 +41,6 @@ import android.provider.MediaStore.Files.FileColumns;
import android.provider.MediaStore.Images; import android.provider.MediaStore.Images;
import android.provider.MediaStore.Video; import android.provider.MediaStore.Video;
import android.provider.Settings; import android.provider.Settings;
import android.provider.Settings.SettingNotFoundException;
import android.sax.Element; import android.sax.Element;
import android.sax.ElementListener; import android.sax.ElementListener;
import android.sax.RootElement; 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 // used when scanning the image database so we know whether we have to prune
// old thumbnail files // old thumbnail files
private int mOriginalCount; 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. */ /** Whether the scanner has set a default sound for the ringer ringtone. */
private boolean mDefaultRingtoneSet; private boolean mDefaultRingtoneSet;
/** Whether the scanner has set a default sound for the notification ringtone. */ /** Whether the scanner has set a default sound for the notification ringtone. */
@ -535,18 +535,6 @@ public class MediaScanner
if (mMtpObjectHandle != 0) { if (mMtpObjectHandle != 0) {
entry.mRowId = 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 // rescan for metadata if file was modified since last scan
if (entry != null && (entry.mLastModifiedChanged || scanAlways)) { if (entry != null && (entry.mLastModifiedChanged || scanAlways)) {
if (noMedia) { if (noMedia) {
@ -926,26 +914,6 @@ public class MediaScanner
} }
Uri result = null; Uri result = null;
boolean needToSetSettings = false; 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 (rowId == 0) {
if (mMtpObjectHandle != 0) { if (mMtpObjectHandle != 0) {
values.put(MediaStore.MediaColumns.MEDIA_SCANNER_NEW_OBJECT_ID, mMtpObjectHandle); values.put(MediaStore.MediaColumns.MEDIA_SCANNER_NEW_OBJECT_ID, mMtpObjectHandle);
@ -957,6 +925,28 @@ public class MediaScanner
} }
values.put(Files.FileColumns.FORMAT, format); 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. // New file, insert it.
// Directories need to be inserted before the files they contain, so they // Directories need to be inserted before the files they contain, so they
// get priority when bulk inserting. // get priority when bulk inserting.
@ -1026,20 +1016,13 @@ public class MediaScanner
private void setSettingIfNotSet(String settingName, Uri uri, long rowId) { private void setSettingIfNotSet(String settingName, Uri uri, long rowId) {
if(wasSettingAlreadySet(settingName)) {
return;
}
String existingSettingValue = Settings.System.getString(mContext.getContentResolver(), String existingSettingValue = Settings.System.getString(mContext.getContentResolver(),
settingName); settingName);
if (TextUtils.isEmpty(existingSettingValue)) { if (TextUtils.isEmpty(existingSettingValue)) {
// Set the setting to the given URI // Set the setting to the given URI
Settings.System.putString(mContext.getContentResolver(), settingName,
ContentResolver cr = mContext.getContentResolver();
Settings.System.putString(cr, settingName,
ContentUris.withAppendedId(uri, rowId).toString()); ContentUris.withAppendedId(uri, rowId).toString());
Settings.System.putInt(cr, settingSetIndicatorName(settingName), 1);
} }
} }
@ -1067,20 +1050,6 @@ public class MediaScanner
}; // end of anonymous MediaScannerClient instance }; // 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 { private void prescan(String filePath, boolean prescanFiles) throws RemoteException {
Cursor c = null; Cursor c = null;
String where = null; String where = null;
@ -1102,10 +1071,6 @@ public class MediaScanner
selectionArgs = new String[] { "" }; 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. // Tell the provider to not delete the file.
// If the file is truly gone the delete is unnecessary, and we want to avoid // 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 // accidentally deleting files that are really there (this may happen if the
@ -1124,6 +1089,7 @@ public class MediaScanner
// with CursorWindow positioning. // with CursorWindow positioning.
long lastId = Long.MIN_VALUE; long lastId = Long.MIN_VALUE;
Uri limitUri = mFilesUri.buildUpon().appendQueryParameter("limit", "1000").build(); Uri limitUri = mFilesUri.buildUpon().appendQueryParameter("limit", "1000").build();
mWasEmptyPriorToScan = true;
while (true) { while (true) {
selectionArgs[0] = "" + lastId; selectionArgs[0] = "" + lastId;
@ -1142,6 +1108,7 @@ public class MediaScanner
if (num == 0) { if (num == 0) {
break; break;
} }
mWasEmptyPriorToScan = false;
while (c.moveToNext()) { while (c.moveToNext()) {
long rowId = c.getLong(FILES_PRESCAN_ID_COLUMN_INDEX); long rowId = c.getLong(FILES_PRESCAN_ID_COLUMN_INDEX);
String path = c.getString(FILES_PRESCAN_PATH_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. // handle playlists last, after we know what media files are on the storage.
if (mProcessPlaylists) { if (mProcessPlaylists) {