protected void setMediaId(String mediaId) { LogHelper.d(TAG, "setMediaId: ", mediaId); if (TextUtils.equals(mMediaId, mediaId)) { return; } MediaBrowser mediaBrowser = mMediaFragmentListener.getMediaBrowser(); // First, unsubscribe from old mediaId: if (mMediaId != null) { mediaBrowser.unsubscribe(mMediaId); } if (mediaId == null) { mediaId = mediaBrowser.getRoot(); } mMediaId = mediaId; mediaBrowser.subscribe(mMediaId, mSubscriptionCallback); }
@Override public void onChildrenLoaded(@NonNull String parentId, @NonNull List<MediaBrowser.MediaItem> children) { try { LogHelper.d(TAG, "fragment onChildrenLoaded, parentId=" + parentId + " count=" + children.size()); checkForUserVisibleErrors(children.isEmpty()); mBrowserAdapter.clear(); for (MediaBrowser.MediaItem item : children) { mBrowserAdapter.add(item); } mBrowserAdapter.notifyDataSetChanged(); } catch (Throwable t) { LogHelper.e(TAG, "Error on childrenloaded", t); } }
@Override public void onStart() { super.onStart(); // fetch browsing information to fill the listview: MediaBrowser mediaBrowser = mMediaFragmentListener.getMediaBrowser(); LogHelper.d(TAG, "fragment.onStart, mediaId=", mMediaId, " onConnected=" + mediaBrowser.isConnected()); if (mediaBrowser.isConnected()) { onConnected(); } // Registers BroadcastReceiver to track network connection changes. this.getActivity().registerReceiver(mConnectivityChangeReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); }
@Override public View getView(int position, View convertView, ViewGroup parent) { MediaBrowser.MediaItem item = getItem(position); int itemState = MediaItemViewHolder.STATE_NONE; if (item.isPlayable()) { itemState = MediaItemViewHolder.STATE_PLAYABLE; MediaController controller = ((Activity) getContext()).getMediaController(); if (controller != null && controller.getMetadata() != null) { String currentPlaying = controller.getMetadata().getDescription().getMediaId(); String musicId = MediaIDHelper.extractMusicIDFromMediaID( item.getDescription().getMediaId()); if (currentPlaying != null && currentPlaying.equals(musicId)) { PlaybackState pbState = controller.getPlaybackState(); if (pbState == null || pbState.getState() == PlaybackState.STATE_ERROR) { itemState = MediaItemViewHolder.STATE_NONE; } else if (pbState.getState() == PlaybackState.STATE_PLAYING) { itemState = MediaItemViewHolder.STATE_PLAYING; } else { itemState = MediaItemViewHolder.STATE_PAUSED; } } } } return MediaItemViewHolder.setupView((Activity) getContext(), convertView, parent, item.getDescription(), itemState); }
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LogHelper.d(TAG, "Activity onCreate"); // Since our app icon has the same color as colorPrimary, our entry in the Recent Apps // list gets weird. We need to change either the icon or the color of the TaskDescription. ActivityManager.TaskDescription taskDesc = new ActivityManager.TaskDescription( getTitle().toString(), BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher_white), ResourceHelper.getThemeColor(this, R.attr.colorPrimary, android.R.color.darker_gray)); setTaskDescription(taskDesc); // Connect a media browser just to get the media session token. There are other ways // this can be done, for example by sharing the session token directly. mMediaBrowser = new MediaBrowser(this, new ComponentName(this, MusicService.class), mConnectionCallback, null); }
@Override public View getView(int position, View convertView, ViewGroup parent) { MediaBrowser.MediaItem item = getItem(position); int itemState = MediaItemViewHolder.STATE_NONE; if (item.isPlayable()) { String itemMediaId = item.getDescription().getMediaId(); int playbackState = PlaybackState.STATE_NONE; if (mCurrentState != null) { playbackState = mCurrentState.getState(); } if (mCurrentMetadata != null && itemMediaId.equals(mCurrentMetadata.getDescription().getMediaId())) { if (playbackState == PlaybackState.STATE_PLAYING || playbackState == PlaybackState.STATE_BUFFERING) { itemState = MediaItemViewHolder.STATE_PLAYING; } else if (playbackState != PlaybackState.STATE_ERROR) { itemState = MediaItemViewHolder.STATE_PAUSED; } } } return MediaItemViewHolder.setupView((Activity) getContext(), convertView, parent, item.getDescription(), itemState); }
@Override public View getView(int position, View convertView, ViewGroup parent) { MediaBrowser.MediaItem item = getItem(position); int state = MediaItemViewHolder.STATE_NONE; if (item.isPlayable()) { state = MediaItemViewHolder.STATE_PLAYABLE; MediaController controller = ((Activity) getContext()).getMediaController(); if (controller != null && controller.getMetadata() != null) { String currentPlaying = controller.getMetadata().getDescription().getMediaId(); String musicId = MediaIDHelper.extractMusicIDFromMediaID( item.getDescription().getMediaId()); if (currentPlaying != null && currentPlaying.equals(musicId)) { if (controller.getPlaybackState().getState() == PlaybackState.STATE_PLAYING) { state = MediaItemViewHolder.STATE_PLAYING; } else if (controller.getPlaybackState().getState() != PlaybackState.STATE_ERROR) { state = MediaItemViewHolder.STATE_PAUSED; } } } } return MediaItemViewHolder.setupView((Activity) getContext(), convertView, parent, item.getDescription(), state); }
private void getAlbumLists(Result<List<MediaBrowser.MediaItem>> result) { List<Integer> albums = new ArrayList<>(); albums.add(R.string.main_albums_newest); albums.add(R.string.main_albums_random); if(!Util.isTagBrowsing(downloadService)) { albums.add(R.string.main_albums_highest); } albums.add(R.string.main_albums_starred); albums.add(R.string.main_albums_recent); albums.add(R.string.main_albums_frequent); List<MediaBrowser.MediaItem> mediaItems = new ArrayList<>(); for(Integer id: albums) { MediaDescription description = new MediaDescription.Builder() .setTitle(downloadService.getResources().getString(id)) .setMediaId(ALBUM_TYPE_PREFIX + id) .build(); mediaItems.add(new MediaBrowser.MediaItem(description, MediaBrowser.MediaItem.FLAG_BROWSABLE)); } result.sendResult(mediaItems); }
private void getLibrary(final Result<List<MediaBrowser.MediaItem>> result) { new SilentServiceTask<List<MusicFolder>>(downloadService) { @Override protected List<MusicFolder> doInBackground(MusicService musicService) throws Throwable { return musicService.getMusicFolders(false, downloadService, null); } @Override protected void done(List<MusicFolder> folders) { List<MediaBrowser.MediaItem> mediaItems = new ArrayList<>(); for(MusicFolder folder: folders) { MediaDescription description = new MediaDescription.Builder() .setTitle(folder.getName()) .setMediaId(MUSIC_FOLDER_PREFIX + folder.getId()) .build(); mediaItems.add(new MediaBrowser.MediaItem(description, MediaBrowser.MediaItem.FLAG_BROWSABLE)); } result.sendResult(mediaItems); } }.execute(); result.detach(); }
private void getPlaylists(final Result<List<MediaBrowser.MediaItem>> result) { new SilentServiceTask<List<Playlist>>(downloadService) { @Override protected List<Playlist> doInBackground(MusicService musicService) throws Throwable { return musicService.getPlaylists(false, downloadService, null); } @Override protected void done(List<Playlist> playlists) { List<MediaBrowser.MediaItem> mediaItems = new ArrayList<>(); for(Playlist playlist: playlists) { MediaDescription description = new MediaDescription.Builder() .setTitle(playlist.getName()) .setMediaId(PLAYLIST_PREFIX + playlist.getId()) .build(); mediaItems.add(new MediaBrowser.MediaItem(description, MediaBrowser.MediaItem.FLAG_BROWSABLE)); } result.sendResult(mediaItems); } }.execute(); result.detach(); }
private void getPodcasts(final Result<List<MediaBrowser.MediaItem>> result) { new SilentServiceTask<List<PodcastChannel>>(downloadService) { @Override protected List<PodcastChannel> doInBackground(MusicService musicService) throws Throwable { return musicService.getPodcastChannels(false, downloadService, null); } @Override protected void done(List<PodcastChannel> podcasts) { List<MediaBrowser.MediaItem> mediaItems = new ArrayList<>(); for(PodcastChannel podcast: podcasts) { MediaDescription description = new MediaDescription.Builder() .setTitle(podcast.getName()) .setMediaId(PODCAST_PREFIX + podcast.getId()) .build(); mediaItems.add(new MediaBrowser.MediaItem(description, MediaBrowser.MediaItem.FLAG_BROWSABLE)); } result.sendResult(mediaItems); } }.execute(); result.detach(); }
private MediaBrowser.MediaItem generatePlayableMediaItem( Song song ) { if( song == null ) return null; MediaDescription.Builder mediaDescriptionBuilder = new MediaDescription.Builder(); mediaDescriptionBuilder.setMediaId( song.getuId() ); if( !TextUtils.isEmpty( song.getTitle() ) ) mediaDescriptionBuilder.setTitle( song.getTitle() ); if( !TextUtils.isEmpty( song.getArtist() ) ) mediaDescriptionBuilder.setSubtitle( song.getArtist() ); if( !TextUtils.isEmpty( song.getThumbnailUrl() ) ) mediaDescriptionBuilder.setIconUri( Uri.parse( song.getThumbnailUrl() ) ); return new MediaBrowser.MediaItem( mediaDescriptionBuilder.build(), MediaBrowser.MediaItem.FLAG_PLAYABLE ); }
private void fillMediaItems(List<MediaBrowser.MediaItem> mediaItems, String mediaId, String title, Uri icon, String subTitle, int playableOrBrowsable) { mediaItems.add(new MediaBrowser.MediaItem( new MediaDescription.Builder() .setMediaId(mediaId) .setTitle(title) .setIconUri(icon) .setSubtitle(subTitle) .build(), playableOrBrowsable )); }
/** * * @return */ public static List<MediaBrowser.MediaItem> getMediaItems() { List<MediaBrowser.MediaItem> retVal = new ArrayList<MediaBrowser.MediaItem>() ; MediaBrowser.MediaItem newMediaItem = null ; for (MediaMetadata aMetadata: musicCollectionMap.values()) { newMediaItem = new MediaBrowser.MediaItem( aMetadata.getDescription(), MediaBrowser.MediaItem.FLAG_PLAYABLE) ; retVal.add( newMediaItem) ; } return retVal ; }
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.tv_vertical_grid); mMediaId = getIntent().getStringExtra(TvBrowseActivity.SAVED_MEDIA_ID); mTitle = getIntent().getStringExtra(TvBrowseActivity.BROWSE_TITLE); getWindow().setBackgroundDrawableResource(R.drawable.bg); mMediaBrowser = new MediaBrowser(this, new ComponentName(this, MusicService.class), mConnectionCallback, null); }
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LogHelper.d(TAG, "Activity onCreate"); setContentView(R.layout.tv_activity_player); mMediaBrowser = new MediaBrowser(this, new ComponentName(this, MusicService.class), mConnectionCallback, null); }
@Override public void onChildrenLoaded(@NonNull String parentId, @NonNull List<MediaBrowser.MediaItem> children) { mListRowAdapter.clear(); for (MediaBrowser.MediaItem item : children) { mListRowAdapter.add(item); } mListRowAdapter.notifyArrayItemRangeChanged(0, children.size()); }
private void subscribeToMediaId(String mediaId, MediaBrowser.SubscriptionCallback callback) { if (mSubscribedMediaIds.contains(mediaId)) { mMediaBrowser.unsubscribe(mediaId); } else { mSubscribedMediaIds.add(mediaId); } mMediaBrowser.subscribe(mediaId, callback); }
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LogHelper.d(TAG, "Activity onCreate"); mMediaBrowser = new MediaBrowser(this, new ComponentName(this, MusicService.class), mConnectionCallback, null); setContentView(R.layout.tv_playback_controls); mPlaybackFragment = (TvPlaybackFragment) getFragmentManager() .findFragmentById(R.id.playback_controls_fragment); }
@Override public void onStop() { super.onStop(); MediaBrowser mediaBrowser = mMediaFragmentListener.getMediaBrowser(); if (mediaBrowser != null && mediaBrowser.isConnected() && mMediaId != null) { mediaBrowser.unsubscribe(mMediaId); } }
@Override public void onMediaItemSelected(MediaBrowser.MediaItem item) { LogHelper.d(TAG, "onMediaItemSelected, mediaId=" + item.getMediaId()); if (item.isPlayable()) { getMediaController().getTransportControls().playFromMediaId(item.getMediaId(), null); } else if (item.isBrowsable()) { navigateToBrowser(item.getMediaId()); } else { LogHelper.w(TAG, "Ignoring MediaItem that is neither browsable nor playable: ", "mediaId=", item.getMediaId()); } }
@Override public void onStop() { super.onStop(); MediaBrowser mediaBrowser = mMediaFragmentListener.getMediaBrowser(); if (mediaBrowser != null && mediaBrowser.isConnected() && mMediaId != null) { mediaBrowser.unsubscribe(mMediaId); } if (getActivity().getMediaController() != null) { getActivity().getMediaController().unregisterCallback(mMediaControllerCallback); } this.getActivity().unregisterReceiver(mConnectivityChangeReceiver); }
public static List<MediaBrowser.MediaItem> getMediaItems() { List<MediaBrowser.MediaItem> result = new ArrayList<>(); for (MediaMetadata metadata: music.values()) { result.add(new MediaBrowser.MediaItem(metadata.getDescription(), MediaBrowser.MediaItem.FLAG_PLAYABLE)); } return result; }
private void onMediaItemSelected(MediaBrowser.MediaItem item) { if (item.isPlayable()) { // ------------ CHANGE 2 - REMOVE FOLLOWING LINES FOR PLAYBACK ON A SERVICE MediaMetadata metadata = MusicLibrary.getMetadata(this, item.getMediaId()); mPlaybackManager.play(metadata); updateMetadata(metadata); /* ------------ CHANGE 2 - UNCOMMENT FOLLOWING LINES FOR PLAYBACK ON A SERVICE getMediaController().getTransportControls().playFromMediaId(item.getMediaId(), null); // ------------ CHANGE 2 - END OF PLAYBACK ON A SERVICE SNIPPET */ } }