Creating Home Screen

This commit is contained in:
Anonymous Raccoon
2018-03-30 22:50:42 +02:00
parent 130220c333
commit a90edd376d
5 changed files with 217 additions and 155 deletions
+22 -9
View File
@@ -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:
+1
View File
@@ -268,6 +268,7 @@
<Compile Include="Resources\Portable Class\FolderAdapter.cs" />
<Compile Include="Resources\Portable Class\FolderBrowse.cs" />
<Compile Include="Resources\Portable Class\FolderTracks.cs" />
<Compile Include="Resources\Portable Class\Home.cs" />
<Compile Include="Resources\Portable Class\ItemTouchCallback.cs" />
<Compile Include="Resources\Portable Class\MusicPlayer.cs" />
<Compile Include="Resources\Portable Class\OauthCallback.cs" />
+164
View File
@@ -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<Song> songs = new List<Song>();
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<ViewGroup>(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<RecyclerView>(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<Song> 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;
}
}
}
}
@@ -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();
}
}
@@ -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);