public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.Inflate(Resource.Layout.media_player, container, false); _browserAdapter = new BrowseAdapter(Activity); View controls = rootView.FindViewById(Resource.Id.media_player); controls.Visibility = ViewStates.Gone; var listView = rootView.FindViewById <ListView>(Resource.Id.list_view); listView.Adapter = _browserAdapter; listView.ItemClick += (sender, e) => { MediaBrowser.MediaItem item = _browserAdapter.GetItem(e.Position); var listener = (IMediaSelected)Activity; listener.OnMediaItemSelected(item); }; Bundle args = Arguments; _mediaId = args.GetString(ArgMediaId, null); _mediaBrowser = new MediaBrowser(Activity, new ComponentName(Activity, Java.Lang.Class.FromType(typeof(MusicService))), _connectionCallback, null); _subscriptionCallback.OnChildrenLoadedImpl = (parentId, children) => { _browserAdapter.Clear(); _browserAdapter.NotifyDataSetInvalidated(); foreach (MediaBrowser.MediaItem item in children) { _browserAdapter.Add(item); } _browserAdapter.NotifyDataSetChanged(); }; _subscriptionCallback.OnErrorImpl = (id) => Toast.MakeText(Activity, "Error Loading Media", ToastLength.Long).Show(); _connectionCallback.OnConnectedImpl = () => { Logger.Debug($"OnConnectedImpl: session token {_mediaBrowser.SessionToken}"); if (string.IsNullOrEmpty(_mediaId)) { _mediaId = _mediaBrowser.Root; } _mediaBrowser.Subscribe(_mediaId, _subscriptionCallback); if (_mediaBrowser.SessionToken == null) { throw new ArgumentNullException("No Session token"); } var mediaController = new Android.Media.Session.MediaController(Activity, _mediaBrowser.SessionToken); Activity.MediaController = mediaController; }; _connectionCallback.OnConnectionFailedImpl = () => Logger.Debug("OnConnectionFailedImpl"); _connectionCallback.OnConnectionSuspendedImpl = () => { Logger.Debug("OnConnectionSuspendedImpl"); Activity.MediaController = null; }; return(rootView); }
void LoadChildrenImpl(string parentId, Result result) { LogHelper.Debug(Tag, "OnLoadChildren: parentMediaId=", parentId); var mediaItems = new JavaList <MediaBrowser.MediaItem> (); if (MediaIDHelper.MediaIdRoot == parentId) { LogHelper.Debug(Tag, "OnLoadChildren.ROOT"); mediaItems.Add(new MediaBrowser.MediaItem( new MediaDescription.Builder() .SetMediaId(MediaIDHelper.MediaIdMusicsByGenre) .SetTitle(GetString(Resource.String.browse_genres)) .SetIconUri(Android.Net.Uri.Parse("android.resource://" + "com.example.android.mediabrowserservice/drawable/ic_by_genre")) .SetSubtitle(GetString(Resource.String.browse_genre_subtitle)) .Build(), MediaItemFlags.Browsable )); } else if (MediaIDHelper.MediaIdMusicsByGenre == parentId) { LogHelper.Debug(Tag, "OnLoadChildren.GENRES"); foreach (var genre in musicProvider.Genres) { var item = new MediaBrowser.MediaItem( new MediaDescription.Builder() .SetMediaId(MediaIDHelper.CreateBrowseCategoryMediaID(MediaIDHelper.MediaIdMusicsByGenre, genre)) .SetTitle(genre) .SetSubtitle(GetString(Resource.String.browse_musics_by_genre_subtitle, genre)) .Build(), MediaItemFlags.Browsable ); mediaItems.Add(item); } } else if (parentId.StartsWith(MediaIDHelper.MediaIdMusicsByGenre)) { var genre = MediaIDHelper.GetHierarchy(parentId) [1]; LogHelper.Debug(Tag, "OnLoadChildren.SONGS_BY_GENRE genre=", genre); foreach (var track in musicProvider.GetMusicsByGenre(genre)) { var hierarchyAwareMediaID = MediaIDHelper.CreateMediaID( track.Description.MediaId, MediaIDHelper.MediaIdMusicsByGenre, genre); var trackCopy = new MediaMetadata.Builder(track) .PutString(MediaMetadata.MetadataKeyMediaId, hierarchyAwareMediaID) .Build(); var bItem = new MediaBrowser.MediaItem( trackCopy.Description, MediaItemFlags.Playable); mediaItems.Add(bItem); } } else { LogHelper.Warn(Tag, "Skipping unmatched parentMediaId: ", parentId); } LogHelper.Debug(Tag, "OnLoadChildren sending ", mediaItems.Count, " results for ", parentId); result.SendResult(mediaItems); }
private void LoadChildrenImpl(string parentId, Result result) { var mediaItems = new JavaList <MediaBrowser.MediaItem>(); if (HierarchyHelper.PodcastRoot == parentId) { Logger.Debug("Load ROOT"); mediaItems.Add(new MediaBrowser.MediaItem( new MediaDescription.Builder() .SetMediaId(HierarchyHelper.PodcastsByMonth) .SetTitle("All Playlists") .SetIconUri(Android.Net.Uri.Parse("android.resource://com.henry.mypodcast/drawable/ic_by_genre")) .SetSubtitle("Bursts By Playlist") .Build(), MediaItemFlags.Browsable)); } else if (HierarchyHelper.PodcastsByMonth == parentId) { Logger.Debug("Load BYMONTH List"); foreach (var playlist in _musicProvider._playlists) { var item = new MediaBrowser.MediaItem( new MediaDescription.Builder() .SetMediaId(HierarchyHelper.PodcastsByMonth + HierarchyHelper.CategorySeparator + playlist.Id.ToString()) .SetTitle(playlist.Name) .SetSubtitle($"{playlist.Name} Bursts") .Build(), MediaItemFlags.Browsable); mediaItems.Add(item); } } else if (parentId.StartsWith(HierarchyHelper.PodcastsByMonth)) { var playlistId = int.Parse(HierarchyHelper.GetHierarchy(parentId)[1]); Logger.Debug("Load List of Podcasts for Month"); foreach (var track in _musicProvider.GetMusicsByPlaylist(playlistId)) { var hierarchyAwareMediaID = HierarchyHelper.EncodeMediaID( track.Description.MediaId, HierarchyHelper.PodcastsByMonth, playlistId.ToString()); var trackCopy = new MediaMetadata.Builder(track) .PutString(MediaMetadata.MetadataKeyMediaId, hierarchyAwareMediaID) .Build(); var bItem = new MediaBrowser.MediaItem( trackCopy.Description, MediaItemFlags.Playable); mediaItems.Add(bItem); } } result.SendResult(mediaItems); }
void LoadChildrenImpl (string parentId, Result result) { LogHelper.Debug (Tag, "OnLoadChildren: parentMediaId=", parentId); var mediaItems = new JavaList<MediaBrowser.MediaItem> (); if (MediaIDHelper.MediaIdRoot == parentId) { LogHelper.Debug (Tag, "OnLoadChildren.ROOT"); mediaItems.Add (new MediaBrowser.MediaItem ( new MediaDescription.Builder () .SetMediaId (MediaIDHelper.MediaIdMusicsByGenre) .SetTitle (GetString (Resource.String.browse_genres)) .SetIconUri (Android.Net.Uri.Parse ("android.resource://" + "com.example.android.mediabrowserservice/drawable/ic_by_genre")) .SetSubtitle (GetString (Resource.String.browse_genre_subtitle)) .Build (), MediaItemFlags.Browsable )); } else if (MediaIDHelper.MediaIdMusicsByGenre == parentId) { LogHelper.Debug (Tag, "OnLoadChildren.GENRES"); foreach (var genre in musicProvider.Genres) { var item = new MediaBrowser.MediaItem ( new MediaDescription.Builder () .SetMediaId (MediaIDHelper.CreateBrowseCategoryMediaID (MediaIDHelper.MediaIdMusicsByGenre, genre)) .SetTitle (genre) .SetSubtitle (GetString (Resource.String.browse_musics_by_genre_subtitle, genre)) .Build (), MediaItemFlags.Browsable ); mediaItems.Add (item); } } else if (parentId.StartsWith (MediaIDHelper.MediaIdMusicsByGenre)) { var genre = MediaIDHelper.GetHierarchy (parentId) [1]; LogHelper.Debug (Tag, "OnLoadChildren.SONGS_BY_GENRE genre=", genre); foreach (var track in musicProvider.GetMusicsByGenre(genre)) { var hierarchyAwareMediaID = MediaIDHelper.CreateMediaID ( track.Description.MediaId, MediaIDHelper.MediaIdMusicsByGenre, genre); var trackCopy = new MediaMetadata.Builder (track) .PutString (MediaMetadata.MetadataKeyMediaId, hierarchyAwareMediaID) .Build (); var bItem = new MediaBrowser.MediaItem ( trackCopy.Description, MediaItemFlags.Playable); mediaItems.Add (bItem); } } else { LogHelper.Warn (Tag, "Skipping unmatched parentMediaId: ", parentId); } LogHelper.Debug (Tag, "OnLoadChildren sending ", mediaItems.Count, " results for ", parentId); result.SendResult (mediaItems); }
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.Inflate(Resource.Layout.fragment_list, container, false); browserAdapter = new BrowseAdapter(Activity); View controls = rootView.FindViewById(Resource.Id.controls); controls.Visibility = ViewStates.Gone; var listView = rootView.FindViewById <ListView> (Resource.Id.list_view); listView.Adapter = browserAdapter; listView.ItemClick += (sender, e) => { MediaBrowser.MediaItem item = browserAdapter.GetItem(e.Position); try { var listener = (IFragmentDataHelper)Activity; listener.OnMediaItemSelected(item); } catch (InvalidCastException ex) { Log.Error(Tag, "Exception trying to cast to FragmentDataHelper", ex); } }; Bundle args = Arguments; mediaId = args.GetString(ArgMediaId, null); mediaBrowser = new MediaBrowser(Activity, new ComponentName(Activity, Java.Lang.Class.FromType(typeof(MusicService))), connectionCallback, null); subscriptionCallback.OnChildrenLoadedImpl = (parentId, children) => { browserAdapter.Clear(); browserAdapter.NotifyDataSetInvalidated(); foreach (MediaBrowser.MediaItem item in children) { browserAdapter.Add(item); } browserAdapter.NotifyDataSetChanged(); }; subscriptionCallback.OnErrorImpl = (id) => Toast.MakeText(Activity, "Error Loading Media", ToastLength.Long).Show(); connectionCallback.OnConnectedImpl = () => { LogHelper.Debug(Tag, "onConnected: session token " + mediaBrowser.SessionToken); if (mediaId == null) { mediaId = mediaBrowser.Root; } mediaBrowser.Subscribe(mediaId, subscriptionCallback); if (mediaBrowser.SessionToken == null) { throw new ArgumentNullException("No Session token"); } var mediaController = new Android.Media.Session.MediaController(Activity, mediaBrowser.SessionToken); Activity.MediaController = mediaController; }; connectionCallback.OnConnectionFailedImpl = () => LogHelper.Debug(Tag, "onConnectionFailed"); connectionCallback.OnConnectionSuspendedImpl = () => { LogHelper.Debug(Tag, "onConnectionSuspended"); Activity.MediaController = null; }; return(rootView); }