BrowseFragment.java revision 3ee2ea199ba4802754fb9108a45ef7c646c0eebb
1a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim/* 2a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim * Copyright (C) 2015 The Android Open Source Project 3a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim * 4a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim * Licensed under the Apache License, Version 2.0 (the "License"); 5a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim * you may not use this file except in compliance with the License. 6a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim * You may obtain a copy of the License at 7a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim * 8a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim * http://www.apache.org/licenses/LICENSE-2.0 9a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim * 10a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim * Unless required by applicable law or agreed to in writing, software 11a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim * distributed under the License is distributed on an "AS IS" BASIS, 12a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim * See the License for the specific language governing permissions and 14a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim * limitations under the License. 15a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim */ 16a907614755847b2630561a1e5949b2b416600d97Sungsoo Limpackage com.example.android.supportv4.media; 17a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim 18a907614755847b2630561a1e5949b2b416600d97Sungsoo Limimport android.app.Fragment; 19a907614755847b2630561a1e5949b2b416600d97Sungsoo Limimport android.content.ComponentName; 20a907614755847b2630561a1e5949b2b416600d97Sungsoo Limimport android.content.Context; 21a907614755847b2630561a1e5949b2b416600d97Sungsoo Limimport android.os.Bundle; 22a907614755847b2630561a1e5949b2b416600d97Sungsoo Limimport android.os.RemoteException; 23a907614755847b2630561a1e5949b2b416600d97Sungsoo Limimport android.support.v4.media.MediaBrowserCompat; 24a907614755847b2630561a1e5949b2b416600d97Sungsoo Limimport android.support.v4.media.session.MediaControllerCompat; 25a907614755847b2630561a1e5949b2b416600d97Sungsoo Limimport android.util.Log; 26a907614755847b2630561a1e5949b2b416600d97Sungsoo Limimport android.view.LayoutInflater; 27a907614755847b2630561a1e5949b2b416600d97Sungsoo Limimport android.view.View; 28a907614755847b2630561a1e5949b2b416600d97Sungsoo Limimport android.view.ViewGroup; 293ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moonimport android.widget.AbsListView; 30a907614755847b2630561a1e5949b2b416600d97Sungsoo Limimport android.widget.AdapterView; 31a907614755847b2630561a1e5949b2b416600d97Sungsoo Limimport android.widget.ArrayAdapter; 32a907614755847b2630561a1e5949b2b416600d97Sungsoo Limimport android.widget.ImageView; 33a907614755847b2630561a1e5949b2b416600d97Sungsoo Limimport android.widget.ListView; 34a907614755847b2630561a1e5949b2b416600d97Sungsoo Limimport android.widget.TextView; 35a907614755847b2630561a1e5949b2b416600d97Sungsoo Limimport android.widget.Toast; 36a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim 37a907614755847b2630561a1e5949b2b416600d97Sungsoo Limimport com.example.android.supportv4.R; 38a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim 39a907614755847b2630561a1e5949b2b416600d97Sungsoo Limimport java.util.ArrayList; 40a907614755847b2630561a1e5949b2b416600d97Sungsoo Limimport java.util.List; 41a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim 42a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim/** 43a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim * A Fragment that lists all the various browsable queues available 44a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim * from a {@link android.service.media.MediaBrowserService}. 45a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim * <p/> 46a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim * It uses a {@link MediaBrowserCompat} to connect to the {@link MediaBrowserServiceSupport}. 47a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim * Once connected, the fragment subscribes to get all the children. All 483ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon * {@link MediaBrowserCompat.MediaItem} objects that can be browsed are shown in a ListView. 49a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim */ 50a907614755847b2630561a1e5949b2b416600d97Sungsoo Limpublic class BrowseFragment extends Fragment { 51a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim 52a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim private static final String TAG = "BrowseFragment"; 53a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim 54a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim public static final String ARG_MEDIA_ID = "media_id"; 55a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim 563ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon // The number of media items per page. 573ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon private static final int PAGE_SIZE = 6; 583ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon 59a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim public static interface FragmentDataHelper { 60a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim void onMediaItemSelected(MediaBrowserCompat.MediaItem item); 61a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim } 62a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim 63a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim // The mediaId to be used for subscribing for children using the MediaBrowser. 64a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim private String mMediaId; 653ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon private final List<MediaBrowserCompat.MediaItem> mMediaItems = new ArrayList<>(); 66a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim 673ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon private boolean mCanLoadNewPage; 68a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim private MediaBrowserCompat mMediaBrowser; 69a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim private BrowseAdapter mBrowserAdapter; 70a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim 71a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim private MediaBrowserCompat.SubscriptionCallback mSubscriptionCallback = 72a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim new MediaBrowserCompat.SubscriptionCallback() { 733ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon @Override 743ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon public void onChildrenLoaded(String parentId, List<MediaBrowserCompat.MediaItem> children, 753ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon Bundle options) { 763ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon int page = options.getInt(MediaBrowserCompat.EXTRA_PAGE, -1); 773ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon int pageSize = options.getInt(MediaBrowserCompat.EXTRA_PAGE_SIZE, -1); 783ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon if (page < 0 || pageSize != PAGE_SIZE || children == null 793ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon || children.size() > PAGE_SIZE) { 803ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon return; 813ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon } 823ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon 833ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon int itemIndex = page * PAGE_SIZE; 843ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon if (itemIndex >= mMediaItems.size()) { 853ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon if (children.size() == 0) { 863ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon return; 873ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon } 883ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon // An additional page is loaded. 893ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon mMediaItems.addAll(children); 903ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon } else { 913ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon // An existing page is replaced by the newly loaded page. 923ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon for (MediaBrowserCompat.MediaItem item : children) { 933ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon if (itemIndex < mMediaItems.size()) { 943ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon mMediaItems.set(itemIndex, item); 953ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon } else { 963ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon mMediaItems.add(item); 973ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon } 983ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon itemIndex++; 993ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon } 1003ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon 1013ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon // If the newly loaded page contains less than {PAGE_SIZE} items, 1023ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon // then this page should be the last page. 1033ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon if (children.size() < PAGE_SIZE) { 1043ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon while (mMediaItems.size() > itemIndex) { 1053ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon mMediaItems.remove(mMediaItems.size() - 1); 1063ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon } 1073ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon } 1083ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon } 1093ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon mBrowserAdapter.notifyDataSetChanged(); 1103ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon mCanLoadNewPage = true; 1113ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon } 112a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim 113a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim @Override 114a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim public void onChildrenLoaded(String parentId, List<MediaBrowserCompat.MediaItem> children) { 1153ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon Log.d(TAG, "onChildrenLoaded: parentId=" + parentId); 1163ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon mMediaItems.clear(); 1173ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon mMediaItems.addAll(children); 118a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim mBrowserAdapter.notifyDataSetChanged(); 119a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim } 120a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim 121a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim @Override 122a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim public void onError(String id) { 123a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim Toast.makeText(getActivity(), R.string.error_loading_media, 124a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim Toast.LENGTH_LONG).show(); 125a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim } 126a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim }; 127a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim 128a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim private MediaBrowserCompat.ConnectionCallback mConnectionCallback = 129a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim new MediaBrowserCompat.ConnectionCallback() { 130a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim @Override 131a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim public void onConnected() { 132a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim Log.d(TAG, "onConnected: session token " + mMediaBrowser.getSessionToken()); 133a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim 134a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim if (mMediaBrowser.getSessionToken() == null) { 135a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim throw new IllegalArgumentException("No Session token"); 136a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim } 137a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim MediaControllerCompat mediaController = null; 138a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim try { 139a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim mediaController = new MediaControllerCompat(getActivity(), 140a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim mMediaBrowser.getSessionToken()); 141a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim } catch (RemoteException e) { 142a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim Log.e(TAG, "Failed to create MediaController.", e); 143a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim } 144a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim ((MediaBrowserSupport) getActivity()).setMediaController(mediaController); 1453ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon 1463ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon if (mMediaId == null) { 1473ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon mMediaId = mMediaBrowser.getRoot(); 1483ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon } 1493ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon 1503ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon if (mMediaItems.size() == 0) { 1513ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon loadPage(0); 1523ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon } 153a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim } 154a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim 155a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim @Override 156a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim public void onConnectionFailed() { 157a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim Log.d(TAG, "onConnectionFailed"); 158a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim } 159a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim 160a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim @Override 161a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim public void onConnectionSuspended() { 162a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim Log.d(TAG, "onConnectionSuspended"); 163a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim getActivity().setMediaController(null); 164a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim } 165a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim }; 166a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim 167a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim public static BrowseFragment newInstance(String mediaId) { 168a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim Bundle args = new Bundle(); 169a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim args.putString(ARG_MEDIA_ID, mediaId); 170a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim BrowseFragment fragment = new BrowseFragment(); 171a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim fragment.setArguments(args); 172a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim return fragment; 173a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim } 174a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim 175a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim @Override 176a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim public View onCreateView(LayoutInflater inflater, ViewGroup container, 1773ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon Bundle savedInstanceState) { 178a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim View rootView = inflater.inflate(R.layout.fragment_list, container, false); 179a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim 1803ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon mBrowserAdapter = new BrowseAdapter(getActivity(), mMediaItems); 181a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim 182a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim View controls = rootView.findViewById(R.id.controls); 183a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim controls.setVisibility(View.GONE); 184a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim 185a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim ListView listView = (ListView) rootView.findViewById(R.id.list_view); 186a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim listView.setAdapter(mBrowserAdapter); 187a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 188a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim @Override 189a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 190a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim MediaBrowserCompat.MediaItem item = mBrowserAdapter.getItem(position); 191a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim try { 192a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim FragmentDataHelper listener = (FragmentDataHelper) getActivity(); 193a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim listener.onMediaItemSelected(item); 194a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim } catch (ClassCastException ex) { 195a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim Log.e(TAG, "Exception trying to cast to FragmentDataHelper", ex); 196a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim } 197a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim } 198a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim }); 199a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim 200a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim Bundle args = getArguments(); 201a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim mMediaId = args.getString(ARG_MEDIA_ID, null); 202a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim 203a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim mMediaBrowser = new MediaBrowserCompat(getActivity(), 204a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim new ComponentName(getActivity(), MediaBrowserServiceSupport.class), 205a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim mConnectionCallback, null); 206a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim 2073ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon listView.setOnScrollListener(new AbsListView.OnScrollListener() { 2083ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon @Override 2093ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, 2103ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon int totalItemCount) { 2113ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon if (mCanLoadNewPage && firstVisibleItem + visibleItemCount == totalItemCount) { 2123ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon mCanLoadNewPage = false; 2133ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon loadPage((mMediaItems.size() + PAGE_SIZE - 1) / PAGE_SIZE); 2143ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon } 2153ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon } 2163ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon 2173ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon @Override 2183ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon public void onScrollStateChanged(AbsListView view, int scrollState) { 2193ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon // Do nothing 2203ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon } 2213ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon }); 2223ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon 223a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim return rootView; 224a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim } 225a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim 226a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim @Override 227a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim public void onStart() { 228a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim super.onStart(); 229a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim mMediaBrowser.connect(); 230a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim } 231a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim 232a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim @Override 233a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim public void onStop() { 234a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim super.onStop(); 235a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim mMediaBrowser.disconnect(); 236a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim } 237a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim 2383ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon private void loadPage(int page) { 2393ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon Bundle options = new Bundle(); 2403ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon options.putInt(MediaBrowserCompat.EXTRA_PAGE, page); 2413ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon options.putInt(MediaBrowserCompat.EXTRA_PAGE_SIZE, PAGE_SIZE); 2423ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon mMediaBrowser.subscribe(mMediaId, options, mSubscriptionCallback); 2433ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon } 2443ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon 2453ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon // An adapter for showing the list of browsed MediaItem objects 246a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim private static class BrowseAdapter extends ArrayAdapter<MediaBrowserCompat.MediaItem> { 247a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim 2483ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon public BrowseAdapter(Context context, List<MediaBrowserCompat.MediaItem> mediaItems) { 2493ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon super(context, R.layout.media_list_item, mediaItems); 250a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim } 251a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim 252a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim static class ViewHolder { 253a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim ImageView mImageView; 254a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim TextView mTitleView; 255a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim TextView mDescriptionView; 256a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim } 257a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim 258a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim @Override 259a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim public View getView(int position, View convertView, ViewGroup parent) { 260a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim 261a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim ViewHolder holder; 262a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim 263a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim if (convertView == null) { 264a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim convertView = LayoutInflater.from(getContext()) 265a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim .inflate(R.layout.media_list_item, parent, false); 266a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim holder = new ViewHolder(); 267a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim holder.mImageView = (ImageView) convertView.findViewById(R.id.play_eq); 268a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim holder.mImageView.setVisibility(View.GONE); 269a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim holder.mTitleView = (TextView) convertView.findViewById(R.id.title); 270a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim holder.mDescriptionView = (TextView) convertView.findViewById(R.id.description); 271a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim convertView.setTag(holder); 272a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim } else { 273a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim holder = (ViewHolder) convertView.getTag(); 274a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim } 275a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim 276a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim MediaBrowserCompat.MediaItem item = getItem(position); 277a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim holder.mTitleView.setText(item.getDescription().getTitle()); 278a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim holder.mDescriptionView.setText(item.getDescription().getDescription()); 279a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim if (item.isPlayable()) { 280a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim holder.mImageView.setImageDrawable(getContext().getResources() 281a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim .getDrawable(R.drawable.ic_play_arrow_white_24dp)); 282a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim holder.mImageView.setVisibility(View.VISIBLE); 2833ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon } else { 2843ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon holder.mImageView.setVisibility(View.GONE); 285a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim } 286a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim return convertView; 287a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim } 288a907614755847b2630561a1e5949b2b416600d97Sungsoo Lim } 2893ee2ea199ba4802754fb9108a45ef7c646c0eebbHyundo Moon}