public override void OnBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) { if (position == 0 && ((UseChannel && channels == null) || (!UseChannel && playlists == null))) { EmptyHolder holder = (EmptyHolder)viewHolder; holder.text.Text = MainActivity.instance.GetString(Resource.String.long_loading); holder.text.SetHeight(MainActivity.instance.DpToPx(157)); } else { SongHolder holder = (SongHolder)viewHolder; if (UseChannel) { holder.Title.Text = channels[position].Name; Picasso.With(Application.Context).Load(channels[position].ImageURL).Placeholder(Resource.Color.background_material_dark).Transform(new CircleTransformation()).Into(holder.AlbumArt); holder.ItemView.SetPadding(4, 1, 4, 1); } else { holder.Title.Text = playlists[position].Name; Picasso.With(Application.Context).Load(playlists[position].ImageURL).Placeholder(Resource.Color.background_material_dark).Transform(new RemoveBlackBorder(true)).Into(holder.AlbumArt); if (!holder.RightButtons.FindViewById <ImageButton>(Resource.Id.play).HasOnClickListeners) { holder.RightButtons.FindViewById <ImageButton>(Resource.Id.play).Click += (sender, e) => { PlaylistManager.PlayInOrder(playlists[position]); }; holder.RightButtons.FindViewById <ImageButton>(Resource.Id.shuffle).Click += (sender, e) => { PlaylistManager.Shuffle(playlists[position]); }; } } } }
public override void OnBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) { //Headers if (position == 0) { HeaderHolder holder = (HeaderHolder)viewHolder; holder.headerText.Text = MainActivity.instance.Resources.GetString(Resource.String.local_playlists); } else if (position - LocalPlaylists.Count == 0) { HeaderHolder holder = (HeaderHolder)viewHolder; holder.headerText.Text = MainActivity.instance.Resources.GetString(Resource.String.youtube_playlists); } //Empty views else if (position == 1 && LocalPlaylists[1].Name == "EMPTY") { EmptyHolder holder = (EmptyHolder)viewHolder; holder.text.Text = LocalPlaylists[1].Owner; } else if (position - LocalPlaylists.Count == 1 && YoutubePlaylists[1].Name == "EMPTY") { EmptyHolder holder = (EmptyHolder)viewHolder; holder.text.Text = YoutubePlaylists[1].Owner; } //End button else if (position == LocalPlaylists.Count + YoutubePlaylists.Count) { UslessHolder holder = (UslessHolder)viewHolder; holder.ItemView.FindViewById <ImageView>(Resource.Id.icon).SetImageResource(Resource.Drawable.PlaylistAdd); holder.ItemView.FindViewById <TextView>(Resource.Id.text).Text = MainActivity.instance.GetString(Resource.String.add_playlist); float scale = MainActivity.instance.Resources.DisplayMetrics.Density; if (position + 1 == YoutubePlaylists.Count + LocalPlaylists.Count) { holder.ItemView.SetPadding((int)(8 * scale + 0.5f), (int)(8 * scale + 0.5f), (int)(8 * scale + 0.5f), listPadding); } else { holder.ItemView.SetPadding((int)(8 * scale + 0.5f), (int)(8 * scale + 0.5f), (int)(8 * scale + 0.5f), (int)(8 * scale + 0.5f)); } } //Loading else if (position >= LocalPlaylists.Count && YoutubePlaylists[position - LocalPlaylists.Count].Name == "Loading" && YoutubePlaylists[position - LocalPlaylists.Count].YoutubeID == null) { } //Error views else if (position < LocalPlaylists.Count && LocalPlaylists[position].Name == "Error" && LocalPlaylists[position].LocalID == -1) { EmptyHolder holder = (EmptyHolder)viewHolder; if (Build.VERSION.SdkInt >= BuildVersionCodes.N) { holder.text.TextFormatted = Html.FromHtml(LocalPlaylists[position].Owner, FromHtmlOptions.OptionUseCssColors); } else #pragma warning disable CS0618 // Type or member is obsolete { holder.text.TextFormatted = Html.FromHtml(LocalPlaylists[position].Owner); } #pragma warning restore CS0618 // Type or member is obsolete if (!holder.text.HasOnClickListeners) { holder.text.Click += (s, e) => { Playlist.instance.RefreshLocalPlaylists(); }; } } else if (position >= LocalPlaylists.Count && YoutubePlaylists[position - LocalPlaylists.Count].Name == "Error" && YoutubePlaylists[position - LocalPlaylists.Count].YoutubeID == null) { EmptyHolder holder = (EmptyHolder)viewHolder; if (Build.VERSION.SdkInt >= BuildVersionCodes.N) { holder.text.TextFormatted = Html.FromHtml(YoutubePlaylists[position - LocalPlaylists.Count].Owner, FromHtmlOptions.OptionUseCssColors); } else #pragma warning disable CS0618 // Type or member is obsolete { holder.text.TextFormatted = Html.FromHtml(YoutubePlaylists[position - LocalPlaylists.Count].Owner); } #pragma warning restore CS0618 // Type or member is obsolete if (!holder.text.HasOnClickListeners) { holder.text.Click += (s, e) => { if (YoutubePlaylists[position - LocalPlaylists.Count].HasWritePermission) { MainActivity.instance.Login(true, true, true); } }; } } //Playlists binding else if (LocalPlaylists.Count >= position) { TwoLineHolder holder = (TwoLineHolder)viewHolder; holder.Line1.Text = LocalPlaylists[position].Name; holder.Line2.Text = LocalPlaylists[position].Count.ToString() + " " + (LocalPlaylists[position].Count < 2 ? MainActivity.instance.GetString(Resource.String.element) : MainActivity.instance.GetString(Resource.String.elements)); if (!holder.more.HasOnClickListeners) { holder.more.Click += (sender, e) => { Playlist.instance.More(holder.AdapterPosition); }; } if (LocalPlaylists[position].SyncState == SyncState.Error) { holder.sync.Visibility = ViewStates.Visible; } else { holder.sync.Visibility = ViewStates.Gone; } } else if (position > LocalPlaylists.Count && YoutubePlaylists.Count >= position - LocalPlaylists.Count) { PlaylistHolder holder = (PlaylistHolder)viewHolder; PlaylistItem playlist = YoutubePlaylists[position - LocalPlaylists.Count]; holder.Title.Text = playlist.Name; Picasso.With(Application.Context).Load(playlist.ImageURL).Placeholder(Resource.Color.placeholder).Transform(new RemoveBlackBorder(true)).Into(holder.AlbumArt); if (playlist.Owner == null) { holder.Owner.Text = " "; holder.Owner.SetTextColor(Color.Transparent); holder.Owner.SetBackgroundResource(Resource.Color.placeholder); } else { holder.Owner.Text = playlist.Owner; holder.Owner.SetBackgroundColor(Color.Transparent); Color color; TypedValue value = new TypedValue(); if (MainActivity.instance.Theme.ResolveAttribute(Android.Resource.Attribute.TextColor, value, true)) { color = Color.ParseColor("#" + Java.Lang.Integer.ToHexString(value.Data)); } else { color = Color.Black; } holder.Owner.SetTextColor(color); } if (playlist.HasWritePermission) { holder.edit.Visibility = ViewStates.Visible; } else { holder.edit.Visibility = ViewStates.Gone; } if (playlist.SyncState == SyncState.Loading || Downloader.queue.Find(x => x.PlaylistName == playlist.Name && (x.State == DownloadState.Downloading || x.State == DownloadState.Initialization || x.State == DownloadState.MetaData || x.State == DownloadState.None)) != null) { holder.sync.Visibility = ViewStates.Gone; holder.SyncLoading.Visibility = ViewStates.Visible; } else if (playlist.SyncState == SyncState.True) { holder.sync.SetImageResource(Resource.Drawable.Sync); holder.sync.Visibility = ViewStates.Visible; holder.SyncLoading.Visibility = ViewStates.Gone; } else if (playlist.SyncState == SyncState.Error) { holder.sync.SetImageResource(Resource.Drawable.SyncError); holder.sync.Visibility = ViewStates.Visible; holder.SyncLoading.Visibility = ViewStates.Gone; } else if (playlist.SyncState == SyncState.False) { holder.sync.Visibility = ViewStates.Gone; holder.SyncLoading.Visibility = ViewStates.Gone; } if (!holder.more.HasOnClickListeners) { holder.more.Click += (sender, e) => { Playlist.instance.More(holder.AdapterPosition); }; } } }
public override void OnBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) { if (position == 0 && isEmpty) { EmptyHolder holder = (EmptyHolder)viewHolder; holder.text.Text = type == ListType.Queue ? MainActivity.instance.GetString(Resource.String.empty_queue) : MainActivity.instance.GetString(Resource.String.long_loading); holder.text.SetHeight(MainActivity.instance.DpToPx(157)); return; } else { SongHolder holder = (SongHolder)viewHolder; if (type == ListType.Favs) { position--; } if (position == -1) { holder.Title.Text = MainActivity.instance.GetString(Resource.String.shuffle_all); holder.AlbumArt.SetImageResource(Resource.Drawable.Shuffle); Color color; TypedValue value = new TypedValue(); if (MainActivity.instance.Theme.ResolveAttribute(Android.Resource.Attribute.ColorForeground, value, true)) { color = Color.ParseColor("#" + Integer.ToHexString(value.Data)); } else { color = Color.Black; } holder.AlbumArt.SetColorFilter(color); } else { holder.AlbumArt.ClearColorFilter(); Song song = songs.Count <= position ? null : songs[position]; if (song == null && type == ListType.Queue) { holder.Title.Text = ""; holder.AlbumArt.SetImageResource(Resource.Color.background_material_dark); MusicPlayer.RemotePlayer.MediaQueue.GetItemAtIndex(position); return; } holder.Title.Text = song.Title; if (song.AlbumArt == -1 || song.IsYt) { if (song.Album != null) { Picasso.With(Application.Context).Load(song.Album).Placeholder(Resource.Color.background_material_dark).Transform(new RemoveBlackBorder(true)).Into(holder.AlbumArt); } else { Picasso.With(Application.Context).Load(Resource.Color.background_material_dark).Transform(new RemoveBlackBorder(true)).Into(holder.AlbumArt); } } else { var songCover = Uri.Parse("content://media/external/audio/albumart"); var songAlbumArtUri = ContentUris.WithAppendedId(songCover, song.AlbumArt); Picasso.With(Application.Context).Load(songAlbumArtUri).Placeholder(Resource.Color.background_material_dark).Resize(400, 400).CenterCrop().Into(holder.AlbumArt); } } } }