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);