From 9d5b8368d7c9a76d7136f0fb9e3dc93fef5791eb Mon Sep 17 00:00:00 2001 From: Robin Lee Date: Tue, 6 Sep 2016 20:30:48 +0100 Subject: [PATCH] Media: check Settings.AUTHORITY without userId Otherwise we'll miss a trick and not take the settings provider shortcut for playing work ringtones. Bug: 30658854 Change-Id: I378cabe0ba426a2c91919b3df33a525d41fe3d0d --- media/java/android/media/MediaPlayer.java | 6 +++++- media/java/android/media/RingtoneManager.java | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/media/java/android/media/MediaPlayer.java b/media/java/android/media/MediaPlayer.java index dd2679953dabc..165887d593f41 100644 --- a/media/java/android/media/MediaPlayer.java +++ b/media/java/android/media/MediaPlayer.java @@ -20,6 +20,7 @@ import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.ActivityThread; +import android.content.ContentProvider; import android.content.ContentResolver; import android.content.Context; import android.content.res.AssetFileDescriptor; @@ -982,13 +983,16 @@ public class MediaPlayer extends PlayerBase public void setDataSource(@NonNull Context context, @NonNull Uri uri, @Nullable Map headers) throws IOException, IllegalArgumentException, SecurityException, IllegalStateException { + // The context and URI usually belong to the calling user. Get a resolver for that user + // and strip out the userId from the URI if present. final ContentResolver resolver = context.getContentResolver(); final String scheme = uri.getScheme(); + final String authority = ContentProvider.getAuthorityWithoutUserId(uri.getAuthority()); if (ContentResolver.SCHEME_FILE.equals(scheme)) { setDataSource(uri.getPath()); return; } else if (ContentResolver.SCHEME_CONTENT.equals(scheme) - && Settings.AUTHORITY.equals(uri.getAuthority())) { + && Settings.AUTHORITY.equals(authority)) { // Try cached ringtone first since the actual provider may not be // encryption aware, or it may be stored on CE media storage final int type = RingtoneManager.getDefaultType(uri); diff --git a/media/java/android/media/RingtoneManager.java b/media/java/android/media/RingtoneManager.java index 664765a89a3a9..af1410bf7965f 100644 --- a/media/java/android/media/RingtoneManager.java +++ b/media/java/android/media/RingtoneManager.java @@ -816,6 +816,7 @@ public class RingtoneManager { * @return The type of the defaultRingtoneUri, or -1. */ public static int getDefaultType(Uri defaultRingtoneUri) { + defaultRingtoneUri = ContentProvider.getUriWithoutUserId(defaultRingtoneUri); if (defaultRingtoneUri == null) { return -1; } else if (defaultRingtoneUri.equals(Settings.System.DEFAULT_RINGTONE_URI)) {