RingtoneManager: verify default ringtone is audio
When a ringtone picker tries to set a ringtone through RingtoneManager.setActualDefaultRingtoneUri (also called by com.android.settings.DefaultRingtonePreference), verify the mimeType can be obtained (not found when caller doesn't have access to it) and it is an audio resource. Bug: 205837340 Test: atest android.media.audio.cts.RingtoneManagerTest Change-Id: I3f2c487ded405c0c1a83ef0a2fe99cff7cc9328e
This commit is contained in:
@@ -826,6 +826,19 @@ public class RingtoneManager {
|
||||
if(!isInternalRingtoneUri(ringtoneUri)) {
|
||||
ringtoneUri = ContentProvider.maybeAddUserId(ringtoneUri, context.getUserId());
|
||||
}
|
||||
|
||||
final String mimeType = resolver.getType(ringtoneUri);
|
||||
if (mimeType == null) {
|
||||
Log.e(TAG, "setActualDefaultRingtoneUri for URI:" + ringtoneUri
|
||||
+ " ignored: failure to find mimeType (no access from this context?)");
|
||||
return;
|
||||
}
|
||||
if (!(mimeType.startsWith("audio/") || mimeType.equals("application/ogg"))) {
|
||||
Log.e(TAG, "setActualDefaultRingtoneUri for URI:" + ringtoneUri
|
||||
+ " ignored: associated mimeType:" + mimeType + " is not an audio type");
|
||||
return;
|
||||
}
|
||||
|
||||
Settings.System.putStringForUser(resolver, setting,
|
||||
ringtoneUri != null ? ringtoneUri.toString() : null, context.getUserId());
|
||||
|
||||
|
||||
Reference in New Issue
Block a user