1 /* 2 * Copyright 2018 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.support.v4.media; 18 19 import android.content.ComponentName; 20 import android.content.Context; 21 import android.media.browse.MediaBrowser; 22 import android.os.Bundle; 23 24 import androidx.annotation.NonNull; 25 import androidx.annotation.RequiresApi; 26 27 import java.util.List; 28 29 @RequiresApi(21) 30 class MediaBrowserCompatApi21 { 31 static final String NULL_MEDIA_ITEM_ID = 32 "android.support.v4.media.MediaBrowserCompat.NULL_MEDIA_ITEM"; 33 34 public static Object createConnectionCallback(ConnectionCallback callback) { 35 return new ConnectionCallbackProxy<>(callback); 36 } 37 38 public static Object createBrowser(Context context, ComponentName serviceComponent, 39 Object callback, Bundle rootHints) { 40 return new MediaBrowser(context, serviceComponent, 41 (MediaBrowser.ConnectionCallback) callback, rootHints); 42 } 43 44 public static void connect(Object browserObj) { 45 ((MediaBrowser)browserObj).connect(); 46 } 47 48 public static void disconnect(Object browserObj) { 49 ((MediaBrowser)browserObj).disconnect(); 50 51 } 52 53 public static boolean isConnected(Object browserObj) { 54 return ((MediaBrowser)browserObj).isConnected(); 55 } 56 57 public static ComponentName getServiceComponent(Object browserObj) { 58 return ((MediaBrowser)browserObj).getServiceComponent(); 59 } 60 61 public static String getRoot(Object browserObj) { 62 return ((MediaBrowser)browserObj).getRoot(); 63 } 64 65 public static Bundle getExtras(Object browserObj) { 66 return ((MediaBrowser)browserObj).getExtras(); 67 } 68 69 public static Object getSessionToken(Object browserObj) { 70 return ((MediaBrowser)browserObj).getSessionToken(); 71 } 72 73 public static Object createSubscriptionCallback(SubscriptionCallback callback) { 74 return new SubscriptionCallbackProxy<>(callback); 75 } 76 77 public static void subscribe( 78 Object browserObj, String parentId, Object subscriptionCallbackObj) { 79 ((MediaBrowser)browserObj).subscribe(parentId, 80 (MediaBrowser.SubscriptionCallback) subscriptionCallbackObj); 81 } 82 83 public static void unsubscribe(Object browserObj, String parentId) { 84 ((MediaBrowser)browserObj).unsubscribe(parentId); 85 } 86 87 interface ConnectionCallback { 88 void onConnected(); 89 void onConnectionSuspended(); 90 void onConnectionFailed(); 91 } 92 93 static class ConnectionCallbackProxy<T extends ConnectionCallback> 94 extends MediaBrowser.ConnectionCallback { 95 protected final T mConnectionCallback; 96 97 public ConnectionCallbackProxy(T connectionCallback) { 98 mConnectionCallback = connectionCallback; 99 } 100 101 @Override 102 public void onConnected() { 103 mConnectionCallback.onConnected(); 104 } 105 106 @Override 107 public void onConnectionSuspended() { 108 mConnectionCallback.onConnectionSuspended(); 109 } 110 111 @Override 112 public void onConnectionFailed() { 113 mConnectionCallback.onConnectionFailed(); 114 } 115 } 116 117 interface SubscriptionCallback { 118 void onChildrenLoaded(@NonNull String parentId, List<?> children); 119 void onError(@NonNull String parentId); 120 } 121 122 static class SubscriptionCallbackProxy<T extends SubscriptionCallback> 123 extends MediaBrowser.SubscriptionCallback { 124 protected final T mSubscriptionCallback; 125 126 public SubscriptionCallbackProxy(T callback) { 127 mSubscriptionCallback = callback; 128 } 129 130 @Override 131 public void onChildrenLoaded(@NonNull String parentId, 132 List<MediaBrowser.MediaItem> children) { 133 mSubscriptionCallback.onChildrenLoaded(parentId, children); 134 } 135 136 @Override 137 public void onError(@NonNull String parentId) { 138 mSubscriptionCallback.onError(parentId); 139 } 140 } 141 142 static class MediaItem { 143 144 public static int getFlags(Object itemObj) { 145 return ((MediaBrowser.MediaItem) itemObj).getFlags(); 146 } 147 148 public static Object getDescription(Object itemObj) { 149 return ((MediaBrowser.MediaItem) itemObj).getDescription(); 150 } 151 152 private MediaItem() { 153 } 154 } 155 156 private MediaBrowserCompatApi21() { 157 } 158 } 159