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

Commit 350be2e1 authored by RoboErik's avatar RoboErik Committed by Android (Google) Code Review
Browse files

Merge "Update to MediaBrowser APIs per council feedback" into lmp-dev

parents 2f2ea058 3625bf72
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -325,8 +325,6 @@ LOCAL_SRC_FILES += \
	media/java/android/media/IRemoteVolumeObserver.aidl \
	media/java/android/media/IRingtonePlayer.aidl \
	media/java/android/media/IVolumeController.aidl \
	media/java/android/media/browse/IMediaBrowserService.aidl \
	media/java/android/media/browse/IMediaBrowserServiceCallbacks.aidl \
	media/java/android/media/projection/IMediaProjection.aidl \
	media/java/android/media/projection/IMediaProjectionCallback.aidl \
	media/java/android/media/projection/IMediaProjectionManager.aidl \
@@ -346,6 +344,8 @@ LOCAL_SRC_FILES += \
	media/java/android/media/tv/ITvInputServiceCallback.aidl \
	media/java/android/media/tv/ITvInputSession.aidl \
	media/java/android/media/tv/ITvInputSessionCallback.aidl \
	media/java/android/service/media/IMediaBrowserService.aidl \
	media/java/android/service/media/IMediaBrowserServiceCallbacks.aidl \
	telecomm/java/com/android/internal/telecomm/IVideoCallback.aidl \
	telecomm/java/com/android/internal/telecomm/IVideoProvider.aidl \
	telecomm/java/com/android/internal/telecomm/IConnectionService.aidl \
