Esempio n. 1
0
        //We give the item and the index since the public "YoutubePlaylists" array is not updated yet.
        private void YoutubeItemSynced(PlaylistItem item, int syncedPlaylistIndex)
        {
            /*The display order is
             *  - Local Header
             *  - Local Playlists
             *  - Youtube Header
             *  - Synced Playlists
             *  Since local header and local playlists are both contained in the "LocalPlaylists" array, to get the position of the syncedPlaylist,
             *  we need to sum the LocalPlaylists count (this sum get the position of the youtube header) and then we add the syncedPlaylistIndex.*/
            PlaylistHolder holder = (PlaylistHolder)ListView.FindViewHolderForAdapterPosition(LocalPlaylists.Count + syncedPlaylistIndex);

            if (holder != null)
            {
                holder.Owner.Text = item.Owner;
                Picasso.With(Application.Context).Load(item.ImageURL).Placeholder(Resource.Color.background_material_dark).Resize(400, 400).CenterCrop().Into(holder.AlbumArt);

                if (item.HasWritePermission)
                {
                    holder.edit.Visibility = ViewStates.Visible;
                }

                holder.sync.SetImageResource(Resource.Drawable.Sync);
                holder.sync.Visibility        = ViewStates.Visible;
                holder.SyncLoading.Visibility = ViewStates.Gone;
            }
        }
Esempio n. 2
0
        public async void StartSyncing(string playlistName)
        {
            int LocalIndex = LocalPlaylists.FindIndex(x => x.Name == playlistName);

            if (LocalIndex != -1)
            {
                LocalPlaylists.RemoveAt(LocalIndex);
                adapter.NotifyItemRemoved(LocalIndex);
                if (LocalPlaylists.Count == 1)
                {
                    LocalPlaylists.Add(new PlaylistItem("EMPTY", -1)
                    {
                        Owner = Resources.GetString(Resource.String.local_playlist_empty)
                    });
                    adapter.NotifyItemInserted(1);
                }
                await Task.Delay(500);
            }

            int YoutubeIndex = YoutubePlaylists.FindIndex(x => x.Name == playlistName);

            if (YoutubeIndex != -1)
            {
                YoutubePlaylists[YoutubeIndex].SyncState = SyncState.Loading;
                PlaylistHolder holder = (PlaylistHolder)ListView.GetChildViewHolder(ListView.GetChildAt(LocalPlaylists.Count + YoutubeIndex));
                holder.sync.Visibility        = ViewStates.Gone;
                holder.SyncLoading.Visibility = ViewStates.Visible;
            }
        }
Esempio n. 3
0
 private bool Exists(PlaylistHolder data)
 {
     foreach (XElement element in doc.Root.Descendants("Playlist"))
     {
         if (data.PlaylistName == (string)element.Attribute("Name"))
         {
             return(true);
         }
     }
     return(false);
 }
Esempio n. 4
0
 private bool Exists(PlaylistHolder data)
 {
     foreach (var element in Holder)
     {
         if (data.PlaylistName == element.PlaylistName)
         {
             return(true);
         }
     }
     return(false);
 }
Esempio n. 5
0
 public void CheckForSync()
 {
     for (int i = 1; i < YoutubePlaylists.Count; i++)
     {
         if (YoutubePlaylists[i].SyncState != SyncState.False && YoutubePlaylists[i].SyncState != SyncState.Error && Downloader.queue.Find(x => x.PlaylistName == YoutubePlaylists[i].Name && (x.State == DownloadState.Downloading || x.State == DownloadState.Initialization || x.State == DownloadState.MetaData || x.State == DownloadState.None)) == null)
         {
             YoutubePlaylists[i].SyncState = SyncState.True;
             PlaylistHolder holder = (PlaylistHolder)ListView.GetChildViewHolder(ListView.GetChildAt(LocalPlaylists.Count + i));
             holder.SyncLoading.Visibility = ViewStates.Gone;
             holder.sync.SetImageResource(Resource.Drawable.Sync);
             holder.sync.Visibility = ViewStates.Visible;
         }
     }
 }
