|
63 | 63 | import androidx.core.content.ContextCompat;
|
64 | 64 | import androidx.core.content.res.ResourcesCompat;
|
65 | 65 | import androidx.core.graphics.drawable.DrawableCompat;
|
| 66 | +import androidx.core.util.Supplier; |
66 | 67 | import androidx.media.MediaBrowserServiceCompat;
|
67 | 68 | import androidx.recyclerview.widget.DiffUtil;
|
68 | 69 | import androidx.recyclerview.widget.LinearLayoutManager;
|
@@ -129,9 +130,28 @@ public class MediaAppControllerActivity extends AppCompatActivity {
|
129 | 130 | private AudioFocusHelper mAudioFocusHelper;
|
130 | 131 | private RatingUiHelper mRatingUiHelper;
|
131 | 132 | private final CustomControlsAdapter mCustomControlsAdapter = new CustomControlsAdapter();
|
132 |
| - private final BrowseMediaItemsAdapter mBrowseMediaItemsAdapter = new BrowseMediaItemsAdapter(); |
133 |
| - private final BrowseMediaItemsAdapter mBrowseMediaItemsExtraSuggestedAdapter = new BrowseMediaItemsAdapter(); |
134 |
| - private final SearchMediaItemsAdapter mSearchMediaItemsAdapter = new SearchMediaItemsAdapter(); |
| 133 | + private BrowseMediaItemsAdapter mBrowseMediaItemsAdapter = new BrowseMediaItemsAdapter( |
| 134 | + new Supplier<MediaBrowserCompat>() { |
| 135 | + @Override |
| 136 | + public MediaBrowserCompat get() { |
| 137 | + return mBrowser; |
| 138 | + } |
| 139 | + }); |
| 140 | + @Nullable |
| 141 | + private BrowseMediaItemsAdapter mBrowseMediaItemsExtraSuggestedAdapter = new BrowseMediaItemsAdapter( |
| 142 | + new Supplier<MediaBrowserCompat>() { |
| 143 | + @Override |
| 144 | + public MediaBrowserCompat get() { |
| 145 | + return mBrowserExtraSuggested; |
| 146 | + } |
| 147 | + }); |
| 148 | + private final SearchMediaItemsAdapter mSearchMediaItemsAdapter = new SearchMediaItemsAdapter( |
| 149 | + new Supplier<MediaBrowserCompat>() { |
| 150 | + @Override |
| 151 | + public MediaBrowserCompat get() { |
| 152 | + return mBrowser; |
| 153 | + } |
| 154 | + }); |
135 | 155 |
|
136 | 156 | private ModeHelper mShuffleToggle;
|
137 | 157 | private ModeHelper mRepeatToggle;
|
@@ -1110,9 +1130,14 @@ protected void setMode(int mode) {
|
1110 | 1130 | private class BrowseMediaItemsAdapter extends
|
1111 | 1131 | RecyclerView.Adapter<BrowseMediaItemsAdapter.ViewHolder> {
|
1112 | 1132 |
|
| 1133 | + private final Supplier<MediaBrowserCompat> mBrowserSupplier; |
1113 | 1134 | private List<MediaBrowserCompat.MediaItem> mItems;
|
1114 | 1135 | private final Stack<String> mNodes = new Stack<>();
|
1115 | 1136 |
|
| 1137 | + public BrowseMediaItemsAdapter(Supplier<MediaBrowserCompat> browserSupplier) { |
| 1138 | + mBrowserSupplier = browserSupplier; |
| 1139 | + } |
| 1140 | + |
1116 | 1141 | MediaBrowserCompat.SubscriptionCallback callback =
|
1117 | 1142 | new MediaBrowserCompat.SubscriptionCallback() {
|
1118 | 1143 | @Override
|
@@ -1273,13 +1298,13 @@ public void run() {
|
1273 | 1298 |
|
1274 | 1299 | protected void subscribe() {
|
1275 | 1300 | if (mNodes.size() > 0) {
|
1276 |
| - mBrowser.subscribe(mNodes.peek(), callback); |
| 1301 | + mBrowserSupplier.get().subscribe(mNodes.peek(), callback); |
1277 | 1302 | }
|
1278 | 1303 | }
|
1279 | 1304 |
|
1280 | 1305 | protected void unsubscribe() {
|
1281 | 1306 | if (mNodes.size() > 0) {
|
1282 |
| - mBrowser.unsubscribe(mNodes.peek(), callback); |
| 1307 | + mBrowserSupplier.get().unsubscribe(mNodes.peek(), callback); |
1283 | 1308 | }
|
1284 | 1309 | updateItems(null);
|
1285 | 1310 | }
|
@@ -1322,6 +1347,10 @@ class ViewHolder extends RecyclerView.ViewHolder {
|
1322 | 1347 | */
|
1323 | 1348 | private class SearchMediaItemsAdapter extends BrowseMediaItemsAdapter {
|
1324 | 1349 |
|
| 1350 | + public SearchMediaItemsAdapter(Supplier<MediaBrowserCompat> browserSupplier) { |
| 1351 | + super(browserSupplier); |
| 1352 | + } |
| 1353 | + |
1325 | 1354 | @Override
|
1326 | 1355 | protected void subscribe() {
|
1327 | 1356 | if (treeDepth() == 1) {
|
|
0 commit comments