From a90edd376d4cacd62f398232597fb42e3b9a4209 Mon Sep 17 00:00:00 2001 From: Anonymous Raccoon <32224410+AnonymusRaccoon@users.noreply.github.com> Date: Fri, 30 Mar 2018 22:50:42 +0200 Subject: [PATCH] Creating Home Screen --- MusicApp/MainActivity.cs | 31 +++- MusicApp/MusicApp.csproj | 1 + MusicApp/Resources/Portable Class/Home.cs | 164 ++++++++++++++++++ .../Resources/Portable Class/YoutubeEngine.cs | 98 +++-------- .../Resources/Portable Class/YtPlaylists.cs | 78 +-------- 5 files changed, 217 insertions(+), 155 deletions(-) create mode 100644 MusicApp/Resources/Portable Class/Home.cs diff --git a/MusicApp/MainActivity.cs b/MusicApp/MainActivity.cs index 7660f16..86b7fec 100644 --- a/MusicApp/MainActivity.cs +++ b/MusicApp/MainActivity.cs @@ -271,12 +271,25 @@ namespace MusicApp public void Scroll(object sender, View.ScrollChangeEventArgs e) { - if(!Queue.instance.adapter.RefreshDisabled()) - contentRefresh.SetEnabled(((LinearLayoutManager)Queue.instance.ListView.GetLayoutManager()).FindFirstCompletelyVisibleItemPosition() == 0); - - if(((LinearLayoutManager)Queue.instance.ListView.GetLayoutManager()).FindLastCompletelyVisibleItemPosition() == Queue.instance.adapter.songList.Count) + if(Home.instance != null) { - Queue.instance.LoadMore(); + if (!Home.instance.adapter.RefreshDisabled()) + contentRefresh.SetEnabled(((LinearLayoutManager)Home.instance.ListView.GetLayoutManager()).FindFirstCompletelyVisibleItemPosition() == 0); + + if (((LinearLayoutManager)Home.instance.ListView.GetLayoutManager()).FindLastCompletelyVisibleItemPosition() == Home.instance.adapter.songList.Count) + { + Home.instance.LoadMore(); + } + } + if(Queue.instance != null) + { + if (!Queue.instance.adapter.RefreshDisabled()) + contentRefresh.SetEnabled(((LinearLayoutManager)Queue.instance.ListView.GetLayoutManager()).FindFirstCompletelyVisibleItemPosition() == 0); + + if (((LinearLayoutManager)Queue.instance.ListView.GetLayoutManager()).FindLastCompletelyVisibleItemPosition() == Queue.instance.adapter.songList.Count) + { + Queue.instance.LoadMore(); + } } } @@ -458,17 +471,17 @@ namespace MusicApp switch (layout) { case Resource.Id.musicLayout: - if (Queue.instance != null) + if (Home.instance != null) { - Queue.instance.Refresh(); + Home.instance.Refresh(); return; } - tab = "Queue"; + tab = "Home"; HideTabs(); HideSearch(); ShowQuickPlay(); - fragment = Queue.NewInstance(); + fragment = Home.NewInstance(); break; case Resource.Id.browseLayout: diff --git a/MusicApp/MusicApp.csproj b/MusicApp/MusicApp.csproj index ac46ccf..04aa592 100644 --- a/MusicApp/MusicApp.csproj +++ b/MusicApp/MusicApp.csproj @@ -268,6 +268,7 @@ + diff --git a/MusicApp/Resources/Portable Class/Home.cs b/MusicApp/Resources/Portable Class/Home.cs new file mode 100644 index 0000000..ead1882 --- /dev/null +++ b/MusicApp/Resources/Portable Class/Home.cs @@ -0,0 +1,164 @@ +using Android.OS; +using Android.Support.V4.App; +using Android.Support.V7.Widget; +using Android.Support.V7.Widget.Helper; +using Android.Views; +using Google.Apis.YouTube.v3; +using Google.Apis.YouTube.v3.Data; +using MusicApp.Resources.values; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace MusicApp.Resources.Portable_Class +{ + public class Home : Fragment + { + public static Home instance; + public RecyclerView ListView; + public RecyclerAdapter adapter; + public ItemTouchHelper itemTouchHelper; + public List songs = new List(); + public View view; + + private string[] actions = new string[] { "Play", "Play Next", "Play Last", "Add To Playlist", "Edit Metadata" }; + + public override void OnActivityCreated(Bundle savedInstanceState) + { + base.OnActivityCreated(savedInstanceState); + MainActivity.instance.contentRefresh.Refresh += OnRefresh; + MainActivity.instance.OnPaddingChanged += PaddingChanged; + } + + private void PaddingChanged(object sender, PaddingChange e) + { + view.SetPadding(0, 0, 0, MainActivity.paddingBot); + } + + public override void OnDestroy() + { + MainActivity.instance.contentRefresh.Refresh -= OnRefresh; + MainActivity.instance.OnPaddingChanged -= PaddingChanged; + ViewGroup rootView = Activity.FindViewById(Android.Resource.Id.Content); + base.OnDestroy(); + instance = null; + } + + public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) + { + view = inflater.Inflate(Resource.Layout.RecyclerFragment, container, false); + ListView = view.FindViewById(Resource.Id.recycler); + view.SetPadding(0, 0, 0, MainActivity.paddingBot); + ListView.SetLayoutManager(new LinearLayoutManager(Android.App.Application.Context)); + + PopulateSongs(); + return view; + } + + private async void PopulateSongs() + { + if (MainActivity.instance.TokenHasExpire()) + { + YoutubeEngine.youtubeService = null; + MainActivity.instance.Login(); + + while (YoutubeEngine.youtubeService == null) + await Task.Delay(500); + } + + YouTubeService youtube = YoutubeEngine.youtubeService; + ActivitiesResource.ListRequest request = youtube.Activities.List("snippet, contentDetails"); + request.MaxResults = 25; + request.Home = true; + request.OauthToken = YoutubeEngine.youtubeService.ApiKey; + + ChannelListResponse foo; + + //System.Console.WriteLine("&" + request.Items[0].BrandingSettings.Channel.FeaturedChannelsUrls[0]); + + ActivityListResponse response = await request.ExecuteAsync(); + + foreach (var video in response.Items) + { + Song videoInfo = new Song(video.Snippet.Title, video.Snippet.ChannelTitle, video.Snippet.Thumbnails.High.Url, video.Id, -1, -1, video.Id, true); + songs.Add(videoInfo); + } + + adapter = new RecyclerAdapter(songs); + + ListView.SetAdapter(adapter); + adapter.ItemClick += ListView_ItemClick; + adapter.ItemLongCLick += ListView_ItemLongCLick; + ListView.SetItemAnimator(new DefaultItemAnimator()); + ListView.ScrollChange += MainActivity.instance.Scroll; + + ItemTouchHelper.Callback callback = new ItemTouchCallback(adapter); + itemTouchHelper = new ItemTouchHelper(callback); + itemTouchHelper.AttachToRecyclerView(ListView); + } + + public static Fragment NewInstance() + { + instance = new Home { Arguments = new Bundle() }; + return instance; + } + + private void OnRefresh(object sender, System.EventArgs e) + { + Refresh(); + MainActivity.instance.contentRefresh.Refreshing = false; + } + + public void Refresh() + { + //Refresh + } + + public void LoadMore() + { + //List songList = MusicPlayer.queue.Except(adapter.songList).ToList(); //Load more + } + + private void ListView_ItemClick(object sender, int Position) + { + Song item = songs[Position]; + + if (item.IsYt) + YoutubeEngine.Play(item.youtubeID, item.GetName(), item.GetArtist(), item.GetAlbum()); + else + Browse.Play(item); + } + + private void ListView_ItemLongCLick(object sender, int e) + { + Song item = songs[e]; + More(item); + } + + public void More(Song item) + { + Android.Support.V7.App.AlertDialog.Builder builder = new Android.Support.V7.App.AlertDialog.Builder(Activity, MainActivity.dialogTheme); + builder.SetTitle("Pick an action"); + builder.SetItems(actions, (senderAlert, args) => + { + switch (args.Which) + { + default: + break; + } + }); + builder.Show(); + } + + public override void OnResume() + { + base.OnResume(); + if (MainActivity.parcelable != null) + { + ListView.GetLayoutManager().OnRestoreInstanceState(MainActivity.parcelable); + MainActivity.parcelable = null; + MainActivity.parcelableSender = null; + } + } + } +} \ No newline at end of file diff --git a/MusicApp/Resources/Portable Class/YoutubeEngine.cs b/MusicApp/Resources/Portable Class/YoutubeEngine.cs index 213404d..fca94b7 100644 --- a/MusicApp/Resources/Portable Class/YoutubeEngine.cs +++ b/MusicApp/Resources/Portable Class/YoutubeEngine.cs @@ -10,7 +10,6 @@ using Android.Views; using Android.Widget; using Google.Apis.YouTube.v3; using Google.Apis.YouTube.v3.Data; -using Java.Util; using MusicApp.Resources.values; using System.Collections.Generic; using System.IO; @@ -598,36 +597,9 @@ namespace MusicApp.Resources.Portable_Class playListId.Add("newPlaylist"); - HashMap parameters = new HashMap(); - parameters.Put("part", "snippet,contentDetails"); - parameters.Put("mine", "true"); - parameters.Put("maxResults", "25"); - parameters.Put("onBehalfOfContentOwner", ""); - parameters.Put("onBehalfOfContentOwnerChannel", ""); - - PlaylistsResource.ListRequest ytPlaylists = youtubeService.Playlists.List(parameters.Get("part").ToString()); - - if (parameters.ContainsKey("mine") && parameters.Get("mine").ToString() != "") - { - bool mine = (parameters.Get("mine").ToString() == "true") ? true : false; - ytPlaylists.Mine = mine; - } - - if (parameters.ContainsKey("maxResults")) - { - ytPlaylists.MaxResults = long.Parse(parameters.Get("maxResults").ToString()); - } - - if (parameters.ContainsKey("onBehalfOfContentOwner") && parameters.Get("onBehalfOfContentOwner").ToString() != "") - { - ytPlaylists.OnBehalfOfContentOwner = parameters.Get("onBehalfOfContentOwner").ToString(); - } - - if (parameters.ContainsKey("onBehalfOfContentOwnerChannel") && parameters.Get("onBehalfOfContentOwnerChannel").ToString() != "") - { - ytPlaylists.OnBehalfOfContentOwnerChannel = parameters.Get("onBehalfOfContentOwnerChannel").ToString(); - } - + PlaylistsResource.ListRequest ytPlaylists = youtubeService.Playlists.List("snippet,contentDetails"); + ytPlaylists.Mine = true; + ytPlaylists.MaxResults = 25; PlaylistListResponse response = await ytPlaylists.ExecuteAsync(); for (int i = 0; i < response.Items.Count; i++) @@ -663,37 +635,26 @@ namespace MusicApp.Resources.Portable_Class } else { - HashMap parameters = new HashMap(); - parameters.Put("part", "snippet"); - parameters.Put("onBehalfOfContentOwner", ""); - PlaylistItem playlistItem = new PlaylistItem(); - PlaylistItemSnippet snippet = new PlaylistItemSnippet(); - snippet.PlaylistId = playlistID; - ResourceId resourceId = new ResourceId(); - resourceId.Kind = "youtube#video"; - resourceId.VideoId = videoID; + PlaylistItemSnippet snippet = new PlaylistItemSnippet + { + PlaylistId = playlistID + }; + ResourceId resourceId = new ResourceId + { + Kind = "youtube#video", + VideoId = videoID + }; snippet.ResourceId = resourceId; playlistItem.Snippet = snippet; - var insertRequest = youtubeService.PlaylistItems.Insert(playlistItem, parameters.Get("part").ToString()); - - if (parameters.ContainsKey("onBehalfOfContentOwner") && parameters.Get("onBehalfOfContentOwner").ToString() != "") - { - insertRequest.OnBehalfOfContentOwner = parameters.Get("onBehalfOfContentOwner").ToString(); - } - + var insertRequest = youtubeService.PlaylistItems.Insert(playlistItem, "snippet"); insertRequest.Execute(); } } public static void NewPlaylist(string playlistName, string videoID) { - HashMap parameters = new HashMap(); - parameters.Put("part", "snippet,status"); - parameters.Put("onBehalfOfContentOwner", ""); - - Google.Apis.YouTube.v3.Data.Playlist playlist = new Google.Apis.YouTube.v3.Data.Playlist(); PlaylistSnippet snippet = new PlaylistSnippet(); PlaylistStatus status = new PlaylistStatus(); @@ -701,35 +662,24 @@ namespace MusicApp.Resources.Portable_Class playlist.Snippet = snippet; playlist.Status = status; - var createRequest = youtubeService.Playlists.Insert(playlist, parameters.Get("part").ToString()); - - if (parameters.ContainsKey("onBehalfOfContentOwner") && parameters.Get("onBehalfOfContentOwner").ToString() != "") - { - createRequest.OnBehalfOfContentOwner = parameters.Get("onBehalfOfContentOwner").ToString(); - } - + var createRequest = youtubeService.Playlists.Insert(playlist, "snippet, status"); Google.Apis.YouTube.v3.Data.Playlist response = createRequest.Execute(); - parameters = new HashMap(); - parameters.Put("part", "snippet"); - parameters.Put("onBehalfOfContentOwner", ""); PlaylistItem playlistItem = new PlaylistItem(); - PlaylistItemSnippet snippetItem = new PlaylistItemSnippet(); - snippetItem.PlaylistId = response.Id; - ResourceId resourceId = new ResourceId(); - resourceId.Kind = "youtube#video"; - resourceId.VideoId = videoID; + PlaylistItemSnippet snippetItem = new PlaylistItemSnippet + { + PlaylistId = response.Id + }; + ResourceId resourceId = new ResourceId + { + Kind = "youtube#video", + VideoId = videoID + }; snippetItem.ResourceId = resourceId; playlistItem.Snippet = snippetItem; - var insertRequest = youtubeService.PlaylistItems.Insert(playlistItem, parameters.Get("part").ToString()); - - if (parameters.ContainsKey("onBehalfOfContentOwner") && parameters.Get("onBehalfOfContentOwner").ToString() != "") - { - insertRequest.OnBehalfOfContentOwner = parameters.Get("onBehalfOfContentOwner").ToString(); - } - + var insertRequest = youtubeService.PlaylistItems.Insert(playlistItem, "snippet"); insertRequest.Execute(); } } diff --git a/MusicApp/Resources/Portable Class/YtPlaylists.cs b/MusicApp/Resources/Portable Class/YtPlaylists.cs index 186ea43..7a6c3b6 100644 --- a/MusicApp/Resources/Portable Class/YtPlaylists.cs +++ b/MusicApp/Resources/Portable Class/YtPlaylists.cs @@ -86,38 +86,11 @@ namespace MusicApp.Resources.Portable_Class await Task.Delay(500); } - HashMap parameters = new HashMap(); - parameters.Put("part", "snippet,contentDetails"); - parameters.Put("mine", "true"); - parameters.Put("maxResults", "25"); - parameters.Put("onBehalfOfContentOwner", ""); - parameters.Put("onBehalfOfContentOwnerChannel", ""); - YouTubeService youtube = YoutubeEngine.youtubeService; - PlaylistsResource.ListRequest ytPlaylists = youtube.Playlists.List(parameters.Get("part").ToString()); - - if (parameters.ContainsKey("mine") && parameters.Get("mine").ToString() != "") - { - bool mine = (parameters.Get("mine").ToString() == "true") ? true : false; - ytPlaylists.Mine = mine; - } - - if (parameters.ContainsKey("maxResults")) - { - ytPlaylists.MaxResults = long.Parse(parameters.Get("maxResults").ToString()); - } - - if (parameters.ContainsKey("onBehalfOfContentOwner") && parameters.Get("onBehalfOfContentOwner").ToString() != "") - { - ytPlaylists.OnBehalfOfContentOwner = parameters.Get("onBehalfOfContentOwner").ToString(); - } - - if (parameters.ContainsKey("onBehalfOfContentOwnerChannel") && parameters.Get("onBehalfOfContentOwnerChannel").ToString() != "") - { - ytPlaylists.OnBehalfOfContentOwnerChannel = parameters.Get("onBehalfOfContentOwnerChannel").ToString(); - } - + PlaylistsResource.ListRequest ytPlaylists = youtube.Playlists.List("snippet,contentDetails"); + ytPlaylists.Mine = true; + ytPlaylists.MaxResults = 25; PlaylistListResponse response = await ytPlaylists.ExecuteAsync(); if (instance == null) @@ -165,38 +138,10 @@ namespace MusicApp.Resources.Portable_Class await Task.Delay(500); } - HashMap parameters = new HashMap(); - parameters.Put("part", "snippet,contentDetails"); - parameters.Put("mine", "true"); - parameters.Put("maxResults", "25"); - parameters.Put("onBehalfOfContentOwner", ""); - parameters.Put("onBehalfOfContentOwnerChannel", ""); - YouTubeService youtube = YoutubeEngine.youtubeService; - - PlaylistsResource.ListRequest ytPlaylists = youtube.Playlists.List(parameters.Get("part").ToString()); - - if (parameters.ContainsKey("mine") && parameters.Get("mine").ToString() != "") - { - bool mine = (parameters.Get("mine").ToString() == "true") ? true : false; - ytPlaylists.Mine = mine; - } - - if (parameters.ContainsKey("maxResults")) - { - ytPlaylists.MaxResults = long.Parse(parameters.Get("maxResults").ToString()); - } - - if (parameters.ContainsKey("onBehalfOfContentOwner") && parameters.Get("onBehalfOfContentOwner").ToString() != "") - { - ytPlaylists.OnBehalfOfContentOwner = parameters.Get("onBehalfOfContentOwner").ToString(); - } - - if (parameters.ContainsKey("onBehalfOfContentOwnerChannel") && parameters.Get("onBehalfOfContentOwnerChannel").ToString() != "") - { - ytPlaylists.OnBehalfOfContentOwnerChannel = parameters.Get("onBehalfOfContentOwnerChannel").ToString(); - } - + PlaylistsResource.ListRequest ytPlaylists = youtube.Playlists.List("snippet,contentDetails"); + ytPlaylists.Mine = true; + ytPlaylists.MaxResults = 25; PlaylistListResponse response = await ytPlaylists.ExecuteAsync(); if (instance == null) @@ -223,8 +168,6 @@ namespace MusicApp.Resources.Portable_Class isEmpty = true; Activity.AddContentView(emptyView, View.LayoutParameters); } - - System.Console.WriteLine("Refreshing done"); } private void ListView_ItemClick(object sender, AdapterView.ItemClickEventArgs e) @@ -329,16 +272,7 @@ namespace MusicApp.Resources.Portable_Class void RemovePlaylist(int position, string playlistID) { - HashMap parameters = new HashMap(); - parameters.Put("id", playlistID); - parameters.Put("onBehalfOfContentOwner", ""); - PlaylistsResource.DeleteRequest deleteRequest = YoutubeEngine.youtubeService.Playlists.Delete(playlistID); - if (parameters.ContainsKey("onBehalfOfContentOwner") && parameters.Get("onBehalfOfContentOwner").ToString() != "") - { - deleteRequest.OnBehalfOfContentOwner = parameters.Get("onBehalfOfContentOwner").ToString(); - } - deleteRequest.Execute(); playlists.RemoveAt(position);