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
This commit is contained in:
Jeff Sharkey
2019-03-17 12:24:14 -06:00
parent cdc1dfd1bd
commit 465d20a7bb
2 changed files with 22 additions and 19 deletions

View File

@@ -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;
}
}

View File

@@ -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