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:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user