mirror of
https://github.com/zoriya/Opus.git
synced 2026-06-03 14:35:33 +00:00
Creating Home Screen
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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" />
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user