From 465d20a7bbd72a5d5899cda01fe7030120e01f8e Mon Sep 17 00:00:00 2001 From: Jeff Sharkey Date: Sun, 17 Mar 2019 12:24:14 -0600 Subject: [PATCH] Fix synthetic RingtoneManager column. It was querying a column that didn't exist internally; instead it needs to fake that value for its clients. Bug: 128349496 Test: atest android.media.cts.RingtoneTest Change-Id: I7c3738cdb21ac5c92df55a8622b24f5c6a118154 --- .../media/ExternalRingtonesCursorWrapper.java | 14 +++++----- media/java/android/media/RingtoneManager.java | 27 +++++++++++-------- 2 files changed, 22 insertions(+), 19 deletions(-) diff --git a/media/java/android/media/ExternalRingtonesCursorWrapper.java b/media/java/android/media/ExternalRingtonesCursorWrapper.java index dd4c77a045778..ea63a3aa55bdd 100644 --- a/media/java/android/media/ExternalRingtonesCursorWrapper.java +++ b/media/java/android/media/ExternalRingtonesCursorWrapper.java @@ -16,7 +16,6 @@ package android.media; -import android.content.ContentProvider; import android.database.Cursor; import android.database.CursorWrapper; import android.net.Uri; @@ -28,19 +27,18 @@ import android.net.Uri; * @hide */ public class ExternalRingtonesCursorWrapper extends CursorWrapper { + private Uri mUri; - private int mUserId; - - public ExternalRingtonesCursorWrapper(Cursor cursor, int userId) { + public ExternalRingtonesCursorWrapper(Cursor cursor, Uri uri) { super(cursor); - mUserId = userId; + mUri = uri; } public String getString(int index) { - String result = super.getString(index); if (index == RingtoneManager.URI_COLUMN_INDEX) { - result = ContentProvider.maybeAddUserId(Uri.parse(result), mUserId).toString(); + return mUri.toString(); + } else { + return super.getString(index); } - return result; } } diff --git a/media/java/android/media/RingtoneManager.java b/media/java/android/media/RingtoneManager.java index 0679e8e90e85e..9a609236aa309 100644 --- a/media/java/android/media/RingtoneManager.java +++ b/media/java/android/media/RingtoneManager.java @@ -215,17 +215,19 @@ public class RingtoneManager { // Make sure the column ordering and then ..._COLUMN_INDEX are in sync private static final String[] INTERNAL_COLUMNS = new String[] { - MediaStore.Audio.Media._ID, MediaStore.Audio.Media.TITLE, - "\"" + MediaStore.Audio.Media.INTERNAL_CONTENT_URI + "\"", - MediaStore.Audio.Media.TITLE_KEY + MediaStore.Audio.Media._ID, + MediaStore.Audio.Media.TITLE, + MediaStore.Audio.Media.TITLE, + MediaStore.Audio.Media.TITLE_KEY, }; private static final String[] MEDIA_COLUMNS = new String[] { - MediaStore.Audio.Media._ID, MediaStore.Audio.Media.TITLE, - "\"" + MediaStore.Audio.Media.EXTERNAL_CONTENT_URI + "\"", - MediaStore.Audio.Media.TITLE_KEY + MediaStore.Audio.Media._ID, + MediaStore.Audio.Media.TITLE, + MediaStore.Audio.Media.TITLE, + MediaStore.Audio.Media.TITLE_KEY, }; - + /** * The column index (in the cursor returned by {@link #getCursor()} for the * row ID. @@ -459,8 +461,9 @@ public class RingtoneManager { // We don't need to re-add the internal ringtones for the work profile since // they are the same as the personal profile. We just need the external // ringtones. - return new ExternalRingtonesCursorWrapper(getMediaRingtones(parentContext), - parentInfo.id); + final Cursor res = getMediaRingtones(parentContext); + return new ExternalRingtonesCursorWrapper(res, ContentProvider.maybeAddUserId( + MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, parentInfo.id)); } } return null; @@ -580,14 +583,16 @@ public class RingtoneManager { @UnsupportedAppUsage private Cursor getInternalRingtones() { - return query( + final Cursor res = query( MediaStore.Audio.Media.INTERNAL_CONTENT_URI, INTERNAL_COLUMNS, constructBooleanTrueWhereClause(mFilterColumns), null, MediaStore.Audio.Media.DEFAULT_SORT_ORDER); + return new ExternalRingtonesCursorWrapper(res, MediaStore.Audio.Media.INTERNAL_CONTENT_URI); } private Cursor getMediaRingtones() { - return getMediaRingtones(mContext); + final Cursor res = getMediaRingtones(mContext); + return new ExternalRingtonesCursorWrapper(res, MediaStore.Audio.Media.EXTERNAL_CONTENT_URI); } @UnsupportedAppUsage