Updating youtube engine instance cotroller

This commit is contained in:
Anonymous Raccoon
2018-05-02 21:15:44 +02:00
parent c051bac058
commit 33bff0180f
3 changed files with 105 additions and 67 deletions
+41 -25
View File
@@ -370,9 +370,18 @@ namespace MusicApp
var searchView = menu.FindItem(Resource.Id.search).ActionView.JavaCast<SearchView>();
searchView.QueryTextSubmit += (s, e) =>
{
SaveInstance();
SetYtTabs(e.Query, 0);
if(YoutubeEngine.instances != null)
{
YoutubeEngine.searchKeyWorld = e.Query;
#pragma warning disable CS4014
foreach(YoutubeEngine instance in YoutubeEngine.instances)
instance.Search(e.Query, instance.querryType, true);
}
else
{
SaveInstance();
SetYtTabs(e.Query, 0);
}
e.Handled = true;
};
return base.OnCreateOptionsMenu(menu);
@@ -419,13 +428,15 @@ namespace MusicApp
FolderTracks.instance = null;
SetBrowseTabs(1);
}
else if(YoutubeEngine.instance != null)
else if(YoutubeEngine.instances != null)
{
contentRefresh.Refresh -= YoutubeEngine.instance.OnRefresh;
OnPaddingChanged -= YoutubeEngine.instance.OnPaddingChanged;
ViewGroup rootView = FindViewById<ViewGroup>(Android.Resource.Id.Content);
foreach(YoutubeEngine instance in YoutubeEngine.instances)
{
OnPaddingChanged -= instance.OnPaddingChanged;
rootView.RemoveView(instance.emptyView);
}
rootView.RemoveView(YoutubeEngine.loadingView);
rootView.RemoveView(YoutubeEngine.instance.emptyView);
var searchView = menu.FindItem(Resource.Id.search).ActionView.JavaCast<Android.Support.V7.Widget.SearchView>();
menu.FindItem(Resource.Id.search).CollapseActionView();
@@ -433,7 +444,7 @@ namespace MusicApp
searchView.Iconified = true;
searchView.SetQuery("", false);
SupportActionBar.SetDisplayHomeAsUpEnabled(false);
YoutubeEngine.instance = null;
YoutubeEngine.instances = null;
ResumeInstance();
}
@@ -524,13 +535,15 @@ namespace MusicApp
public void Navigate(int layout)
{
if(YoutubeEngine.instance != null)
if(YoutubeEngine.instances != null)
{
contentRefresh.Refresh -= YoutubeEngine.instance.OnRefresh;
OnPaddingChanged -= YoutubeEngine.instance.OnPaddingChanged;
ViewGroup rootView = FindViewById<ViewGroup>(Android.Resource.Id.Content);
foreach (YoutubeEngine instance in YoutubeEngine.instances)
{
OnPaddingChanged -= instance.OnPaddingChanged;
rootView.RemoveView(instance.emptyView);
}
rootView.RemoveView(YoutubeEngine.loadingView);
rootView.RemoveView(YoutubeEngine.instance.emptyView);
var searchView = menu.FindItem(Resource.Id.search).ActionView.JavaCast<Android.Support.V7.Widget.SearchView>();
menu.FindItem(Resource.Id.search).CollapseActionView();
@@ -538,14 +551,15 @@ namespace MusicApp
searchView.Iconified = true;
searchView.SetQuery("", false);
SupportActionBar.SetDisplayHomeAsUpEnabled(false);
YoutubeEngine.instance = null;
YoutubeEngine.instances = null;
ResumeInstance();
}
Android.Support.V4.App.Fragment fragment = null;
switch (layout)
{
case Resource.Id.musicLayout:
if (Home.instance != null && YoutubeEngine.instance == null)
if (Home.instance != null && YoutubeEngine.instances != null)
{
Home.instance.Refresh();
return;
@@ -559,7 +573,7 @@ namespace MusicApp
break;
case Resource.Id.browseLayout:
if (Browse.instance != null && YoutubeEngine.instance == null)
if (Browse.instance != null && YoutubeEngine.instances != null)
{
Browse.instance.Refresh();
return;
@@ -572,7 +586,7 @@ namespace MusicApp
break;
case Resource.Id.playlistLayout:
if (Playlist.instance != null && YoutubeEngine.instance == null)
if (Playlist.instance != null && YoutubeEngine.instances != null)
{
#pragma warning disable CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed
Playlist.instance.Refresh();
@@ -610,7 +624,7 @@ namespace MusicApp
TabLayout tabs = FindViewById<TabLayout>(Resource.Id.tabs);
ViewPager pager = FindViewById<ViewPager>(Resource.Id.pager);
if (YoutubeEngine.instance != null)
if (YoutubeEngine.instances != null)
{
ViewPagerAdapter oldAdapter = (ViewPagerAdapter)pager.Adapter;
for(int i = 0; i < oldAdapter.Count; i++)
@@ -679,10 +693,11 @@ namespace MusicApp
tabs.AddTab(tabs.NewTab().SetText("Playlists"));
tabs.AddTab(tabs.NewTab().SetText("Channels"));
oldAdapter.AddFragment(YoutubeEngine.NewInstance(querry, "All"), "All");
oldAdapter.AddFragment(YoutubeEngine.NewInstance(querry, "Tracks"), "Tracks");
oldAdapter.AddFragment(YoutubeEngine.NewInstance(querry, "Playlists"), "Playlists");
oldAdapter.AddFragment(YoutubeEngine.NewInstance(querry, "Channels"), "Channels");
Android.Support.V4.App.Fragment[] fragment = YoutubeEngine.NewInstances(querry);
oldAdapter.AddFragment(fragment[0], "All");
oldAdapter.AddFragment(fragment[1], "Tracks");
oldAdapter.AddFragment(fragment[2], "Playlists");
oldAdapter.AddFragment(fragment[3], "Channels");
pager.Adapter = oldAdapter;
}
@@ -698,10 +713,11 @@ namespace MusicApp
tabs.AddTab(tabs.NewTab().SetText("Channels"));
ViewPagerAdapter adapter = new ViewPagerAdapter(SupportFragmentManager);
adapter.AddFragment(YoutubeEngine.NewInstance(querry, "All"), "All");
adapter.AddFragment(YoutubeEngine.NewInstance(querry, "Tracks"), "Tracks");
adapter.AddFragment(YoutubeEngine.NewInstance(querry, "Playlists"), "Playlists");
adapter.AddFragment(YoutubeEngine.NewInstance(querry, "Channels"), "Channels");
Android.Support.V4.App.Fragment[] fragment = YoutubeEngine.NewInstances(querry);
adapter.AddFragment(fragment[0], "All");
adapter.AddFragment(fragment[1], "Tracks");
adapter.AddFragment(fragment[2], "Playlists");
adapter.AddFragment(fragment[3], "Channels");
pager.Adapter = adapter;
pager.AddOnPageChangeListener(this);
@@ -25,8 +25,10 @@ namespace MusicApp.Resources.Portable_Class
{
public class YoutubeEngine : Fragment
{
public static YoutubeEngine instance;
public static YoutubeEngine[] instances;
public static YouTubeService youtubeService;
public static string searchKeyWorld;
public string querryType;
public List<YtFile> result;
private RecyclerView ListView;
@@ -34,15 +36,11 @@ namespace MusicApp.Resources.Portable_Class
public View emptyView;
public static View loadingView;
private string[] actions = new string[] { "Play", "Play Next", "Play Last", "Add To Playlist", "Download" };
private string searchKeyWorld;
private string querryType;
public override void OnActivityCreated(Bundle savedInstanceState)
{
base.OnActivityCreated(savedInstanceState);
instance = this;
ListView.ScrollChange += MainActivity.instance.Scroll;
MainActivity.instance.contentRefresh.Refresh += OnRefresh;
MainActivity.instance.OnPaddingChanged += OnPaddingChanged;
MainActivity.instance.SupportActionBar.SetDisplayHomeAsUpEnabled(true);
}
@@ -55,12 +53,21 @@ namespace MusicApp.Resources.Portable_Class
adapter.listPadding = (int)(8 * MainActivity.instance.Resources.DisplayMetrics.Density + 0.5f);
}
public static Fragment NewInstance(string searchQuery, string querryType)
public static Fragment[] NewInstances(string searchQuery)
{
instance = new YoutubeEngine { Arguments = new Bundle() };
instance.searchKeyWorld = searchQuery;
instance.querryType = querryType;
return instance;
searchKeyWorld = searchQuery;
instances = new YoutubeEngine[]
{
new YoutubeEngine { Arguments = new Bundle() },
new YoutubeEngine { Arguments = new Bundle() },
new YoutubeEngine { Arguments = new Bundle() },
new YoutubeEngine { Arguments = new Bundle() },
};
instances[0].querryType = "All";
instances[1].querryType = "Tracks";
instances[2].querryType = "Playlists";
instances[3].querryType = "Channels";
return instances;
}
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
@@ -157,6 +164,8 @@ namespace MusicApp.Resources.Portable_Class
{
listPadding = MainActivity.paddingBot - MainActivity.defaultPaddingBot
};
adapter.ItemClick += ListView_ItemClick;
adapter.ItemLongCLick += ListView_ItemLongClick;
ListView.SetAdapter(adapter);
if(adapter == null || adapter.ItemCount == 0)
@@ -185,26 +194,51 @@ namespace MusicApp.Resources.Portable_Class
}
}
public async void OnRefresh(object sender, System.EventArgs e)
private void ListView_ItemClick(object sender, int position)
{
await Refresh();
MainActivity.instance.contentRefresh.Refreshing = false;
Song item = result[position].item;
switch (result[position].Kind)
{
case YtKind.Video:
Play(item.GetPath(), item.GetName(), item.GetArtist(), item.GetAlbum());
break;
case YtKind.Playlist:
ViewGroup rootView = Activity.FindViewById<ViewGroup>(Android.Resource.Id.Content);
rootView.RemoveView(loadingView);
foreach(YoutubeEngine instance in instances)
{
rootView.RemoveView(instance.emptyView);
MainActivity.instance.OnPaddingChanged -= instance.OnPaddingChanged;
}
var searchView = MainActivity.instance.menu.FindItem(Resource.Id.search).ActionView.JavaCast<Android.Support.V7.Widget.SearchView>();
MainActivity.instance.menu.FindItem(Resource.Id.search).CollapseActionView();
searchView.ClearFocus();
searchView.Iconified = true;
searchView.SetQuery("", false);
AppCompatActivity act = (AppCompatActivity)Activity;
act.SupportActionBar.SetHomeButtonEnabled(true);
act.SupportActionBar.SetDisplayHomeAsUpEnabled(true);
act.SupportActionBar.Title = item.GetName();
MainActivity.instance.HideTabs();
instances = null;
MainActivity.instance.Transition(Resource.Id.contentView, PlaylistTracks.NewInstance(item.youtubeID), true);
break;
case YtKind.Channel:
Toast.MakeText(Activity, "Action comming soon", ToastLength.Short).Show();
break;
default:
break;
}
}
public async Task Refresh()
private void ListView_ItemLongClick(object sender, int position)
{
await Search(searchKeyWorld, querryType, false);
}
private void ListView_ItemClick(object sender, AdapterView.ItemClickEventArgs e)
{
Play(result[e.Position].item.GetPath(), result[e.Position].item.GetName(), result[e.Position].item.GetArtist(), result[e.Position].item.GetAlbum());
}
private void ListView_ItemLongClick(object sender, AdapterView.ItemLongClickEventArgs e)
{
Song item = result[e.Position].item;
More(item);
if(result[position].Kind == YtKind.Video)
{
Song item = result[position].item;
More(item);
}
}
public void More(Song item)
@@ -272,21 +306,9 @@ namespace MusicApp.Resources.Portable_Class
Android.App.Application.Context.StartService(intent);
parseProgress.Visibility = ViewStates.Gone;
if(instance == null)
{
MainActivity.instance.HideTabs();
MainActivity.instance.HideSearch();
MainActivity.instance.SupportFragmentManager.BeginTransaction().Replace(Resource.Id.contentView, Player.NewInstance()).Commit();
}
else
{
await Task.Delay(100);
intent = new Intent(Android.App.Application.Context, typeof(MainActivity));
intent.SetAction("Player");
instance.StartActivity(intent);
instance = null;
}
MainActivity.instance.HideTabs();
MainActivity.instance.HideSearch();
MainActivity.instance.SupportFragmentManager.BeginTransaction().Replace(Resource.Id.contentView, Player.NewInstance()).Commit();
}
public static async void PlayFiles(Song[] files, bool skipExistVerification = false)
@@ -45,7 +45,7 @@ namespace MusicApp.Resources.Portable_Class
holder.more.Click += (sender, e) =>
{
int tagPosition = (int)((ImageView)sender).Tag;
YoutubeEngine.instance.More(items[tagPosition].item);
YoutubeEngine.instances[0].More(items[tagPosition].item);
};
}