Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit daf5e2a5 authored by wan.li's avatar wan.li Committed by bing.liang
Browse files

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.

Test: manual set all types of default ringtones to use the audio
with the same DisplayName as the preset value. See if all types
of ringtones are selected in RingtonePickerActivity.

Bug: 168431815

Change-Id: Iec46c80b1da929cacc0e04fd9641955ce6e8cfcf
parent fc6fbde5
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
@@ -1130,11 +1130,13 @@ public class RingtoneManager {

            // Try finding the scanned ringtone
            final String filename = getDefaultRingtoneFilename(type);
            final String whichAudio = getQueryStringForType(type);
            final String where = MediaColumns.DISPLAY_NAME + "=? AND " + 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();
        }
    }
}