Reworking youtube search view and backstack managment.

This commit is contained in:
Anonymus Raccoon
2019-06-25 21:13:53 +02:00
parent 13668912f4
commit 200b8c73b2
4 changed files with 48 additions and 34 deletions

View File

@@ -186,16 +186,8 @@ namespace Opus
else if (MusicPlayer.UseCastPlayer)
MusicPlayer.GetQueueFromCast();
Console.WriteLine("&Resuming, Search Instance: " + SearchableActivity.instance + " SearchQuery: " + SearchableActivity.instance?.SearchQuery);
if (SearchableActivity.instance != null && SearchableActivity.instance.SearchQuery != null && SearchableActivity.instance.SearchQuery != "")
{
IMenuItem searchItem = menu.FindItem(Resource.Id.search);
searchItem.ExpandActionView();
SearchView searchView = (SearchView)searchItem.ActionView;
searchView.SetQuery(SearchableActivity.instance.SearchQuery, false);
searchView.ClearFocus();
searchView.Focusable = false;
if(YoutubeSearch.instances == null || SearchableActivity.instance.SearchQuery != YoutubeSearch.instances[0].querryType) //We don't want to redo the query if the user already searched for the exact same query.
SupportFragmentManager.BeginTransaction().Replace(Resource.Id.contentView, Pager.NewInstance(SearchableActivity.instance.SearchQuery, 0)).AddToBackStack("Youtube").Commit();
SearchableActivity.instance = null;
@@ -315,12 +307,31 @@ namespace Opus
{
if (PlaylistTracks.instance != null || FolderTracks.instance != null || ChannelDetails.instance != null)
{
//for (int i = 0; i < SupportFragmentManager.BackStackEntryCount; i++)
//{
// Console.WriteLine("&Back stack entry " + i + ": " + SupportFragmentManager.GetBackStackEntryAt(i));
//}
for (int i = 0; i < SupportFragmentManager.BackStackEntryCount; i++)
{
Console.WriteLine("&Back stack entry " + i + ": " + SupportFragmentManager.GetBackStackEntryAt(i));
}
SupportFragmentManager.PopBackStack();
Console.WriteLine("&YoutubeEngine instance: " + YoutubeSearch.instances);
if (YoutubeSearch.instances != null)
{
Console.WriteLine("&Doing youtube back");
FindViewById<TabLayout>(Resource.Id.tabs).Visibility = ViewStates.Visible;
SearchView searchView = (SearchView)menu.FindItem(Resource.Id.search).ActionView;
searchView.Focusable = false;
menu.FindItem(Resource.Id.search).ExpandActionView();
searchView.SetQuery(YoutubeSearch.instances[0].Query, false);
searchView.ClearFocus();
//int selectedTab = 0;
//for (int i = 0; i < YoutubeSearch.instances.Length; i++)
//{
// if (YoutubeSearch.instances[i].IsFocused)
// selectedTab = i;
//}
}
}
else if (YoutubeSearch.instances != null)
{
@@ -347,7 +358,7 @@ namespace Opus
public bool OnMenuItemActionCollapse(IMenuItem item) //Youtube search collapse
{
if (YoutubeSearch.instances == null /*|| SearchableActivity.IgnoreMyself*/)
if (YoutubeSearch.instances == null || !item.ActionView.Focusable)
return true;
SupportFragmentManager.PopBackStack();
@@ -361,7 +372,7 @@ namespace Opus
public void OnFocusChange(View v, bool hasFocus)
{
if (hasFocus)
if (hasFocus && v.Focusable)
{
Bundle animation = ActivityOptionsCompat.MakeCustomAnimation(this, Android.Resource.Animation.FadeIn, Android.Resource.Animation.FadeOut).ToBundle();
StartActivity(new Intent(this, typeof(SearchableActivity)), animation);

View File

@@ -2,6 +2,7 @@
using Android.Support.Design.Widget;
using Android.Support.V4.App;
using Android.Support.V4.View;
using Android.Support.V7.Widget;
using Android.Views;
using Opus.Adapter;
@@ -39,6 +40,8 @@ namespace Opus.Fragments
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
System.Console.WriteLine("&Pager view created");
View view = inflater.Inflate(Resource.Layout.ViewPager, container, false);
TabLayout tabs = Activity.FindViewById<TabLayout>(Resource.Id.tabs);
ViewPager pager = view.FindViewById<ViewPager>(Resource.Id.pager);
@@ -95,6 +98,15 @@ namespace Opus.Fragments
YoutubeSearch.instances[pos].IsFocused = true;
YoutubeSearch.instances[pos].OnFocus();
MainActivity.instance.FindViewById<TabLayout>(Resource.Id.tabs).Visibility = ViewStates.Visible;
IMenuItem searchItem = MainActivity.instance.menu.FindItem(Resource.Id.search);
SearchView searchView = (SearchView)searchItem.ActionView;
searchView.Focusable = false;
searchItem.ExpandActionView();
searchView.SetQuery(query, false);
searchView.ClearFocus();
searchView.Focusable = true;
}
return view;
}
@@ -114,7 +126,7 @@ namespace Opus.Fragments
{
if (instance.IsFocused)
{
instance.ListView.SmoothScrollToPosition(0);
instance.ListView?.SmoothScrollToPosition(0);
}
}
}

View File

@@ -153,24 +153,6 @@ namespace Opus.Fragments
MainActivity.instance.contentRefresh.Refresh -= OnRefresh;
Activity.FindViewById<AppBarLayout>(Resource.Id.appbar).RemoveOnOffsetChangedListener(this);
if (YoutubeSearch.instances != null)
{
MainActivity.instance.FindViewById<TabLayout>(Resource.Id.tabs).Visibility = ViewStates.Visible;
SearchView searchView = (SearchView)MainActivity.instance.menu.FindItem(Resource.Id.search).ActionView;
searchView.Focusable = false;
MainActivity.instance.menu.FindItem(Resource.Id.search).ExpandActionView();
searchView.SetQuery(YoutubeSearch.instances[0].Query, false);
searchView.ClearFocus();
int selectedTab = 0;
for (int i = 0; i < YoutubeSearch.instances.Length; i++)
{
if (YoutubeSearch.instances[i].IsFocused)
selectedTab = i;
}
}
instance = null;
}
base.OnDestroyView();

View File

@@ -18,7 +18,6 @@ using System.Linq;
using System.Threading.Tasks;
using Channel = Opus.DataStructure.Channel;
using PlaylistItem = Opus.DataStructure.PlaylistItem;
using SearchView = Android.Support.V7.Widget.SearchView;
namespace Opus.Fragments
{
@@ -335,12 +334,16 @@ namespace Opus.Fragments
YoutubeManager.Play(result[position].song);
break;
case YtKind.Playlist:
MainActivity.instance.menu.FindItem(Resource.Id.search).ActionView.Focusable = false;
MainActivity.instance.menu.FindItem(Resource.Id.search).CollapseActionView();
MainActivity.instance.menu.FindItem(Resource.Id.search).ActionView.Focusable = true;
MainActivity.instance.FindViewById<TabLayout>(Resource.Id.tabs).Visibility = ViewStates.Gone;
MainActivity.instance.SupportFragmentManager.BeginTransaction().Replace(Resource.Id.contentView, PlaylistTracks.NewInstance(result[position].playlist)).AddToBackStack("Playlist Track").Commit();
break;
case YtKind.Channel:
MainActivity.instance.menu.FindItem(Resource.Id.search).ActionView.Focusable = false;
MainActivity.instance.menu.FindItem(Resource.Id.search).CollapseActionView();
MainActivity.instance.menu.FindItem(Resource.Id.search).ActionView.Focusable = true;
MainActivity.instance.FindViewById<TabLayout>(Resource.Id.tabs).Visibility = ViewStates.Gone;
MainActivity.instance.SupportFragmentManager.BeginTransaction().Replace(Resource.Id.contentView, ChannelDetails.NewInstance(result[position].channel)).AddToBackStack("Channel Details").Commit();
break;
@@ -463,6 +466,12 @@ namespace Opus.Fragments
outState.PutString("Query", Query);
base.OnSaveInstanceState(outState);
}
public override void OnResume()
{
base.OnResume();
Console.WriteLine("&Youtube Search Resumed");
}
}
}