blob: fcaea408a2c484e8c92df5c01eedc9bc6140594a [file] [log] [blame]
/*
* Copyright (C) 2015 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.support.v4.media;
import android.media.browse.MediaBrowser;
import android.os.Bundle;
import android.os.Parcel;
import android.os.ResultReceiver;
import android.service.media.MediaBrowserService;
import android.util.Log;
class MediaBrowserServiceCompatApi23 extends MediaBrowserServiceCompatApi21 {
private static final String TAG = "MediaBrowserServiceCompatApi21";
public static Object createService() {
return new MediaBrowserServiceAdaptorApi23();
}
public static void onCreate(Object serviceObj, ServiceImplApi23 serviceImpl) {
((MediaBrowserServiceAdaptorApi23) serviceObj).onCreate(serviceImpl);
}
public interface ServiceImplApi23 extends ServiceImplApi21 {
void getMediaItem(final String mediaId, final ItemCallback cb);
}
public interface ItemCallback {
void onItemLoaded(int resultCode, Bundle resultData, Parcel itemParcel);
}
static class MediaBrowserServiceAdaptorApi23 extends MediaBrowserServiceAdaptorApi21 {
public void onCreate(ServiceImplApi23 serviceImpl) {
mBinder = new ServiceBinderProxyApi23(serviceImpl);
}
private static class ServiceBinderProxyApi23 extends ServiceBinderProxyApi21 {
ServiceImplApi23 mServiceImpl;
ServiceBinderProxyApi23(ServiceImplApi23 serviceImpl) {
super(serviceImpl);
mServiceImpl = serviceImpl;
}
@Override
public void getMediaItem(final String mediaId, final ResultReceiver receiver) {
final String KEY_MEDIA_ITEM;
try {
KEY_MEDIA_ITEM = (String) MediaBrowserService.class.getDeclaredField(
"KEY_MEDIA_ITEM").get(null);
} catch (IllegalAccessException | NoSuchFieldException e) {
Log.i(TAG, "Failed to get KEY_MEDIA_ITEM via reflection", e);
return;
}
mServiceImpl.getMediaItem(mediaId, new ItemCallback() {
@Override
public void onItemLoaded(int resultCode, Bundle resultData, Parcel itemParcel) {
if (itemParcel != null) {
itemParcel.setDataPosition(0);
MediaBrowser.MediaItem item =
MediaBrowser.MediaItem.CREATOR.createFromParcel(itemParcel);
resultData.putParcelable(KEY_MEDIA_ITEM, item);
itemParcel.recycle();
}
receiver.send(resultCode, resultData);
}
});
}
}
}
}