Esempio n. 6
0
 private void SyncError()
 {
     for (int i = 1; i < YoutubePlaylists.Count; i++)
     {
         if (YoutubePlaylists[i].SyncState == SyncState.Loading)
         {
             YoutubePlaylists[i].SyncState = SyncState.Error;
             PlaylistHolder holder = (PlaylistHolder)ListView.GetChildViewHolder(ListView.GetChildAt(LocalPlaylists.Count + i));
             holder.sync.SetImageResource(Resource.Drawable.SyncError);
             holder.sync.Visibility        = ViewStates.Visible;
             holder.SyncLoading.Visibility = ViewStates.Gone;
         }
     }
 }
Esempio n. 7
0
 /// <summary>
 /// Removes a playlist
 /// </summary>
 /// <param name="OtobeRemoved">PlaylistHolder to remove</param>
 public void RemoveItem(object OtobeRemoved)
 {
     try
     {
         PlaylistHolder datastream = (PlaylistHolder)OtobeRemoved;
         if (!Exists(datastream))
         {
             return;
         }
         doc.Root.Elements("Playlist").Where(x => (string)x.Attribute("Name") == datastream.PlaylistName).Remove();
         doc.Save(_filepath);
     }
     catch (InvalidCastException ex)
     {
         throw new WrongParametersException("Object is not of type PlaylistHolder", ex.StackTrace);
     }
 }
Esempio n. 8
0
 /// <summary>
 /// Adds a playlist
 /// </summary>
 /// <param name="OtobeAdded">PlaylistHolder to add</param>
 public void AddItem(object OtobeAdded)
 {
     try
     {
         PlaylistHolder datastream = (PlaylistHolder)OtobeAdded;
         if (Exists(datastream))
         {
             return;
         }
         Holder.Add(datastream);
         File.WriteAllText(_filepath, JsonConvert.SerializeObject(Holder));
     }
     catch (InvalidCastException ex)
     {
         throw new WrongParametersException("Object is not of type PlaylistHolder", ex.StackTrace);
     }
 }
Esempio n. 9
0
 /// <summary>
 /// Adds a playlist
 /// </summary>
 /// <param name="OtobeAdded">PlaylistHolder to add</param>
 public void AddItem(object OtobeAdded)
 {
     try
     {
         PlaylistHolder datastream = (PlaylistHolder)OtobeAdded;
         if (Exists(datastream))
         {
             return;
         }
         XElement element = new XElement("Playlist", new object[] { new XAttribute("Name", datastream.PlaylistName), new XAttribute("Path", datastream.PlaylistPath) });
         doc.Root.Add(element);
         doc.Save(_filepath);
     }
     catch (InvalidCastException ex)
     {
         throw new WrongParametersException("Object is not of type PlaylistHolder", ex.StackTrace);
     }
 }
Esempio n. 10
0
        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);
                    };
                }
            }
        }
