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:
@ -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) {
|
||||||
|
Reference in New Issue
Block a user