Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 465d20a7 authored by Jeff Sharkey's avatar Jeff Sharkey
Browse files

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
parent cdc1dfd1
Loading
Loading
Loading
Loading
+6 −8
Original line number Diff line number Diff line
@@ -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;
    }
}
+16 −11
Original line number Diff line number Diff line
@@ -215,15 +215,17 @@ 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,
    };

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