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

Commit 7e21fe8b authored by Yao Chen's avatar Yao Chen
Browse files

various fixes in MediaBrowserItem and MediaBrowserService

Change-Id: I57f2a6728eea14ff6243fd68d21886599a5a12f4
parent b8cb6518
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;
        }
    }