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

Commit f805afc4 authored by Yao Chen's avatar Yao Chen Committed by Android (Google) Code Review
Browse files

Merge "various fixes in MediaBrowserItem and MediaBrowserService" into lmp-dev

parents 80bc75a7 7e21fe8b
Loading
Loading
Loading
Loading
+8 −6
Original line number Diff line number Diff line
@@ -16202,7 +16202,7 @@ package android.media.browse {
    method public int describeContents();
    method public android.os.Bundle getExtras();
    method public int getFlags();
    method public int getIconResId();
    method public int getIconResourceId();
    method public android.net.Uri getIconUri();
    method public java.lang.CharSequence getSummary();
    method public java.lang.CharSequence getTitle();
@@ -16219,7 +16219,7 @@ package android.media.browse {
    ctor public MediaBrowserItem.Builder(android.net.Uri, int, java.lang.CharSequence);
    method public android.media.browse.MediaBrowserItem build();
    method public android.media.browse.MediaBrowserItem.Builder setExtras(android.os.Bundle);
    method public android.media.browse.MediaBrowserItem.Builder setIconResId(int);
    method public android.media.browse.MediaBrowserItem.Builder setIconResourceId(int);
    method public android.media.browse.MediaBrowserItem.Builder setIconUri(android.net.Uri);
    method public android.media.browse.MediaBrowserItem.Builder setSummary(java.lang.CharSequence);
  }
@@ -16230,15 +16230,17 @@ package android.media.browse {
    method public android.media.session.MediaSession.Token getSessionToken();
    method public void notifyChildrenChanged(android.net.Uri);
    method public android.os.IBinder onBind(android.content.Intent);
    method protected abstract android.media.browse.MediaBrowserService.BrowserRoot onGetRoot(java.lang.String, int, android.os.Bundle);
    method protected abstract android.graphics.Bitmap onGetThumbnail(android.net.Uri, int, int);
    method protected abstract java.util.List<android.media.browse.MediaBrowserItem> onLoadChildren(android.net.Uri);
    method public abstract android.media.browse.MediaBrowserService.BrowserRoot onGetRoot(java.lang.String, int, android.os.Bundle);
    method public abstract android.graphics.Bitmap onGetThumbnail(android.net.Uri, int, int);
    method public abstract java.util.List<android.media.browse.MediaBrowserItem> onLoadChildren(android.net.Uri);
    method public void setSessionToken(android.media.session.MediaSession.Token);
    field public static final java.lang.String SERVICE_ACTION = "android.media.browse.MediaBrowserService";
  }
  public static class MediaBrowserService.BrowserRoot {
  public static final class MediaBrowserService.BrowserRoot {
    ctor public MediaBrowserService.BrowserRoot(android.net.Uri, android.os.Bundle);
    method public android.os.Bundle getExtras();
    method public android.net.Uri getRootUri();
  }
}
+67 −53
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package android.media.browse;

import android.annotation.DrawableRes;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
@@ -32,11 +33,11 @@ import java.lang.annotation.RetentionPolicy;
 */
public final class MediaBrowserItem implements Parcelable {
    private final Uri mUri;
    private final Uri mIconUri;
    private final int mIconResId;
    private final int mFlags;
    private final CharSequence mTitle;
    private final CharSequence mSummary;
    private final Uri mIconUri;
    private final int mIconResourceId;
    private final Bundle mExtras;

    /** @hide */
@@ -61,8 +62,8 @@ public final class MediaBrowserItem implements Parcelable {
    /**
     * Initialize a MediaBrowserItem object.
     */
    private MediaBrowserItem(@NonNull Uri uri, @Nullable Uri iconUri, int iconResId, int flags,
            @NonNull CharSequence title, CharSequence summary, Bundle extras) {
    private MediaBrowserItem(@NonNull Uri uri, int flags, @NonNull CharSequence title,
            CharSequence summary, @Nullable Uri iconUri, int iconResourceId, Bundle extras) {
        if (uri == null) {
            throw new IllegalArgumentException("uri can not be null");
        }
@@ -70,11 +71,11 @@ public final class MediaBrowserItem implements Parcelable {
            throw new IllegalArgumentException("title can not be null");
        }
        mUri = uri;
        mIconUri = iconUri;
        mIconResId = iconResId;
        mFlags = flags;
        mTitle = title;
        mSummary = summary;
        mIconUri = iconUri;
        mIconResourceId = iconResourceId;
        mExtras = extras;
    }

@@ -83,8 +84,6 @@ public final class MediaBrowserItem implements Parcelable {
     */
    private MediaBrowserItem(Parcel in) {
        mUri = Uri.CREATOR.createFromParcel(in);
        mIconUri = Uri.CREATOR.createFromParcel(in);
        mIconResId = in.readInt();
        mFlags = in.readInt();
        mTitle = in.readCharSequence();
        if (in.readInt() != 0) {
@@ -92,6 +91,12 @@ public final class MediaBrowserItem implements Parcelable {
        } else {
            mSummary = null;
        }
        if (in.readInt() != 0) {
            mIconUri = Uri.CREATOR.createFromParcel(in);
        } else {
            mIconUri = null;
        }
        mIconResourceId = in.readInt();
        if (in.readInt() != 0) {
            mExtras = Bundle.CREATOR.createFromParcel(in);
        } else {
@@ -107,8 +112,6 @@ public final class MediaBrowserItem implements Parcelable {
    @Override
    public void writeToParcel(Parcel out, int flags) {
        mUri.writeToParcel(out, flags);
        mIconUri.writeToParcel(out, flags);
        out.writeInt(mIconResId);
        out.writeInt(mFlags);
        out.writeCharSequence(mTitle);
        if (mSummary != null) {
@@ -117,6 +120,13 @@ public final class MediaBrowserItem implements Parcelable {
        } else {
            out.writeInt(0);
        }
        if (mIconUri != null) {
            out.writeInt(1);
            mIconUri.writeToParcel(out, flags);
        } else {
            out.writeInt(0);
        }
        out.writeInt(mIconResourceId);
        if (mExtras != null) {
            out.writeInt(1);
            mExtras.writeToParcel(out, flags);
@@ -145,20 +155,6 @@ public final class MediaBrowserItem implements Parcelable {
        return mUri;
    }

    /**
     * Gets the Uri of the icon.
     */
    public @Nullable Uri getIconUri() {
        return mIconUri;
    }

    /**
     * Gets the resource id of the icon.
     */
    public int getIconResId() {
        return mIconResId;
    }

    /**
     * Gets the flags of the item.
     */
@@ -202,6 +198,20 @@ public final class MediaBrowserItem implements Parcelable {
        return mSummary;
    }

    /**
     * Gets the Uri of the icon.
     */
    public @Nullable Uri getIconUri() {
        return mIconUri;
    }

    /**
     * Gets the resource id of the icon.
     */
    public @DrawableRes int getIconResourceId() {
        return mIconResourceId;
    }

    /**
     * Gets additional service-specified extras about the
     * item or its content, or null if none.
@@ -217,9 +227,9 @@ public final class MediaBrowserItem implements Parcelable {
        private final Uri mUri;
        private final int mFlags;
        private final CharSequence mTitle;
        private Uri mIconUri;
        private int mIconResId;
        private CharSequence mSummary;
        private Uri mIconUri;
        private int mIconResourceId;
        private Bundle mExtras;

        /**
@@ -237,11 +247,19 @@ public final class MediaBrowserItem implements Parcelable {
            mTitle = title;
        }

        /**
         * Sets summary of the item, or null if none.
         */
        public @NonNull Builder setSummary(@Nullable CharSequence summary) {
            mSummary = summary;
            return this;
        }

        /**
         * Sets the uri of the icon.
         * <p>
         * If both {@link #setIconUri(Uri)} and {@link #setIconResId(int)} are called,
         * the resource id will be used to load the icon.
         * Either {@link #setIconUri(Uri)} or {@link #setIconResourceId(int)} should be called.
         * If both are specified, the resource id will be used to load the icon.
         * </p>
         */
        public @NonNull Builder setIconUri(@Nullable Uri iconUri) {
@@ -251,23 +269,19 @@ public final class MediaBrowserItem implements Parcelable {

        /**
         * Sets the resource id of the icon.
         * <p>
         * Either {@link #setIconUri(Uri)} or {@link #setIconResourceId(int)} should be specified.
         * If both are specified, the resource id will be used to load the icon.
         * </p>
         */
        public @NonNull Builder setIconResId(int resId) {
            mIconResId = resId;
            return this;
        }

        /**
         * Sets summary of the item, or null if none.
         */
        public @NonNull Builder setSummary(@Nullable CharSequence summary) {
            mSummary = summary;
        public @NonNull Builder setIconResourceId(@DrawableRes int ResourceId) {
            mIconResourceId = ResourceId;
            return this;
        }

        /**
         * Sets additional service-specified extras about the
        * item or its content, or null if none.
         * item or its content.
         */
        public @NonNull Builder setExtras(@Nullable Bundle extras) {
            mExtras = extras;
@@ -278,8 +292,8 @@ public final class MediaBrowserItem implements Parcelable {
         * Builds the item.
         */
        public @NonNull MediaBrowserItem build() {
            return new MediaBrowserItem(mUri, mIconUri, mIconResId,
                    mFlags, mTitle, mSummary, mExtras);
            return new MediaBrowserItem(mUri, mFlags, mTitle, mSummary, mIconUri,
                    mIconResourceId, mExtras);
        }
    }
}
+32 −15
Original line number Diff line number Diff line
@@ -256,7 +256,7 @@ public abstract class MediaBrowserService extends Service {
     * for browsing, or null if none.  The contents of this bundle may affect
     * the information returned when browsing.
     */
    protected abstract @Nullable BrowserRoot onGetRoot(@NonNull String clientPackageName,
    public abstract @Nullable BrowserRoot onGetRoot(@NonNull String clientPackageName,
            int clientUid, @Nullable Bundle rootHints);

    /**
@@ -266,7 +266,7 @@ public abstract class MediaBrowserService extends Service {
     * children are to be queried.
     * @return The list of children, or null if the uri is invalid.
     */
    protected abstract @Nullable List<MediaBrowserItem> onLoadChildren(@NonNull Uri parentUri);
    public abstract @Nullable List<MediaBrowserItem> onLoadChildren(@NonNull Uri parentUri);

    /**
     * Called to get the thumbnail of a particular media item.
@@ -278,7 +278,7 @@ public abstract class MediaBrowserService extends Service {
     * @return The file descriptor of the thumbnail, which may then be loaded
     *          using a bitmap factory, or null if the item does not have a thumbnail.
     */
    protected abstract @Nullable Bitmap onGetThumbnail(@NonNull Uri uri, int width, int height);
    public abstract @Nullable Bitmap onGetThumbnail(@NonNull Uri uri, int width, int height);

    /**
     * Call to set the media session.
@@ -311,20 +311,21 @@ public abstract class MediaBrowserService extends Service {
     * @param parentUri The uri of the parent media item whose
     * children changed.
     */
    public void notifyChildrenChanged(@NonNull Uri parentUri) {
    public void notifyChildrenChanged(@NonNull final Uri parentUri) {
        if (parentUri == null) {
            throw new IllegalArgumentException("parentUri cannot be null in notifyChildrenChanged");
        }
        mHandler.post(new Runnable() {
            @Override
            public void run() {
                for (IBinder binder : mConnections.keySet()) {
                    ConnectionRecord connection = mConnections.get(binder);
            Set<Uri> uris = connection.subscriptions;
            for (Uri uri : uris) {
                if (uri.equals(parentUri)) {
                    performLoadChildren(uri, connection);
                    break;
                    if (connection.subscriptions.contains(parentUri)) {
                        performLoadChildren(parentUri, connection);
                    }
                }
            }
        });
    }

    /**
@@ -380,9 +381,19 @@ public abstract class MediaBrowserService extends Service {
        }
    }

    public static class BrowserRoot {
    /**
     * Contains information that the browser service needs to send to the client
     * when first connected.
     */
    public static final class BrowserRoot {
        final private Uri mUri;
        final private Bundle mExtras;

        /**
         * Constructs a browser root.
         * @param uri The root Uri for browsing.
         * @param extras Any extras about the browser service.
         */
        public BrowserRoot(@NonNull Uri uri, @Nullable Bundle extras) {
            if (uri == null) {
                throw new IllegalArgumentException("The root uri in BrowserRoot cannot be null. " +
@@ -392,11 +403,17 @@ public abstract class MediaBrowserService extends Service {
            mExtras = extras;
        }

        Uri getRootUri() {
        /**
         * Gets the root uri for browsing.
         */
        public Uri getRootUri() {
            return mUri;
        }

        Bundle getExtras() {
        /**
         * Gets any extras about the brwoser service.
         */
        public Bundle getExtras() {
            return mExtras;
        }
    }