Esempio n. 11
0
        public void More(int Position)
        {
            bool         local = Position <= LocalPlaylists.Count;
            PlaylistItem item  = local ?
                                 LocalPlaylists[Position] :
                                 YoutubePlaylists[Position - LocalPlaylists.Count];

            BottomSheetDialog bottomSheet = new BottomSheetDialog(MainActivity.instance);
            View bottomView = LayoutInflater.Inflate(Resource.Layout.BottomSheet, null);

            bottomView.FindViewById <TextView>(Resource.Id.bsTitle).Text = item.Name;
            if (!local || item.SyncState != SyncState.False)
            {
                bottomView.FindViewById <TextView>(Resource.Id.bsArtist).Text = item.Owner;
                Picasso.With(MainActivity.instance).Load(item.ImageURL).Placeholder(Resource.Color.background_material_dark).Transform(new RemoveBlackBorder(true)).Into(bottomView.FindViewById <ImageView>(Resource.Id.bsArt));
            }
            else
            {
                bottomView.FindViewById <TextView>(Resource.Id.bsArtist).Text     = item.Count + " element" + (item.Count == 1 ? "" : "s");
                bottomView.FindViewById <ImageView>(Resource.Id.bsArt).Visibility = ViewStates.Gone;
            }
            bottomSheet.SetContentView(bottomView);

            if (item.SyncState == SyncState.Error)
            {
                bottomSheet.FindViewById <ListView>(Resource.Id.bsItems).Adapter = new BottomSheetAdapter(MainActivity.instance, Resource.Layout.BottomSheetText, new List <BottomSheetAction>
                {
                    //new BottomSheetAction(Resource.Drawable.SyncDisabled, Resources.GetString(Resource.String.stop_sync), (sender, eventArg) =>
                    //{
                    //    PlaylistManager.StopSyncingDialog(item, () =>
                    //    {
                    //        PlaylistItem LocalPlaylist = new PlaylistItem(YoutubePlaylists[Position - LocalPlaylists.Count].Name, item.LocalID, YoutubePlaylists[Position - LocalPlaylists.Count].Count);
                    //        LocalPlaylists.Add(LocalPlaylist);
                    //        if (LocalPlaylists.Count == 3 && LocalPlaylists[1].Name == "EMPTY")
                    //        {
                    //            LocalPlaylists.RemoveAt(1);
                    //            adapter.NotifyItemChanged(1);
                    //        }
                    //        else
                    //            adapter.NotifyItemInserted(LocalPlaylists.Count);

                    //        YoutubePlaylists[Position - LocalPlaylists.Count].LocalID = 0;
                    //        YoutubePlaylists[Position - LocalPlaylists.Count].SyncState = SyncState.False;
                    //        PlaylistHolder holder = (PlaylistHolder)ListView.GetChildViewHolder(ListView.GetChildAt(Position));
                    //        holder.sync.Visibility = ViewStates.Gone;
                    //        holder.SyncLoading.Visibility = ViewStates.Gone;
                    //    });
                    //    bottomSheet.Dismiss();
                    //}),
                    new BottomSheetAction(Resource.Drawable.Delete, Resources.GetString(Resource.String.delete), (sender, eventArg) =>
                    {
                        PlaylistManager.Delete(item, () =>
                        {
                            if (local)
                            {
                                LocalPlaylists.RemoveAt(Position);
                                adapter.NotifyItemRemoved(Position);

                                if (LocalPlaylists.Count == 1)
                                {
                                    LocalPlaylists.Add(new PlaylistItem("EMPTY", -1)
                                    {
                                        Owner = Resources.GetString(Resource.String.local_playlist_empty)
                                    });
                                    adapter.NotifyItemInserted(1);
                                }
                            }
                            else
                            {
                                YoutubePlaylists.RemoveAt(Position - LocalPlaylists.Count);
                                adapter.NotifyItemRemoved(Position);

                                if (YoutubePlaylists.Count == 1)
                                {
                                    YoutubePlaylists.Add(new PlaylistItem("EMPTY", null)
                                    {
                                        Owner = Resources.GetString(Resource.String.youtube_playlist_empty)
                                    });
                                    adapter.NotifyItemInserted(LocalPlaylists.Count + YoutubePlaylists.Count);
                                }
                            }
                        });
                        bottomSheet.Dismiss();
                    })
                });
                bottomSheet.Show();
                return;
            }


            List <BottomSheetAction> actions = new List <BottomSheetAction>
            {
                new BottomSheetAction(Resource.Drawable.Play, Resources.GetString(Resource.String.play_in_order), (sender, eventArg) =>
                {
                    PlaylistManager.PlayInOrder(item);
                    bottomSheet.Dismiss();
                }),
                new BottomSheetAction(Resource.Drawable.Shuffle, Resources.GetString(Resource.String.random_play), (sender, eventArg) =>
                {
                    PlaylistManager.Shuffle(item);
                    bottomSheet.Dismiss();
                }),
                new BottomSheetAction(Resource.Drawable.Queue, Resources.GetString(Resource.String.add_to_queue), (sender, eventArg) =>
                {
                    PlaylistManager.AddToQueue(item);
                    bottomSheet.Dismiss();
                })
            };

            if (local || item.HasWritePermission)
            {
                actions.AddRange(new BottomSheetAction[] { new BottomSheetAction(Resource.Drawable.Edit, Resources.GetString(Resource.String.rename), (sender, eventArg) =>
                    {
                        PlaylistManager.Rename(item, () =>
                        {
                            adapter.NotifyItemChanged(Position);
                        });
                        bottomSheet.Dismiss();
                    }),
                                                           new BottomSheetAction(Resource.Drawable.Delete, Resources.GetString(Resource.String.delete), (sender, eventArg) =>
                    {
                        PlaylistManager.Delete(item, () =>
                        {
                            if (local)
                            {
                                LocalPlaylists.RemoveAt(Position);
                                adapter.NotifyItemRemoved(Position);

                                if (LocalPlaylists.Count == 1)
                                {
                                    LocalPlaylists.Add(new PlaylistItem("EMPTY", -1)
                                    {
                                        Owner = Resources.GetString(Resource.String.local_playlist_empty)
                                    });
                                    adapter.NotifyItemInserted(1);
                                }
                            }
                            else
                            {
                                YoutubePlaylists.RemoveAt(Position - LocalPlaylists.Count);
                                adapter.NotifyItemRemoved(Position);

                                if (YoutubePlaylists.Count == 1)
                                {
                                    YoutubePlaylists.Add(new PlaylistItem("EMPTY", null)
                                    {
                                        Owner = Resources.GetString(Resource.String.youtube_playlist_empty)
                                    });
                                    adapter.NotifyItemInserted(LocalPlaylists.Count + YoutubePlaylists.Count);
                                }
                            }
                        });
                        bottomSheet.Dismiss();
                    }) });
            }

            if (item.SyncState == SyncState.True)
            {
                actions.AddRange(new BottomSheetAction[] { new BottomSheetAction(Resource.Drawable.Sync, Resources.GetString(Resource.String.sync_now), (sender, eventArg) =>
                    {
                        YoutubeManager.DownloadPlaylist(item, true, true);
                        bottomSheet.Dismiss();
                    }),
                                                           new BottomSheetAction(Resource.Drawable.SyncDisabled, Resources.GetString(Resource.String.stop_sync), (sender, eventArg) =>
                    {
                        PlaylistManager.StopSyncingDialog(item, () =>
                        {
                            PlaylistItem LocalPlaylist = new PlaylistItem(YoutubePlaylists[Position - LocalPlaylists.Count].Name, item.LocalID, YoutubePlaylists[Position - LocalPlaylists.Count].Count);
                            LocalPlaylists.Add(LocalPlaylist);
                            if (LocalPlaylists.Count == 3 && LocalPlaylists[1].Name == "EMPTY")
                            {
                                LocalPlaylists.RemoveAt(1);
                                adapter.NotifyItemChanged(1);
                            }
                            else
                            {
                                adapter.NotifyItemInserted(LocalPlaylists.Count);
                            }

                            YoutubePlaylists[Position - LocalPlaylists.Count].LocalID   = 0;
                            YoutubePlaylists[Position - LocalPlaylists.Count].SyncState = SyncState.False;
                            PlaylistHolder holder         = (PlaylistHolder)ListView.GetChildViewHolder(ListView.GetChildAt(Position));
                            holder.sync.Visibility        = ViewStates.Gone;
                            holder.SyncLoading.Visibility = ViewStates.Gone;
                        });
                        bottomSheet.Dismiss();
                    }) });
            }
            else if (!local)
            {
                actions.Add(new BottomSheetAction(Resource.Drawable.Sync, Resources.GetString(Resource.String.sync), (sender, eventArg) =>
                {
                    YoutubeManager.DownloadPlaylist(item, true, true);
                    bottomSheet.Dismiss();
                }));

                if (!item.HasWritePermission)
                {
                    actions.Add(new BottomSheetAction(Resource.Drawable.Delete, Resources.GetString(Resource.String.unfork), (sender, eventArg) =>
                    {
                        if (item.SyncState == SyncState.Error)
                        {
                            PlaylistManager.StopSyncing(item);
                        }

                        PlaylistManager.Unfork(item);
                        YoutubePlaylists.RemoveAt(Position - LocalPlaylists.Count);
                        adapter.NotifyItemRemoved(Position);
                        bottomSheet.Dismiss();
                    }));
                }
            }

            bottomSheet.FindViewById <ListView>(Resource.Id.bsItems).Adapter = new BottomSheetAdapter(MainActivity.instance, Resource.Layout.BottomSheetText, actions);
            bottomSheet.Show();
        }
