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);
        }
Example #2
0
        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);
		}
Example #5
0
        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);
        }