| /* |
| * Copyright 2018 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 com.android.bluetooth.audio_util; |
| |
| import android.content.ComponentName; |
| import android.content.Context; |
| import android.media.session.MediaSession; |
| import android.os.Bundle; |
| import android.util.Log; |
| |
| import com.android.internal.annotations.VisibleForTesting; |
| |
| /** |
| * Provide a mockable interface in order to test classes that use MediaBrowser. |
| * We need this class due to the fact that the MediaController class is marked as final and |
| * there is no way to currently mock final classes in Android. Once this is possible this class |
| * can be deleted. |
| */ |
| public class MediaBrowser { |
| android.media.browse.MediaBrowser mDelegate; |
| |
| /** |
| * Wrap a real MediaBrowser object |
| */ |
| public MediaBrowser(android.media.browse.MediaBrowser delegate) { |
| mDelegate = delegate; |
| } |
| |
| /** |
| * Create a real MediaBrowser object and wrap it |
| */ |
| public MediaBrowser(Context context, ComponentName serviceComponent, |
| ConnectionCallback callback, Bundle rootHints) { |
| mDelegate = new android.media.browse.MediaBrowser(context, serviceComponent, callback, |
| rootHints); |
| } |
| |
| /** |
| * Wrapper for MediaBrowser.ConnectionCallback |
| */ |
| public abstract static class ConnectionCallback extends |
| android.media.browse.MediaBrowser.ConnectionCallback {} |
| |
| /** |
| * Wrapper for MediaBrowser.ItemCallback |
| */ |
| public abstract static class ItemCallback extends |
| android.media.browse.MediaBrowser.ItemCallback {} |
| |
| /** |
| * Wrapper for MediaBrowser.SubscriptionCallback |
| */ |
| public abstract static class SubscriptionCallback extends |
| android.media.browse.MediaBrowser.SubscriptionCallback {} |
| |
| /** |
| * Wrapper for MediaBrowser.connect() |
| */ |
| public void connect() { |
| mDelegate.connect(); |
| } |
| |
| /** |
| * Wrapper for MediaBrowser.disconnect() |
| */ |
| public void disconnect() { |
| mDelegate.disconnect(); |
| } |
| |
| /** |
| * Wrapper for MediaBrowser.getExtras() |
| */ |
| public Bundle getExtras() { |
| return mDelegate.getExtras(); |
| } |
| |
| /** |
| * Wrapper for MediaBrowser.getItem(String mediaId, ItemCallback callback) |
| */ |
| public void getItem(String mediaId, ItemCallback callback) { |
| mDelegate.getItem(mediaId, callback); |
| } |
| |
| /** |
| * Wrapper for MediaBrowser.getRoot() |
| */ |
| public String getRoot() { |
| return mDelegate.getRoot(); |
| } |
| |
| /** |
| * Wrapper for MediaBrowser.getServiceComponent() |
| */ |
| public ComponentName getServiceComponent() { |
| return mDelegate.getServiceComponent(); |
| } |
| |
| /** |
| * Wrapper for MediaBrowser.getSessionToken() |
| */ |
| public MediaSession.Token getSessionToken() { |
| return mDelegate.getSessionToken(); |
| } |
| /** |
| * Wrapper for MediaBrowser.isConnected() |
| */ |
| public boolean isConnected() { |
| return mDelegate.isConnected(); |
| } |
| |
| /** |
| * Wrapper for MediaBrowser.subscribe(String parentId, Bundle options, |
| * SubscriptionCallback callback) |
| */ |
| public void subscribe(String parentId, Bundle options, SubscriptionCallback callback) { |
| mDelegate.subscribe(parentId, options, callback); |
| } |
| |
| /** |
| * Wrapper for MediaBrowser.subscribe(String parentId, SubscriptionCallback callback) |
| */ |
| public void subscribe(String parentId, SubscriptionCallback callback) { |
| mDelegate.subscribe(parentId, callback); |
| } |
| |
| /** |
| * Wrapper for MediaBrowser.unsubscribe(String parentId) |
| */ |
| public void unsubscribe(String parentId) { |
| mDelegate.unsubscribe(parentId); |
| } |
| |
| |
| /** |
| * Wrapper for MediaBrowser.unsubscribe(String parentId, SubscriptionCallback callback) |
| */ |
| public void unsubscribe(String parentId, SubscriptionCallback callback) { |
| mDelegate.unsubscribe(parentId, callback); |
| } |
| |
| /** |
| * A function that allows Mockito to capture the constructor arguments when using |
| * MediaBrowserFactory.make() |
| */ |
| @VisibleForTesting |
| public void testInit(Context context, ComponentName serviceComponent, |
| ConnectionCallback callback, Bundle rootHints) { |
| // This is only used by Mockito to capture the constructor arguments on creation |
| Log.wtf("AvrcpMockMediaBrowser", "This function should never be called"); |
| } |
| } |