Loading api/current.txt +8 −8 Original line number Diff line number Diff line Loading @@ -16186,7 +16186,7 @@ package android.media.browse { method public android.net.Uri getRoot(); method public android.media.session.MediaSession.Token getSessionToken(); method public boolean isConnected(); method public void loadThumbnail(android.net.Uri, int, int, android.media.browse.MediaBrowser.ThumbnailCallback); 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); } Loading @@ -16198,16 +16198,16 @@ package android.media.browse { method public void onConnectionSuspended(); } public static abstract class MediaBrowser.SubscriptionCallback { ctor public MediaBrowser.SubscriptionCallback(); method public void onChildrenLoaded(android.net.Uri, java.util.List<android.media.browse.MediaBrowserItem>); 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.ThumbnailCallback { ctor public MediaBrowser.ThumbnailCallback(); 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); method public void onThumbnailLoaded(android.net.Uri, android.graphics.Bitmap); } public final class MediaBrowserItem implements android.os.Parcelable { Loading Loading @@ -16244,7 +16244,7 @@ package android.media.browse { 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 onLoadThumbnail(android.net.Uri, int, int, android.media.browse.MediaBrowserService.Result<android.graphics.Bitmap>); 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"; } media/java/android/media/browse/IMediaBrowserService.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -18,6 +18,6 @@ oneway interface IMediaBrowserService { void addSubscription(in Uri uri, IMediaBrowserServiceCallbacks callbacks); void removeSubscription(in Uri uri, IMediaBrowserServiceCallbacks callbacks); void loadThumbnail(in int seqNum, in Uri uri, int width, int height, void loadIcon(in int seqNum, in Uri uri, int width, int height, IMediaBrowserServiceCallbacks callbacks); } No newline at end of file media/java/android/media/browse/IMediaBrowserServiceCallbacks.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -24,5 +24,5 @@ oneway interface IMediaBrowserServiceCallbacks { void onConnect(in Uri root, in MediaSession.Token session, in Bundle extras); void onConnectFailed(); void onLoadChildren(in Uri uri, in ParceledListSlice list); void onLoadThumbnail(int seqNum, in Bitmap bitmap); void onLoadIcon(int seqNum, in Bitmap bitmap); } media/java/android/media/browse/MediaBrowser.java +48 −48 Original line number Diff line number Diff line Loading @@ -67,8 +67,8 @@ public final class MediaBrowser { private final Handler mHandler = new Handler(); private final ArrayMap<Uri,Subscription> mSubscriptions = new ArrayMap<Uri, MediaBrowser.Subscription>(); private final SparseArray<ThumbnailRequest> mThumbnailRequests = new SparseArray<ThumbnailRequest>(); private final SparseArray<IconRequest> mIconRequests = new SparseArray<IconRequest>(); private int mState = CONNECT_STATE_DISCONNECTED; private MediaServiceConnection mServiceConnection; Loading Loading @@ -352,42 +352,42 @@ public final class MediaBrowser { } /** * Loads the thumbnail of a media item. * Loads the icon of a media item. * * @param uri The uri of the thumbnail. * @param uri The uri of the Icon. * @param width The preferred width of the icon in dp. * @param height The preferred width of the icon in dp. * @param callback The callback to receive the thumbnail. * @param callback The callback to receive the icon. */ public void loadThumbnail(final @NonNull Uri uri, final int width, final int height, final @NonNull ThumbnailCallback callback) { public void loadIcon(final @NonNull Uri uri, final int width, final int height, final @NonNull IconCallback callback) { if (uri == null) { throw new IllegalArgumentException("thumbnail uri cannot be null"); throw new IllegalArgumentException("Icon uri cannot be null"); } if (callback == null) { throw new IllegalArgumentException("thumbnail callback cannot be null"); throw new IllegalArgumentException("Icon callback cannot be null"); } mHandler.post(new Runnable() { @Override public void run() { for (int i = 0; i < mThumbnailRequests.size(); i++) { ThumbnailRequest existingRequest = mThumbnailRequests.valueAt(i); for (int i = 0; i < mIconRequests.size(); i++) { IconRequest existingRequest = mIconRequests.valueAt(i); if (existingRequest.isSameRequest(uri, width, height)) { existingRequest.addCallback(callback); return; } } final int seq = mNextSeq++; ThumbnailRequest request = new ThumbnailRequest(seq, uri, width, height); IconRequest request = new IconRequest(seq, uri, width, height); request.addCallback(callback); mThumbnailRequests.put(seq, request); mIconRequests.put(seq, request); if (mState == CONNECT_STATE_CONNECTED) { try { mServiceBinder.loadThumbnail(seq, uri, width, height, mServiceCallbacks); mServiceBinder.loadIcon(seq, uri, width, height, mServiceCallbacks); } catch (RemoteException e) { // Process is crashing. We will disconnect, and upon reconnect we will // automatically reload the thumbnails. So nothing to do here. Log.d(TAG, "loadThumbnail failed with RemoteException uri=" + uri); // automatically reload the icons. So nothing to do here. Log.d(TAG, "loadIcon failed with RemoteException uri=" + uri); } } } Loading Loading @@ -451,15 +451,15 @@ public final class MediaBrowser { } } for (int i = 0; i < mThumbnailRequests.size(); i++) { ThumbnailRequest request = mThumbnailRequests.valueAt(i); for (int i = 0; i < mIconRequests.size(); i++) { IconRequest request = mIconRequests.valueAt(i); try { mServiceBinder.loadThumbnail(request.mSeq, request.mUri, mServiceBinder.loadIcon(request.mSeq, request.mUri, request.mWidth, request.mHeight, mServiceCallbacks); } catch (RemoteException e) { // Process is crashing. We will disconnect, and upon reconnect we will // automatically reload. So nothing to do here. Log.d(TAG, "loadThumbnail failed with RemoteException request=" + request); Log.d(TAG, "loadIcon failed with RemoteException request=" + request); } } } Loading Loading @@ -528,26 +528,26 @@ public final class MediaBrowser { }); } private final void onLoadThumbnail(final IMediaBrowserServiceCallbacks callback, private final void onLoadIcon(final IMediaBrowserServiceCallbacks callback, final int seqNum, final Bitmap bitmap) { mHandler.post(new Runnable() { @Override public void run() { // Check that there hasn't been a disconnect or a different // ServiceConnection. if (!isCurrent(callback, "onLoadThumbnail")) { if (!isCurrent(callback, "onLoadIcon")) { return; } ThumbnailRequest request = mThumbnailRequests.get(seqNum); IconRequest request = mIconRequests.get(seqNum); if (request == null) { Log.d(TAG, "onLoadThumbnail called for seqNum=" + seqNum + " request=" Log.d(TAG, "onLoadIcon called for seqNum=" + seqNum + " request=" + request + " but the request is not registered"); return; } mThumbnailRequests.delete(seqNum); for (ThumbnailCallback thumbnailCallback : request.getCallbacks()) { thumbnailCallback.onThumbnailLoaded(request.mUri, bitmap); mIconRequests.delete(seqNum); for (IconCallback IconCallback : request.getCallbacks()) { IconCallback.onIconLoaded(request.mUri, bitmap); } } }); Loading Loading @@ -636,13 +636,13 @@ public final class MediaBrowser { } /** * Callbacks for thumbnail loading. * Callbacks for icon loading. */ public static abstract class ThumbnailCallback { public static abstract class IconCallback { /** * Called when the thumbnail is loaded. * Called when the icon is loaded. */ public void onThumbnailLoaded(@NonNull Uri uri, @NonNull Bitmap bitmap) { public void onIconLoaded(@NonNull Uri uri, @NonNull Bitmap bitmap) { } /** Loading @@ -652,38 +652,38 @@ public final class MediaBrowser { } } private static class ThumbnailRequest { private static class IconRequest { final int mSeq; final Uri mUri; final int mWidth; final int mHeight; final List<ThumbnailCallback> mCallbacks; final List<IconCallback> mCallbacks; /** * Constructs a thumbnail request. * Constructs an icon request. * @param seq The unique sequence number assigned to the request by the media browser. * @param uri The Uri for the thumbnail. * @param width The width for the thumbnail. * @param height The height for the thumbnail. * @param uri The Uri for the icon. * @param width The width for the icon. * @param height The height for the icon. */ ThumbnailRequest(int seq, @NonNull Uri uri, int width, int height) { IconRequest(int seq, @NonNull Uri uri, int width, int height) { if (uri == null) { throw new IllegalArgumentException("thumbnail uri cannot be null"); throw new IllegalArgumentException("Icon uri cannot be null"); } this.mSeq = seq; this.mUri = uri; this.mWidth = width; this.mHeight = height; mCallbacks = new ArrayList<ThumbnailCallback>(); mCallbacks = new ArrayList<IconCallback>(); } /** * Adds a callback to the thumbnail request. * Adds a callback to the icon request. * If the callback already exists, it will not be added again. */ public void addCallback(@NonNull ThumbnailCallback callback) { public void addCallback(@NonNull IconCallback callback) { if (callback == null) { throw new IllegalArgumentException("callback cannot be null in ThumbnailRequest"); throw new IllegalArgumentException("callback cannot be null in IconRequest"); } if (!mCallbacks.contains(callback)) { mCallbacks.add(callback); Loading @@ -691,7 +691,7 @@ public final class MediaBrowser { } /** * Checks if the thumbnail request has the same uri, width, and height as the given values. * Checks if the icon request has the same uri, width, and height as the given values. */ public boolean isSameRequest(@Nullable Uri uri, int width, int height) { return Objects.equals(mUri, uri) && mWidth == width && mHeight == height; Loading @@ -699,7 +699,7 @@ public final class MediaBrowser { @Override public String toString() { final StringBuilder sb = new StringBuilder("ThumbnailRequest{"); final StringBuilder sb = new StringBuilder("IconRequest{"); sb.append("uri=").append(mUri); sb.append(", width=").append(mWidth); sb.append(", height=").append(mHeight); Loading @@ -711,7 +711,7 @@ public final class MediaBrowser { /** * Gets an unmodifiable view of the list of callbacks associated with the request. */ public List<ThumbnailCallback> getCallbacks() { public List<IconCallback> getCallbacks() { return Collections.unmodifiableList(mCallbacks); } } Loading Loading @@ -843,10 +843,10 @@ public final class MediaBrowser { } @Override public void onLoadThumbnail(final int seqNum, final Bitmap bitmap) { public void onLoadIcon(final int seqNum, final Bitmap bitmap) { MediaBrowser mediaBrowser = mMediaBrowser.get(); if (mediaBrowser != null) { mediaBrowser.onLoadThumbnail(this, seqNum, bitmap); mediaBrowser.onLoadIcon(this, seqNum, bitmap); } } } Loading media/java/android/media/browse/MediaBrowserService.java +12 −12 Original line number Diff line number Diff line Loading @@ -105,7 +105,7 @@ public abstract class MediaBrowserService extends Service { * be thrown. * * @see MediaBrowserService#onLoadChildren * @see MediaBrowserService#onLoadThumbnail * @see MediaBrowserService#onLoadIcon */ public class Result<T> { private Object mDebug; Loading Loading @@ -266,10 +266,10 @@ public abstract class MediaBrowserService extends Service { } @Override public void loadThumbnail(final int seq, final Uri uri, final int width, final int height, public void loadIcon(final int seq, final Uri uri, final int width, final int height, final IMediaBrowserServiceCallbacks callbacks) { if (uri == null) { throw new IllegalStateException("loadThumbnail sent null list for uri " + uri); throw new IllegalStateException("loadIcon sent null list for uri " + uri); } mHandler.post(new Runnable() { @Override Loading @@ -291,7 +291,7 @@ public abstract class MediaBrowserService extends Service { void onResultSent(Bitmap bitmap) { if (mConnections.get(connection.callbacks.asBinder()) != connection) { if (DBG) { Log.d(TAG, "Not sending onLoadThumbnail result for connection" Log.d(TAG, "Not sending onLoadIcon result for connection" + " that has been disconnected. pkg=" + connection.pkg + " uri=" + uri); } Loading @@ -299,18 +299,18 @@ public abstract class MediaBrowserService extends Service { } try { callbacks.onLoadThumbnail(seq, bitmap); callbacks.onLoadIcon(seq, bitmap); } catch (RemoteException e) { // The other side is in the process of crashing. Log.w(TAG, "RemoteException in calling onLoadThumbnail", e); Log.w(TAG, "RemoteException in calling onLoadIcon", e); } } }; onLoadThumbnail(uri, width, height, result); onLoadIcon(uri, width, height, result); if (!result.isDone()) { throw new IllegalStateException("onLoadThumbnail must call detach() or" throw new IllegalStateException("onLoadIcon must call detach() or" + " sendResult() before returning for package=" + connection.pkg + " uri=" + uri); } Loading Loading @@ -375,7 +375,7 @@ public abstract class MediaBrowserService extends Service { @NonNull Result<List<MediaBrowserItem>> result); /** * Called to get the thumbnail of a particular media item. * Called to get the icon of a particular media item. * <p> * Implementations must call result.{@link Result#sendResult result.sendResult} with the bitmap. * If loading the bitmap will be an expensive operation that should be performed Loading @@ -387,10 +387,10 @@ public abstract class MediaBrowserService extends Service { * @param width The requested width of the icon in dp. * @param height The requested height of the icon in dp. * * @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. * @return The file descriptor of the icon, which may then be loaded * using a bitmap factory, or null if the item does not have an icon. */ public abstract void onLoadThumbnail(@NonNull Uri uri, int width, int height, public abstract void onLoadIcon(@NonNull Uri uri, int width, int height, @NonNull Result<Bitmap> result); /** Loading Loading
api/current.txt +8 −8 Original line number Diff line number Diff line Loading @@ -16186,7 +16186,7 @@ package android.media.browse { method public android.net.Uri getRoot(); method public android.media.session.MediaSession.Token getSessionToken(); method public boolean isConnected(); method public void loadThumbnail(android.net.Uri, int, int, android.media.browse.MediaBrowser.ThumbnailCallback); 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); } Loading @@ -16198,16 +16198,16 @@ package android.media.browse { method public void onConnectionSuspended(); } public static abstract class MediaBrowser.SubscriptionCallback { ctor public MediaBrowser.SubscriptionCallback(); method public void onChildrenLoaded(android.net.Uri, java.util.List<android.media.browse.MediaBrowserItem>); 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.ThumbnailCallback { ctor public MediaBrowser.ThumbnailCallback(); 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); method public void onThumbnailLoaded(android.net.Uri, android.graphics.Bitmap); } public final class MediaBrowserItem implements android.os.Parcelable { Loading Loading @@ -16244,7 +16244,7 @@ package android.media.browse { 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 onLoadThumbnail(android.net.Uri, int, int, android.media.browse.MediaBrowserService.Result<android.graphics.Bitmap>); 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"; }
media/java/android/media/browse/IMediaBrowserService.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -18,6 +18,6 @@ oneway interface IMediaBrowserService { void addSubscription(in Uri uri, IMediaBrowserServiceCallbacks callbacks); void removeSubscription(in Uri uri, IMediaBrowserServiceCallbacks callbacks); void loadThumbnail(in int seqNum, in Uri uri, int width, int height, void loadIcon(in int seqNum, in Uri uri, int width, int height, IMediaBrowserServiceCallbacks callbacks); } No newline at end of file
media/java/android/media/browse/IMediaBrowserServiceCallbacks.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -24,5 +24,5 @@ oneway interface IMediaBrowserServiceCallbacks { void onConnect(in Uri root, in MediaSession.Token session, in Bundle extras); void onConnectFailed(); void onLoadChildren(in Uri uri, in ParceledListSlice list); void onLoadThumbnail(int seqNum, in Bitmap bitmap); void onLoadIcon(int seqNum, in Bitmap bitmap); }
media/java/android/media/browse/MediaBrowser.java +48 −48 Original line number Diff line number Diff line Loading @@ -67,8 +67,8 @@ public final class MediaBrowser { private final Handler mHandler = new Handler(); private final ArrayMap<Uri,Subscription> mSubscriptions = new ArrayMap<Uri, MediaBrowser.Subscription>(); private final SparseArray<ThumbnailRequest> mThumbnailRequests = new SparseArray<ThumbnailRequest>(); private final SparseArray<IconRequest> mIconRequests = new SparseArray<IconRequest>(); private int mState = CONNECT_STATE_DISCONNECTED; private MediaServiceConnection mServiceConnection; Loading Loading @@ -352,42 +352,42 @@ public final class MediaBrowser { } /** * Loads the thumbnail of a media item. * Loads the icon of a media item. * * @param uri The uri of the thumbnail. * @param uri The uri of the Icon. * @param width The preferred width of the icon in dp. * @param height The preferred width of the icon in dp. * @param callback The callback to receive the thumbnail. * @param callback The callback to receive the icon. */ public void loadThumbnail(final @NonNull Uri uri, final int width, final int height, final @NonNull ThumbnailCallback callback) { public void loadIcon(final @NonNull Uri uri, final int width, final int height, final @NonNull IconCallback callback) { if (uri == null) { throw new IllegalArgumentException("thumbnail uri cannot be null"); throw new IllegalArgumentException("Icon uri cannot be null"); } if (callback == null) { throw new IllegalArgumentException("thumbnail callback cannot be null"); throw new IllegalArgumentException("Icon callback cannot be null"); } mHandler.post(new Runnable() { @Override public void run() { for (int i = 0; i < mThumbnailRequests.size(); i++) { ThumbnailRequest existingRequest = mThumbnailRequests.valueAt(i); for (int i = 0; i < mIconRequests.size(); i++) { IconRequest existingRequest = mIconRequests.valueAt(i); if (existingRequest.isSameRequest(uri, width, height)) { existingRequest.addCallback(callback); return; } } final int seq = mNextSeq++; ThumbnailRequest request = new ThumbnailRequest(seq, uri, width, height); IconRequest request = new IconRequest(seq, uri, width, height); request.addCallback(callback); mThumbnailRequests.put(seq, request); mIconRequests.put(seq, request); if (mState == CONNECT_STATE_CONNECTED) { try { mServiceBinder.loadThumbnail(seq, uri, width, height, mServiceCallbacks); mServiceBinder.loadIcon(seq, uri, width, height, mServiceCallbacks); } catch (RemoteException e) { // Process is crashing. We will disconnect, and upon reconnect we will // automatically reload the thumbnails. So nothing to do here. Log.d(TAG, "loadThumbnail failed with RemoteException uri=" + uri); // automatically reload the icons. So nothing to do here. Log.d(TAG, "loadIcon failed with RemoteException uri=" + uri); } } } Loading Loading @@ -451,15 +451,15 @@ public final class MediaBrowser { } } for (int i = 0; i < mThumbnailRequests.size(); i++) { ThumbnailRequest request = mThumbnailRequests.valueAt(i); for (int i = 0; i < mIconRequests.size(); i++) { IconRequest request = mIconRequests.valueAt(i); try { mServiceBinder.loadThumbnail(request.mSeq, request.mUri, mServiceBinder.loadIcon(request.mSeq, request.mUri, request.mWidth, request.mHeight, mServiceCallbacks); } catch (RemoteException e) { // Process is crashing. We will disconnect, and upon reconnect we will // automatically reload. So nothing to do here. Log.d(TAG, "loadThumbnail failed with RemoteException request=" + request); Log.d(TAG, "loadIcon failed with RemoteException request=" + request); } } } Loading Loading @@ -528,26 +528,26 @@ public final class MediaBrowser { }); } private final void onLoadThumbnail(final IMediaBrowserServiceCallbacks callback, private final void onLoadIcon(final IMediaBrowserServiceCallbacks callback, final int seqNum, final Bitmap bitmap) { mHandler.post(new Runnable() { @Override public void run() { // Check that there hasn't been a disconnect or a different // ServiceConnection. if (!isCurrent(callback, "onLoadThumbnail")) { if (!isCurrent(callback, "onLoadIcon")) { return; } ThumbnailRequest request = mThumbnailRequests.get(seqNum); IconRequest request = mIconRequests.get(seqNum); if (request == null) { Log.d(TAG, "onLoadThumbnail called for seqNum=" + seqNum + " request=" Log.d(TAG, "onLoadIcon called for seqNum=" + seqNum + " request=" + request + " but the request is not registered"); return; } mThumbnailRequests.delete(seqNum); for (ThumbnailCallback thumbnailCallback : request.getCallbacks()) { thumbnailCallback.onThumbnailLoaded(request.mUri, bitmap); mIconRequests.delete(seqNum); for (IconCallback IconCallback : request.getCallbacks()) { IconCallback.onIconLoaded(request.mUri, bitmap); } } }); Loading Loading @@ -636,13 +636,13 @@ public final class MediaBrowser { } /** * Callbacks for thumbnail loading. * Callbacks for icon loading. */ public static abstract class ThumbnailCallback { public static abstract class IconCallback { /** * Called when the thumbnail is loaded. * Called when the icon is loaded. */ public void onThumbnailLoaded(@NonNull Uri uri, @NonNull Bitmap bitmap) { public void onIconLoaded(@NonNull Uri uri, @NonNull Bitmap bitmap) { } /** Loading @@ -652,38 +652,38 @@ public final class MediaBrowser { } } private static class ThumbnailRequest { private static class IconRequest { final int mSeq; final Uri mUri; final int mWidth; final int mHeight; final List<ThumbnailCallback> mCallbacks; final List<IconCallback> mCallbacks; /** * Constructs a thumbnail request. * Constructs an icon request. * @param seq The unique sequence number assigned to the request by the media browser. * @param uri The Uri for the thumbnail. * @param width The width for the thumbnail. * @param height The height for the thumbnail. * @param uri The Uri for the icon. * @param width The width for the icon. * @param height The height for the icon. */ ThumbnailRequest(int seq, @NonNull Uri uri, int width, int height) { IconRequest(int seq, @NonNull Uri uri, int width, int height) { if (uri == null) { throw new IllegalArgumentException("thumbnail uri cannot be null"); throw new IllegalArgumentException("Icon uri cannot be null"); } this.mSeq = seq; this.mUri = uri; this.mWidth = width; this.mHeight = height; mCallbacks = new ArrayList<ThumbnailCallback>(); mCallbacks = new ArrayList<IconCallback>(); } /** * Adds a callback to the thumbnail request. * Adds a callback to the icon request. * If the callback already exists, it will not be added again. */ public void addCallback(@NonNull ThumbnailCallback callback) { public void addCallback(@NonNull IconCallback callback) { if (callback == null) { throw new IllegalArgumentException("callback cannot be null in ThumbnailRequest"); throw new IllegalArgumentException("callback cannot be null in IconRequest"); } if (!mCallbacks.contains(callback)) { mCallbacks.add(callback); Loading @@ -691,7 +691,7 @@ public final class MediaBrowser { } /** * Checks if the thumbnail request has the same uri, width, and height as the given values. * Checks if the icon request has the same uri, width, and height as the given values. */ public boolean isSameRequest(@Nullable Uri uri, int width, int height) { return Objects.equals(mUri, uri) && mWidth == width && mHeight == height; Loading @@ -699,7 +699,7 @@ public final class MediaBrowser { @Override public String toString() { final StringBuilder sb = new StringBuilder("ThumbnailRequest{"); final StringBuilder sb = new StringBuilder("IconRequest{"); sb.append("uri=").append(mUri); sb.append(", width=").append(mWidth); sb.append(", height=").append(mHeight); Loading @@ -711,7 +711,7 @@ public final class MediaBrowser { /** * Gets an unmodifiable view of the list of callbacks associated with the request. */ public List<ThumbnailCallback> getCallbacks() { public List<IconCallback> getCallbacks() { return Collections.unmodifiableList(mCallbacks); } } Loading Loading @@ -843,10 +843,10 @@ public final class MediaBrowser { } @Override public void onLoadThumbnail(final int seqNum, final Bitmap bitmap) { public void onLoadIcon(final int seqNum, final Bitmap bitmap) { MediaBrowser mediaBrowser = mMediaBrowser.get(); if (mediaBrowser != null) { mediaBrowser.onLoadThumbnail(this, seqNum, bitmap); mediaBrowser.onLoadIcon(this, seqNum, bitmap); } } } Loading
media/java/android/media/browse/MediaBrowserService.java +12 −12 Original line number Diff line number Diff line Loading @@ -105,7 +105,7 @@ public abstract class MediaBrowserService extends Service { * be thrown. * * @see MediaBrowserService#onLoadChildren * @see MediaBrowserService#onLoadThumbnail * @see MediaBrowserService#onLoadIcon */ public class Result<T> { private Object mDebug; Loading Loading @@ -266,10 +266,10 @@ public abstract class MediaBrowserService extends Service { } @Override public void loadThumbnail(final int seq, final Uri uri, final int width, final int height, public void loadIcon(final int seq, final Uri uri, final int width, final int height, final IMediaBrowserServiceCallbacks callbacks) { if (uri == null) { throw new IllegalStateException("loadThumbnail sent null list for uri " + uri); throw new IllegalStateException("loadIcon sent null list for uri " + uri); } mHandler.post(new Runnable() { @Override Loading @@ -291,7 +291,7 @@ public abstract class MediaBrowserService extends Service { void onResultSent(Bitmap bitmap) { if (mConnections.get(connection.callbacks.asBinder()) != connection) { if (DBG) { Log.d(TAG, "Not sending onLoadThumbnail result for connection" Log.d(TAG, "Not sending onLoadIcon result for connection" + " that has been disconnected. pkg=" + connection.pkg + " uri=" + uri); } Loading @@ -299,18 +299,18 @@ public abstract class MediaBrowserService extends Service { } try { callbacks.onLoadThumbnail(seq, bitmap); callbacks.onLoadIcon(seq, bitmap); } catch (RemoteException e) { // The other side is in the process of crashing. Log.w(TAG, "RemoteException in calling onLoadThumbnail", e); Log.w(TAG, "RemoteException in calling onLoadIcon", e); } } }; onLoadThumbnail(uri, width, height, result); onLoadIcon(uri, width, height, result); if (!result.isDone()) { throw new IllegalStateException("onLoadThumbnail must call detach() or" throw new IllegalStateException("onLoadIcon must call detach() or" + " sendResult() before returning for package=" + connection.pkg + " uri=" + uri); } Loading Loading @@ -375,7 +375,7 @@ public abstract class MediaBrowserService extends Service { @NonNull Result<List<MediaBrowserItem>> result); /** * Called to get the thumbnail of a particular media item. * Called to get the icon of a particular media item. * <p> * Implementations must call result.{@link Result#sendResult result.sendResult} with the bitmap. * If loading the bitmap will be an expensive operation that should be performed Loading @@ -387,10 +387,10 @@ public abstract class MediaBrowserService extends Service { * @param width The requested width of the icon in dp. * @param height The requested height of the icon in dp. * * @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. * @return The file descriptor of the icon, which may then be loaded * using a bitmap factory, or null if the item does not have an icon. */ public abstract void onLoadThumbnail(@NonNull Uri uri, int width, int height, public abstract void onLoadIcon(@NonNull Uri uri, int width, int height, @NonNull Result<Bitmap> result); /** Loading