Ringtone uri should add type query
When only DisplayName is used to query the default ringtone, the query may be incorrect, because other types of ringtones may contain resources with the same name. It should not happen that other types of ringtone uri are set as the default ringtone of the current type by mistake. Bug: 168431815 Change-Id: Ic37f879a658379179dc53715fa016631bb7309d9
This commit is contained in:
@@ -1129,12 +1129,14 @@ public class RingtoneManager {
|
||||
}
|
||||
|
||||
// Try finding the scanned ringtone
|
||||
final String whichAudio = getQueryStringForType(type);
|
||||
final String filename = getDefaultRingtoneFilename(type);
|
||||
final String where = MediaColumns.DISPLAY_NAME + "=?," + whichAudio + "=?";
|
||||
final Uri baseUri = MediaStore.Audio.Media.INTERNAL_CONTENT_URI;
|
||||
try (Cursor cursor = context.getContentResolver().query(baseUri,
|
||||
new String[] { MediaColumns._ID },
|
||||
MediaColumns.DISPLAY_NAME + "=?",
|
||||
new String[] { filename }, null)) {
|
||||
where,
|
||||
new String[] { filename , "1"}, null)) {
|
||||
if (cursor.moveToFirst()) {
|
||||
final Uri ringtoneUri = context.getContentResolver().canonicalizeOrElse(
|
||||
ContentUris.withAppendedId(baseUri, cursor.getLong(0)));
|
||||
@@ -1162,4 +1164,13 @@ public class RingtoneManager {
|
||||
default: throw new IllegalArgumentException();
|
||||
}
|
||||
}
|
||||
|
||||
private static String getQueryStringForType(int type) {
|
||||
switch (type) {
|
||||
case TYPE_RINGTONE: return MediaStore.Audio.AudioColumns.IS_RINGTONE;
|
||||
case TYPE_NOTIFICATION: return MediaStore.Audio.AudioColumns.IS_NOTIFICATION;
|
||||
case TYPE_ALARM: return MediaStore.Audio.AudioColumns.IS_ALARM;
|
||||
default: throw new IllegalArgumentException();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user