From ed3e90e0c1ff4f2a2b0e893ac354ef92503210f4 Mon Sep 17 00:00:00 2001 From: Jean-Michel Trivi Date: Mon, 24 Jun 2024 17:29:14 -0700 Subject: [PATCH] RingtoneManager: allow video ringtone URI When checking the MIME type for the default ringtone, also allow it to refer to video content. Bug: 205837340 Test: see POC + atest android.media.audio.cts.RingtoneManagerTest (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:a8d2785d69314086dc3b5b2531386fefff079ce7) Merged-In: Iac9f27f14bae29e0fabc31e05da2357f6f4f16c7 Change-Id: Iac9f27f14bae29e0fabc31e05da2357f6f4f16c7 --- media/java/android/media/RingtoneManager.java | 8 ++++++-- .../android/providers/settings/SettingsProvider.java | 11 +++++++---- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/media/java/android/media/RingtoneManager.java b/media/java/android/media/RingtoneManager.java index 0e03bfb2502a4..7a27b03fd731d 100644 --- a/media/java/android/media/RingtoneManager.java +++ b/media/java/android/media/RingtoneManager.java @@ -851,9 +851,13 @@ public static void setActualDefaultRingtoneUri(Context context, int type, Uri ri + " ignored: failure to find mimeType (no access from this context?)"); return; } - if (!(mimeType.startsWith("audio/") || mimeType.equals("application/ogg"))) { + if (!(mimeType.startsWith("audio/") || mimeType.equals("application/ogg") + || mimeType.equals("application/x-flac") + // also check for video ringtones + || mimeType.startsWith("video/") || mimeType.equals("application/mp4"))) { Log.e(TAG, "setActualDefaultRingtoneUri for URI:" + ringtoneUri - + " ignored: associated mimeType:" + mimeType + " is not an audio type"); + + " ignored: associated MIME type:" + mimeType + + " is not a recognized audio or video type"); return; } } diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java index b65b612ecad5c..1cef725241222 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java @@ -1497,7 +1497,7 @@ private boolean mutateSystemSetting(String name, String value, int runAsUserId, cacheName = Settings.System.ALARM_ALERT_CACHE; } if (cacheName != null) { - if (!isValidAudioUri(name, value)) { + if (!isValidMediaUri(name, value)) { return false; } final File cacheFile = new File( @@ -1532,7 +1532,7 @@ owningUserId, name, value, null, false, getCallingPackage(), } } - private boolean isValidAudioUri(String name, String uri) { + private boolean isValidMediaUri(String name, String uri) { if (uri != null) { Uri audioUri = Uri.parse(uri); if (Settings.AUTHORITY.equals( @@ -1550,10 +1550,13 @@ private boolean isValidAudioUri(String name, String uri) { return false; } if (!(mimeType.startsWith("audio/") || mimeType.equals("application/ogg") - || mimeType.equals("application/x-flac"))) { + || mimeType.equals("application/x-flac") + // also check for video ringtones + || mimeType.startsWith("video/") || mimeType.equals("application/mp4"))) { Slog.e(LOG_TAG, "mutateSystemSetting for setting: " + name + " URI: " + audioUri - + " ignored: associated mimeType: " + mimeType + " is not an audio type"); + + " ignored: associated MIME type: " + mimeType + + " is not a recognized audio or video type"); return false; } }