static Object newInstance(List<MediaItem> itemList) { ReflectiveOperationException e; Object result = null; try { result = sConstructor.newInstance(new Object[]{itemList}); } catch (InstantiationException e2) { e = e2; e.printStackTrace(); return result; } catch (IllegalAccessException e3) { e = e3; e.printStackTrace(); return result; } catch (InvocationTargetException e4) { e = e4; e.printStackTrace(); return result; } return result; }
@Override public void onLoadChildren(@NonNull final String parentMediaId, @NonNull final Result<List<MediaItem>> result) { result.detach(); switch (parentMediaId) { case BROWSER_ROOT: onLoadRoot(result); break; case DOWNLOADS_ROOT: onLoadDownloads(result); break; case PLAYLIST_ROOT: onLoadPlaylist(result); break; default: onLoadPodcast(result, parentMediaId); break; } }
private void onLoadDownloads(final Result<List<MediaItem>> result) { this.currentTask = new PodcastBrowserAsyncTask() { @Override protected Void doInBackground(Void... params) { // Build list of downloaded episodes final List<Episode> downloads = episodeManager.getDownloads(); for (Episode download : downloads) items.add(episodeToMediaItem(download)); return null; } @Override protected void onPostExecute(Void aVoid) { result.sendResult(items); } }; currentTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); }
private void onLoadPlaylist(final Result<List<MediaItem>> result) { this.currentTask = new PodcastBrowserAsyncTask() { @Override protected Void doInBackground(Void... params) { // Build list of episodes in playlist final List<Episode> playlist = episodeManager.getPlaylist(); for (Episode episode : playlist) items.add(episodeToMediaItem(episode)); return null; } @Override protected void onPostExecute(Void aVoid) { result.sendResult(items); } }; currentTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); }
@Override public void onLoadChildren(@NonNull final String parentMediaId, @NonNull final Result<List<MediaItem>> result) { result.detach(); switch (parentMediaId) { case BROWSER_ROOT: onLoadRoot(result); break; case DOWNLOADS_ROOT: onLoadDownloads(result); break; default: onLoadPodcast(result, parentMediaId); break; } }
public void getMediaItem(String mediaId, final ResultReceiver receiver) { ReflectiveOperationException e; try { final String KEY_MEDIA_ITEM = (String) MediaBrowserService.class.getDeclaredField("KEY_MEDIA_ITEM").get(null); this.mServiceImpl.getMediaItem(mediaId, new ItemCallback() { public void onItemLoaded(int resultCode, Bundle resultData, Parcel itemParcel) { if (itemParcel != null) { itemParcel.setDataPosition(0); resultData.putParcelable(KEY_MEDIA_ITEM, (MediaItem) MediaItem.CREATOR.createFromParcel(itemParcel)); itemParcel.recycle(); } receiver.send(resultCode, resultData); } }); } catch (IllegalAccessException e2) { e = e2; Log.i(MediaBrowserServiceCompatApi23.TAG, "Failed to get KEY_MEDIA_ITEM via reflection", e); } catch (NoSuchFieldException e3) { e = e3; Log.i(MediaBrowserServiceCompatApi23.TAG, "Failed to get KEY_MEDIA_ITEM via reflection", e); } }
@Override public void onLoadChildren(@NonNull final String parentMediaId, @NonNull final Result<List<MediaItem>> result) { if (!mMusicProvider.isInitialized()) { // Use result.detach to allow calling result.sendResult from another thread: result.detach(); mMusicProvider.retrieveMediaAsync(new MusicProvider.Callback() { @Override public void onMusicCatalogReady(boolean success) { if (success) { loadChildrenImpl(parentMediaId, result); } else { updatePlaybackState(getString(R.string.error_no_metadata)); result.sendResult(Collections.<MediaItem>emptyList()); } } }); } else { // If our music catalog is already loaded/cached, load them into result immediately loadChildrenImpl(parentMediaId, result); } }
@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()); }
@Override public void onItemClicked(Presenter.ViewHolder itemViewHolder, Object item, RowPresenter.ViewHolder rowViewHolder, Row row) { getActivity().getMediaController().getTransportControls() .playFromMediaId(((MediaItem) item).getMediaId(), null); Intent intent = new Intent(getActivity(), TvPlaybackActivity.class); Bundle bundle = ActivityOptionsCompat.makeSceneTransitionAnimation( getActivity(), ((ImageCardView) itemViewHolder.view).getMainImageView(), TvVerticalGridActivity.SHARED_ELEMENT_NAME).toBundle(); getActivity().startActivity(intent, bundle); }
@Override public void onChildrenLoaded(@NonNull String parentId, @NonNull List<MediaItem> children) { mAdapter.clear(); for (int i = 0; i < children.size(); i++) { MediaItem item = children.get(i); if (!item.isPlayable()) { LogHelper.e(TAG, "Cannot show non-playable items. Ignoring ", item.getMediaId()); } else { mAdapter.add(item); } } mAdapter.notifyArrayItemRangeChanged(0, children.size()); }
@Override public void onLoadChildren(final String parentMediaId, final Result<List<MediaItem>> result) { if (!mMusicProvider.isInitialized()) { // Use result.detach to allow calling result.sendResult from another thread: result.detach(); mMusicProvider.retrieveMediaAsync(new MusicProvider.Callback() { @Override public void onMusicCatalogReady(boolean success) { if (success) { loadChildrenImpl(parentMediaId, result); } else { updatePlaybackState(getString(R.string.error_no_metadata)); result.sendResult(Collections.<MediaItem>emptyList()); } } }); } else { // If our music catalog is already loaded/cached, load them into result immediately loadChildrenImpl(parentMediaId, result); } }
private MediaItem episodeToMediaItem(Episode episode) { final Podcast podcast = episode.getPodcast(); final MediaDescription.Builder mediaDescription = new MediaDescription.Builder() .setMediaId(episode.getMediaUrl()) .setTitle(episode.getName()) .setSubtitle(podcast.getName()); if (podcast.hasLogoUrl()) mediaDescription.setIconUri(Uri.parse(podcast.getLogoUrl())); return new MediaItem(mediaDescription.build(), MediaItem.FLAG_PLAYABLE); }
public void onItemLoaded(MediaItem item) { Parcel parcel = Parcel.obtain(); item.writeToParcel(parcel, 0); this.mItemCallback.onItemLoaded(parcel); }
@Override public void onLoadChildren(final String parentMediaId, final Result<List<MediaItem>> result) { result.sendResult(LocalMusicSource.getMediaItems()); }
@Override public void onLoadChildren(final String parentMediaId, final Result<List<MediaItem>> result) { result.sendResult(new ArrayList<MediaItem>()); }
@Override public void onLoadChildren(final String parentMediaId, final Result<List<MediaItem>> result) { Log.d (TAG, "onLoadChildren()" ) ; result.sendResult(LocalMusicSource.getMediaItems()); }
@Override public void onLoadChildren(final String parentMediaId, final Result<List<MediaItem>> result) { result.sendResult(MusicLibrary.getMediaItems()); }
private void onLoadRoot(final Result<List<MediaItem>> result) { this.currentTask = new PodcastBrowserAsyncTask() { @Override protected Void doInBackground(Void... params) { try { episodeManager.blockUntilEpisodeMetadataIsLoaded(); } catch (InterruptedException e) { cancel(true); } // Add Downloads entry if (episodeManager.getDownloadsSize() > 0) items.add(new MediaItem(new MediaDescription.Builder() .setMediaId(DOWNLOADS_ROOT) .setTitle(getString(R.string.downloads)) .setSubtitle(getResources().getQuantityString(R.plurals.episodes, episodeManager.getDownloadsSize(), episodeManager.getDownloadsSize())) .build(), MediaItem.FLAG_BROWSABLE)); // Add Playlist entry if (episodeManager.getPlaylistSize() > 0) items.add(new MediaItem(new MediaDescription.Builder() .setMediaId(PLAYLIST_ROOT) .setTitle(getString(R.string.playlist)) .setSubtitle(getResources().getQuantityString(R.plurals.episodes, episodeManager.getPlaylistSize(), episodeManager.getPlaylistSize())) .build(), MediaItem.FLAG_BROWSABLE)); // Build list of podcasts final List<Podcast> podcasts = podcastManager.getPodcastList(); for (Podcast podcast : podcasts) { final int episodeCount = podcast.getEpisodeCount(); final MediaDescription.Builder mediaDescription = new MediaDescription.Builder() .setMediaId(podcast.getUrl()) .setTitle(podcast.getName()) .setSubtitle(episodeCount > 0 ? getResources() .getQuantityString(R.plurals.episodes, episodeCount, episodeCount) : null); if (podcast.hasLogoUrl()) mediaDescription.setIconUri(Uri.parse(podcast.getLogoUrl())); items.add(new MediaItem(mediaDescription.build(), MediaItem.FLAG_BROWSABLE)); } return null; } @Override protected void onPostExecute(Void aVoid) { result.sendResult(items); } }; currentTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); }
private void onLoadPodcast(final Result<List<MediaItem>> result, final String podcastUrl) { this.currentTask = new PodcastBrowserAsyncTask() { /** * Thread sync latch used to wait for podcast loading */ private CountDownLatch latch = new CountDownLatch(1); /** * The feed URL we are currently waiting for. Needs to * be a member because we have to update it onPodcastMoved() */ private String loadingPodcastUrl = podcastUrl; private OnLoadPodcastListener listener = new OnLoadPodcastListener() { @Override public void onPodcastLoadProgress(Podcast podcast, Progress progress) { // pass } @Override public void onPodcastMoved(Podcast podcast, String newUrl) { if (podcast.equalByUrl(loadingPodcastUrl)) loadingPodcastUrl = newUrl; } @Override public void onPodcastLoaded(Podcast podcast) { // Make sure we got the right podcast if (podcast.equalByUrl(loadingPodcastUrl)) { if (podcast.getEpisodeCount() > 0) { // Limit episode list to a low item number final List<Episode> episodes = podcast.getEpisodes().subList(0, podcast.getEpisodeCount() < EPISODE_LIST_LIMIT ? podcast.getEpisodeCount() : EPISODE_LIST_LIMIT); for (Episode episode : episodes) items.add(episodeToMediaItem(episode)); } // Items ready, let task send results latch.countDown(); } } @Override public void onPodcastLoadFailed(Podcast podcast, LoadPodcastTask.PodcastLoadError code) { if (podcast.equalByUrl(loadingPodcastUrl)) latch.countDown(); } }; @Override protected void onPreExecute() { // Needs to run on UI thread podcastManager.addLoadPodcastListener(listener); podcastManager.load(podcastManager.findPodcastForUrl(loadingPodcastUrl)); } @Override protected Void doInBackground(Void... params) { try { latch.await(); } catch (InterruptedException e) { cancel(true); } return null; } @Override protected void onPostExecute(Void aVoid) { podcastManager.removeLoadPodcastListener(listener); result.sendResult(items); } }; currentTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); }
private void onLoadRoot(final Result<List<MediaItem>> result) { this.currentTask = new PodcastBrowserAsyncTask() { @Override protected Void doInBackground(Void... params) { try { episodeManager.blockUntilEpisodeMetadataIsLoaded(); } catch (InterruptedException e) { cancel(true); } // Add Downloads entry if (episodeManager.getDownloadsSize() > 0) items.add(new MediaItem(new MediaDescription.Builder() .setMediaId(DOWNLOADS_ROOT) .setTitle(getString(R.string.downloads)) .setSubtitle(getResources().getQuantityString(R.plurals.episodes, episodeManager.getDownloadsSize(), episodeManager.getDownloadsSize())) .build(), MediaItem.FLAG_BROWSABLE)); // Build list of podcasts final List<Podcast> podcasts = podcastManager.getPodcastList(); for (Podcast podcast : podcasts) { final int episodeCount = podcast.getEpisodeCount(); final MediaDescription.Builder mediaDescription = new MediaDescription.Builder() .setMediaId(podcast.getUrl()) .setTitle(podcast.getName()) .setSubtitle(episodeCount > 0 ? getResources() .getQuantityString(R.plurals.episodes, episodeCount, episodeCount) : null); if (podcast.hasLogoUrl()) mediaDescription.setIconUri(Uri.parse(podcast.getLogoUrl())); items.add(new MediaItem(mediaDescription.build(), MediaItem.FLAG_BROWSABLE)); } return null; } @Override protected void onPostExecute(Void aVoid) { result.sendResult(items); } }; currentTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); }