Esempio n. 12
0
        public override void OnBindViewHolder(RecyclerView.ViewHolder viewHolder, int position)
        {
            if (items[position].Kind == YtKind.Video)
            {
                SongHolder holder = (SongHolder)viewHolder;
                Song       song   = items[position].song;

                holder.Title.Text         = song.Title;
                holder.Artist.Text        = song.Artist;
                holder.reorder.Visibility = ViewStates.Gone;

                var songAlbumArtUri = Android.Net.Uri.Parse(song.Album);
                Picasso.With(Android.App.Application.Context).Load(songAlbumArtUri).Placeholder(Resource.Color.placeholder).Transform(new RemoveBlackBorder(true)).Into(holder.AlbumArt);

                holder.more.Tag = position;
                if (!holder.more.HasOnClickListeners)
                {
                    holder.more.Click += (sender, e) =>
                    {
                        int tagPosition = (int)((ImageView)sender).Tag;
                        MainActivity.instance.More(items[tagPosition].song);
                    };
                }

                if (song.IsLiveStream)
                {
                    holder.Live.Visibility = ViewStates.Visible;
                }
                else
                {
                    holder.Live.Visibility = ViewStates.Gone;
                }

                float scale = MainActivity.instance.Resources.DisplayMetrics.Density;
                if (position + 1 == items.Count)
                {
                    holder.ItemView.SetPadding((int)(8 * scale + 0.5f), (int)(8 * scale + 0.5f), (int)(8 * scale + 0.5f), listPadding);
                    LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams)holder.more.LayoutParameters;
                    layoutParams.SetMargins(0, 0, 0, listPadding);
                    holder.more.LayoutParameters = layoutParams;
                }
                else
                {
                    holder.ItemView.SetPadding((int)(8 * scale + 0.5f), (int)(8 * scale + 0.5f), (int)(8 * scale + 0.5f), (int)(8 * scale + 0.5f));
                    LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams)holder.more.LayoutParameters;
                    layoutParams.SetMargins(0, 0, 0, 0);
                    holder.more.LayoutParameters = layoutParams;
                }
            }
            else if (items[position].Kind == YtKind.Playlist)
            {
                PlaylistHolder holder   = (PlaylistHolder)viewHolder;
                PlaylistItem   playlist = items[position].playlist;

                holder.Title.Text = playlist.Name;
                holder.Owner.Text = playlist.Owner;

                var songAlbumArtUri = Android.Net.Uri.Parse(playlist.ImageURL);
                Picasso.With(Android.App.Application.Context).Load(songAlbumArtUri).Placeholder(Resource.Color.placeholder).Transform(new RemoveBlackBorder(true)).Into(holder.AlbumArt);

                holder.more.Tag = position;
                if (!holder.more.HasOnClickListeners)
                {
                    holder.more.Click += (sender, e) =>
                    {
                        int tagPosition = (int)((ImageView)sender).Tag;
                        YoutubeSearch.instances[0].PlaylistMore(items[tagPosition].playlist);
                    };
                }
            }
            else if (items[position].Kind == YtKind.Channel)
            {
                RecyclerChannelHolder holder = (RecyclerChannelHolder)viewHolder;
                Channel channel = items[position].channel;

                holder.Title.Text = channel.Name;
                Picasso.With(Android.App.Application.Context).Load(channel.ImageURL).Transform(new CircleTransformation(false)).Into(holder.AlbumArt);

                if (!holder.action.HasOnClickListeners)
                {
                    holder.action.Click += (sender, e) =>
                    {
                        YoutubeManager.MixFromChannel(channel.YoutubeID);
                    };
                }
            }
            else if (items[position].Kind == YtKind.ChannelPreview)
            {
                ChannelPreviewHolder holder = (ChannelPreviewHolder)viewHolder;
                Channel channel             = items[position].channel;

                holder.Name.Text = channel.Name;
                Picasso.With(Android.App.Application.Context).Load(channel.ImageURL).Placeholder(Resource.Color.placeholder).Transform(new CircleTransformation(true)).Into(holder.Logo);


                DisplayMetrics displayMetrics = new DisplayMetrics();
                MainActivity.instance.WindowManager.DefaultDisplay.GetMetrics(displayMetrics);
                int wholeWidth = (displayMetrics.WidthPixels - MainActivity.instance.DpToPx(15)) / 2;
                int mixHeight  = (int)(wholeWidth * 0.5625); /// width / 16 */ 9
                holder.MixOne.LayoutParameters.Height = mixHeight;
                holder.MixOne.RequestLayout();
                holder.MixTwo.LayoutParameters.Height      = mixHeight;
                holder.ChannelLogo.LayoutParameters.Height = mixHeight * 2;

                Picasso.With(Android.App.Application.Context).Load(channel.ImageURL).Placeholder(Resource.Color.placeholder).Fit().CenterCrop().Into(holder.ChannelLogo);

                List <YtFile> files = items.FindAll(x => x.Kind == YtKind.Video && x.song.Artist == channel.Name);
                if (files.Count > 0)
                {
                    Picasso.With(Android.App.Application.Context).Load(files[0].song.Album).Placeholder(Resource.Color.placeholder).Transform(new RemoveBlackBorder()).Into(holder.MixOne);
                }
                if (files.Count > 1)
                {
                    Picasso.With(Android.App.Application.Context).Load(files[1].song.Album).Placeholder(Resource.Color.placeholder).Transform(new RemoveBlackBorder()).Into(holder.MixTwo);
                }

                if (!holder.ChannelHolder.HasOnClickListeners)
                {
                    holder.ChannelHolder.Click += (sender, e) =>
                    {
                        MainActivity.instance.menu.FindItem(Resource.Id.search).ActionView.Focusable = false;
                        MainActivity.instance.menu.FindItem(Resource.Id.search).CollapseActionView();
                        MainActivity.instance.menu.FindItem(Resource.Id.search).ActionView.Focusable = true;
                        MainActivity.instance.FindViewById(Resource.Id.tabs).Visibility = ViewStates.Gone;
                        MainActivity.instance.SupportFragmentManager.BeginTransaction().Replace(Resource.Id.contentView, ChannelDetails.NewInstance(channel)).AddToBackStack("Channel Details").Commit();
                    };
                }

                if (!holder.MixHolder.HasOnClickListeners)
                {
                    holder.MixHolder.Click += (sender, e) =>
                    {
                        YoutubeManager.MixFromChannel(channel.YoutubeID);
                    };
                }
            }
        }
Esempio n. 13
0
 /// <summary>
 /// Initializes a new instance of XmlPlaylistsHolderParser by creating a new xml file
 /// </summary>
 /// <param name="filepath">The path to create the xml file</param>
 /// <param name="holder">Data to add</param>
 public XmlPlaylistsHolderParser(string filepath, string path, PlaylistHolder holder)
 {
     this._filepath = filepath;
     CreateXml(holder, path);
 }