+78 −81
Original line number Diff line number Diff line
@@ -14919,6 +14919,31 @@ package android.media {
    ctor public MediaCryptoException(java.lang.String);
  }
  public class MediaDescription implements android.os.Parcelable {
    method public int describeContents();
    method public java.lang.CharSequence getDescription();
    method public android.os.Bundle getExtras();
    method public android.graphics.Bitmap getIconBitmap();
    method public android.net.Uri getIconUri();
    method public java.lang.String getMediaId();
    method public java.lang.CharSequence getSubtitle();
    method public java.lang.CharSequence getTitle();
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator CREATOR;
  }
  public static class MediaDescription.Builder {
    ctor public MediaDescription.Builder();
    method public android.media.MediaDescription build();
    method public android.media.MediaDescription.Builder setDescription(java.lang.CharSequence);
    method public android.media.MediaDescription.Builder setExtras(android.os.Bundle);
    method public android.media.MediaDescription.Builder setIconBitmap(android.graphics.Bitmap);
    method public android.media.MediaDescription.Builder setIconUri(android.net.Uri);
    method public android.media.MediaDescription.Builder setMediaId(java.lang.String);
    method public android.media.MediaDescription.Builder setSubtitle(java.lang.CharSequence);
    method public android.media.MediaDescription.Builder setTitle(java.lang.CharSequence);
  }
  public final class MediaDrm {
    ctor public MediaDrm(java.util.UUID) throws android.media.UnsupportedSchemeException;
    method public void closeSession(byte[]);
@@ -15097,7 +15122,7 @@ package android.media {
    method public boolean containsKey(java.lang.String);
    method public int describeContents();
    method public android.graphics.Bitmap getBitmap(java.lang.String);
    method public android.media.MediaMetadata.Description getDescription();
    method public android.media.MediaDescription getDescription();
    method public long getLong(java.lang.String);
    method public android.media.Rating getRating(java.lang.String);
    method public java.lang.String getString(java.lang.String);
@@ -15125,6 +15150,7 @@ package android.media {
    field public static final java.lang.String METADATA_KEY_DISPLAY_TITLE = "android.media.metadata.DISPLAY_TITLE";
    field public static final java.lang.String METADATA_KEY_DURATION = "android.media.metadata.DURATION";
    field public static final java.lang.String METADATA_KEY_GENRE = "android.media.metadata.GENRE";
    field public static final java.lang.String METADATA_KEY_MEDIA_ID = "android.media.metadata.MEDIA_ID";
    field public static final java.lang.String METADATA_KEY_NUM_TRACKS = "android.media.metadata.NUM_TRACKS";
    field public static final java.lang.String METADATA_KEY_RATING = "android.media.metadata.RATING";
    field public static final java.lang.String METADATA_KEY_TITLE = "android.media.metadata.TITLE";
@@ -15145,14 +15171,6 @@ package android.media {
    method public android.media.MediaMetadata.Builder putText(java.lang.String, java.lang.CharSequence);
  }
  public final class MediaMetadata.Description {
    method public java.lang.CharSequence getDescription();
    method public android.graphics.Bitmap getIcon();
    method public android.net.Uri getIconUri();
    method public java.lang.CharSequence getSubtitle();
    method public java.lang.CharSequence getTitle();
  }
  public abstract deprecated class MediaMetadataEditor {
    method public synchronized void addEditableKey(int);
    method public abstract void apply();
@@ -16238,7 +16256,6 @@ package android.media.browse {
    method public android.content.ComponentName getServiceComponent();
    method public android.media.session.MediaSession.Token getSessionToken();
    method public boolean isConnected();
    method public void loadIcon(android.net.Uri, int, int, android.media.browse.MediaBrowser.IconCallback);
    method public void subscribe(android.net.Uri, android.media.browse.MediaBrowser.SubscriptionCallback);
    method public void unsubscribe(android.net.Uri);
  }
@@ -16250,27 +16267,12 @@ package android.media.browse {
    method public void onConnectionSuspended();
  }
  public static abstract class MediaBrowser.IconCallback {
    ctor public MediaBrowser.IconCallback();
    method public void onError(android.net.Uri);
    method public void onIconLoaded(android.net.Uri, android.graphics.Bitmap);
  }
  public static abstract class MediaBrowser.SubscriptionCallback {
    ctor public MediaBrowser.SubscriptionCallback();
    method public void onChildrenLoaded(android.net.Uri, java.util.List<android.media.browse.MediaBrowserItem>);
    method public void onError(android.net.Uri);
  }
  public final class MediaBrowserItem implements android.os.Parcelable {
  public static class MediaBrowser.MediaItem implements android.os.Parcelable {
    ctor public MediaBrowser.MediaItem(int, android.media.MediaDescription);
    method public int describeContents();
    method public android.os.Bundle getExtras();
    method public android.media.MediaDescription getDescription();
    method public int getFlags();
    method public int getIconResourceId();
    method public android.net.Uri getIconUri();
    method public java.lang.CharSequence getSummary();
    method public java.lang.CharSequence getTitle();
    method public android.net.Uri getUri();
    method public java.lang.String getMediaId();
    method public boolean isBrowsable();
    method public boolean isPlayable();
    method public void writeToParcel(android.os.Parcel, int);
@@ -16279,37 +16281,10 @@ package android.media.browse {
    field public static final int FLAG_PLAYABLE = 2; // 0x2
  }
  public static final class MediaBrowserItem.Builder {
    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 setIconResourceId(int);
    method public android.media.browse.MediaBrowserItem.Builder setIconUri(android.net.Uri);
    method public android.media.browse.MediaBrowserItem.Builder setSummary(java.lang.CharSequence);
  }
  public abstract class MediaBrowserService extends android.app.Service {
    ctor public MediaBrowserService();
    method public void dump(java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
    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 public abstract android.media.browse.MediaBrowserService.BrowserRoot onGetRoot(java.lang.String, int, android.os.Bundle);
    method public abstract void onLoadChildren(android.net.Uri, android.media.browse.MediaBrowserService.Result<java.util.List<android.media.browse.MediaBrowserItem>>);
    method public abstract void onLoadIcon(android.net.Uri, int, int, android.media.browse.MediaBrowserService.Result<android.graphics.Bitmap>);
    method public void setSessionToken(android.media.session.MediaSession.Token);
    field public static final java.lang.String SERVICE_ACTION = "android.media.browse.MediaBrowserService";
  }
  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();
  }
  public class MediaBrowserService.Result {
    method public void detach();
    method public void sendResult(T);
  public static abstract class MediaBrowser.SubscriptionCallback {
    ctor public MediaBrowser.SubscriptionCallback();
    method public void onChildrenLoaded(android.net.Uri, java.util.List<android.media.browse.MediaBrowser.MediaItem>);
    method public void onError(android.net.Uri);
  }
}
@@ -16404,7 +16379,7 @@ package android.media.session {
    method public java.lang.String getPackageName();
    method public android.media.session.MediaController.PlaybackInfo getPlaybackInfo();
    method public android.media.session.PlaybackState getPlaybackState();
    method public java.util.List<android.media.session.MediaSession.Item> getQueue();
    method public java.util.List<android.media.session.MediaSession.QueueItem> getQueue();
    method public java.lang.CharSequence getQueueTitle();
    method public int getRatingType();
    method public android.app.PendingIntent getSessionActivity();
@@ -16421,7 +16396,7 @@ package android.media.session {
    method public void onExtrasChanged(android.os.Bundle);
    method public void onMetadataChanged(android.media.MediaMetadata);
    method public void onPlaybackStateChanged(android.media.session.PlaybackState);
    method public void onQueueChanged(java.util.List<android.media.session.MediaSession.Item>);
    method public void onQueueChanged(java.util.List<android.media.session.MediaSession.QueueItem>);
    method public void onQueueTitleChanged(java.lang.CharSequence);
    method public void onSessionDestroyed();
    method public void onSessionEvent(java.lang.String, android.os.Bundle);
@@ -16441,16 +16416,16 @@ package android.media.session {
    method public void fastForward();
    method public void pause();
    method public void play();
    method public void playFromMediaId(java.lang.String, android.os.Bundle);
    method public void playFromSearch(java.lang.String, android.os.Bundle);
    method public void playUri(android.net.Uri, android.os.Bundle);
    method public void rewind();
    method public void seekTo(long);
    method public void sendCustomAction(android.media.session.PlaybackState.CustomAction, android.os.Bundle);
    method public void sendCustomAction(java.lang.String, android.os.Bundle);
    method public void setRating(android.media.Rating);
    method public void skipToItem(long);
    method public void skipToNext();
    method public void skipToPrevious();
    method public void skipToQueueItem(long);
    method public void stop();
  }
@@ -16471,7 +16446,7 @@ package android.media.session {
    method public void setPlaybackState(android.media.session.PlaybackState);
    method public void setPlaybackToLocal(android.media.AudioAttributes);
    method public void setPlaybackToRemote(android.media.VolumeProvider);
    method public void setQueue(java.util.List<android.media.session.MediaSession.Item>);
    method public void setQueue(java.util.List<android.media.session.MediaSession.QueueItem>);
    method public void setQueueTitle(java.lang.CharSequence);
    method public void setSessionActivity(android.app.PendingIntent);
    field public static final int FLAG_HANDLES_MEDIA_BUTTONS = 1; // 0x1
@@ -16486,34 +16461,27 @@ package android.media.session {
    method public boolean onMediaButtonEvent(android.content.Intent);
    method public void onPause();
    method public void onPlay();
    method public void onPlayFromMediaId(java.lang.String, android.os.Bundle);
    method public void onPlayFromSearch(java.lang.String, android.os.Bundle);
    method public void onPlayUri(android.net.Uri, android.os.Bundle);
    method public void onRewind();
    method public void onSeekTo(long);
    method public void onSetRating(android.media.Rating);
    method public void onSkipToItem(long);
    method public void onSkipToNext();
    method public void onSkipToPrevious();
    method public void onSkipToQueueItem(long);
    method public void onStop();
  }
  public static final class MediaSession.Item implements android.os.Parcelable {
  public static final class MediaSession.QueueItem implements android.os.Parcelable {
    ctor public MediaSession.QueueItem(android.media.MediaDescription, long);
    method public int describeContents();
    method public android.os.Bundle getExtras();
    method public long getId();
    method public android.media.MediaMetadata getMetadata();
    method public android.net.Uri getUri();
    method public android.media.MediaDescription getDescription();
    method public long getQueueId();
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator CREATOR;
    field public static final int UNKNOWN_ID = -1; // 0xffffffff
  }
  public static final class MediaSession.Item.Builder {
    ctor public MediaSession.Item.Builder(android.media.MediaMetadata, long, android.net.Uri);
    method public android.media.session.MediaSession.Item build();
    method public android.media.session.MediaSession.Item.Builder setExtras(android.os.Bundle);
  }
  public static final class MediaSession.Token implements android.os.Parcelable {
    method public int describeContents();
    method public void writeToParcel(android.os.Parcel, int);
@@ -16534,6 +16502,7 @@ package android.media.session {
  public final class PlaybackState implements android.os.Parcelable {
    method public int describeContents();
    method public long getActions();
    method public long getActiveQueueItemId();
    method public long getBufferedPosition();
    method public java.util.List<android.media.session.PlaybackState.CustomAction> getCustomActions();
    method public java.lang.CharSequence getErrorMessage();
@@ -16545,15 +16514,15 @@ package android.media.session {
    field public static final long ACTION_FAST_FORWARD = 64L; // 0x40L
    field public static final long ACTION_PAUSE = 2L; // 0x2L
    field public static final long ACTION_PLAY = 4L; // 0x4L
    field public static final long ACTION_PLAY_FROM_MEDIA_ID = 1024L; // 0x400L
    field public static final long ACTION_PLAY_FROM_SEARCH = 2048L; // 0x800L
    field public static final long ACTION_PLAY_PAUSE = 512L; // 0x200L
    field public static final long ACTION_PLAY_URI = 1024L; // 0x400L
    field public static final long ACTION_REWIND = 8L; // 0x8L
    field public static final long ACTION_SEEK_TO = 256L; // 0x100L
    field public static final long ACTION_SET_RATING = 128L; // 0x80L
    field public static final long ACTION_SKIP_TO_ITEM = 4096L; // 0x1000L
    field public static final long ACTION_SKIP_TO_NEXT = 32L; // 0x20L
    field public static final long ACTION_SKIP_TO_PREVIOUS = 16L; // 0x10L
    field public static final long ACTION_SKIP_TO_QUEUE_ITEM = 4096L; // 0x1000L
    field public static final long ACTION_STOP = 1L; // 0x1L
    field public static final android.os.Parcelable.Creator CREATOR;
    field public static final long PLAYBACK_POSITION_UNKNOWN = -1L; // 0xffffffffffffffffL
@@ -16567,6 +16536,7 @@ package android.media.session {
    field public static final int STATE_REWINDING = 5; // 0x5
    field public static final int STATE_SKIPPING_TO_NEXT = 10; // 0xa
    field public static final int STATE_SKIPPING_TO_PREVIOUS = 9; // 0x9
    field public static final int STATE_SKIPPING_TO_QUEUE_ITEM = 11; // 0xb
    field public static final int STATE_STOPPED = 1; // 0x1
  }
@@ -16577,7 +16547,7 @@ package android.media.session {
    method public android.media.session.PlaybackState.Builder addCustomAction(android.media.session.PlaybackState.CustomAction);
    method public android.media.session.PlaybackState build();
    method public android.media.session.PlaybackState.Builder setActions(long);
    method public android.media.session.PlaybackState.Builder setActiveItem(long);
    method public android.media.session.PlaybackState.Builder setActiveQueueItemId(long);
    method public android.media.session.PlaybackState.Builder setBufferedPosition(long);
    method public android.media.session.PlaybackState.Builder setErrorMessage(java.lang.CharSequence);
    method public android.media.session.PlaybackState.Builder setState(int, long, float, long);
@@ -27093,6 +27063,33 @@ package android.service.dreams {
}
package android.service.media {
  public abstract class MediaBrowserService extends android.app.Service {
    ctor public MediaBrowserService();
    method public void dump(java.io.FileDescriptor, java.io.PrintWriter, java.lang.String[]);
    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 public abstract android.service.media.MediaBrowserService.BrowserRoot onGetRoot(java.lang.String, int, android.os.Bundle);
    method public abstract void onLoadChildren(android.net.Uri, android.service.media.MediaBrowserService.Result<java.util.List<android.media.browse.MediaBrowser.MediaItem>>);
    method public void setSessionToken(android.media.session.MediaSession.Token);
    field public static final java.lang.String SERVICE_ACTION = "android.media.browse.MediaBrowserService";
  }
  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();
  }
  public class MediaBrowserService.Result {
    method public void detach();
    method public void sendResult(T);
  }
}
package android.service.notification {
  public abstract class NotificationListenerService extends android.app.Service {
+18 −0
Original line number Diff line number Diff line
/* Copyright 2014, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License");
** you may not use this file except in compliance with the License.
** You may obtain a copy of the License at
**
**     http://www.apache.org/licenses/LICENSE-2.0
**
** Unless required by applicable law or agreed to in writing, software
** distributed under the License is distributed on an "AS IS" BASIS,
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
** See the License for the specific language governing permissions and
** limitations under the License.
*/

package android.media;

parcelable MediaDescription;
+276 −0

File added.

Preview size limit exceeded, changes collapsed.

+44 −95
Original line number Diff line number Diff line
@@ -17,15 +17,22 @@ package android.media;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.content.ContentProviderClient;
import android.content.ContentResolver;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.media.browse.MediaBrowser;
import android.media.session.MediaController;
import android.net.Uri;
import android.os.Bundle;
import android.os.CancellationSignal;
import android.os.OperationCanceledException;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.TextUtils;
import android.text.format.Time;
import android.util.ArrayMap;
import android.util.Log;
import android.util.Size;
import android.util.SparseArray;

import java.util.Set;
@@ -119,7 +126,9 @@ public final class MediaMetadata implements Parcelable {
    public static final String METADATA_KEY_ART = "android.media.metadata.ART";

    /**
     * The artwork for the media as a Uri.
     * The artwork for the media as a Uri formatted String. The artwork can be
     * loaded using a combination of {@link ContentResolver#openInputStream} and
     * {@link BitmapFactory#decodeStream}.
     */
    public static final String METADATA_KEY_ART_URI = "android.media.metadata.ART_URI";

@@ -130,7 +139,10 @@ public final class MediaMetadata implements Parcelable {
    public static final String METADATA_KEY_ALBUM_ART = "android.media.metadata.ALBUM_ART";

    /**
     * The artwork for the album of the media's original source as a Uri.
     * The artwork for the album of the media's original source as a Uri
     * formatted String. The artwork can be loaded using a combination of
     * {@link ContentResolver#openInputStream} and
     * {@link BitmapFactory#decodeStream}.
     */
    public static final String METADATA_KEY_ALBUM_ART_URI = "android.media.metadata.ALBUM_ART_URI";

@@ -181,13 +193,26 @@ public final class MediaMetadata implements Parcelable {
            = "android.media.metadata.DISPLAY_ICON";

    /**
     * An icon or thumbnail that is suitable for display to the user. When
     * displaying more information for media described by this metadata the
     * display description should be preferred to other fields when present.
     * A Uri formatted String for an icon or thumbnail that is suitable for
     * display to the user. When displaying more information for media described
     * by this metadata the display description should be preferred to other
     * fields when present. The icon can be loaded using a combination of
     * {@link ContentResolver#openInputStream} and
     * {@link BitmapFactory#decodeStream}.
     */
    public static final String METADATA_KEY_DISPLAY_ICON_URI
            = "android.media.metadata.DISPLAY_ICON_URI";

    /**
     * A String key for identifying the content. This value is specific to the
     * service providing the content. If used, this should be a persistent
     * unique key for the underlying content. It may be used with
     * {@link MediaController.TransportControls#playFromMediaId(String, Bundle)}
     * to initiate playback when provided by a {@link MediaBrowser} connected to
     * the same app.
     */
    public static final String METADATA_KEY_MEDIA_ID = "android.media.metadata.MEDIA_ID";

    private static final String[] PREFERRED_DESCRIPTION_ORDER = {
            METADATA_KEY_TITLE,
            METADATA_KEY_ARTIST,
@@ -277,7 +302,7 @@ public final class MediaMetadata implements Parcelable {
    }

    private final Bundle mBundle;
    private Description mDescription;
    private MediaDescription mDescription;

    private MediaMetadata(Bundle bundle) {
        mBundle = new Bundle(bundle);
@@ -406,11 +431,13 @@ public final class MediaMetadata implements Parcelable {
     *
     * @return A simple description of this metadata.
     */
    public @NonNull Description getDescription() {
    public @NonNull MediaDescription getDescription() {
        if (mDescription != null) {
            return mDescription;
        }

        String mediaId = getString(METADATA_KEY_MEDIA_ID);

        CharSequence[] text = new CharSequence[3];
        Bitmap icon = null;
        Uri iconUri = null;
@@ -454,7 +481,15 @@ public final class MediaMetadata implements Parcelable {
            }
        }

        mDescription = new Description(text[0], text[1], text[2], icon, iconUri);
        MediaDescription.Builder bob = new MediaDescription.Builder();
        bob.setMediaId(mediaId);
        bob.setTitle(text[0]);
        bob.setSubtitle(text[1]);
        bob.setDescription(text[2]);
        bob.setIconBitmap(icon);
        bob.setIconUri(iconUri);
        mDescription = bob.build();

        return mDescription;
    }

@@ -668,90 +703,4 @@ public final class MediaMetadata implements Parcelable {
            return new MediaMetadata(mBundle);
        }
    }

    /**
     * A simple form of the metadata that can be used for display.
     */
    public final class Description {
        /**
         * A primary title suitable for display or null.
         */
        private final CharSequence mTitle;
        /**
         * A subtitle suitable for display or null.
         */
        private final CharSequence mSubtitle;
        /**
         * A description suitable for display or null.
         */
        private final CharSequence mDescription;
        /**
         * A bitmap icon suitable for display or null.
         */
        private final Bitmap mIcon;
        /**
         * A Uri for an icon suitable for display or null.
         */
        private final Uri mIconUri;

        /**
         * Returns the best available title or null.
         *
         * @return A title or null.
         */
        public @Nullable CharSequence getTitle() {
            return mTitle;
        }

        /**
         * Returns the best available subtitle or null.
         *
         * @return A subtitle or null.
         */
        public @Nullable CharSequence getSubtitle() {
            return mSubtitle;
        }

        /**
         * Returns the best available description or null.
         *
         * @return A description or null.
         */
        public @Nullable CharSequence getDescription() {
            return mDescription;
        }

        /**
         * Returns the best available icon or null.
         *
         * @return An icon or null.
         */
        public @Nullable Bitmap getIcon() {
            return mIcon;
        }

        /**
         * Returns the best available icon Uri or null.
         *
         * @return An icon uri or null.
         */
        public @Nullable Uri getIconUri() {
            return mIconUri;
        }

        private Description(CharSequence title, CharSequence subtitle, CharSequence description,
                Bitmap icon, Uri iconUri) {
            mTitle = title;
            mSubtitle = subtitle;
            mDescription = description;
            mIcon = icon;
            mIconUri = iconUri;
        }

        @Override
        public String toString() {
            return mTitle + ", " + mSubtitle + ", " + mDescription;
        }
    }

}
Loading