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) else if (MusicPlayer.UseCastPlayer)
MusicPlayer.GetQueueFromCast(); MusicPlayer.GetQueueFromCast();
Console.WriteLine("&Resuming, Search Instance: " + SearchableActivity.instance + " SearchQuery: " + SearchableActivity.instance?.SearchQuery);
if (SearchableActivity.instance != null && SearchableActivity.instance.SearchQuery != null && 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. 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(); SupportFragmentManager.BeginTransaction().Replace(Resource.Id.contentView, Pager.NewInstance(SearchableActivity.instance.SearchQuery, 0)).AddToBackStack("Youtube").Commit();
SearchableActivity.instance = null; SearchableActivity.instance = null;
@@ -315,12 +307,31 @@ namespace Opus
{ {
if (PlaylistTracks.instance != null || FolderTracks.instance != null || ChannelDetails.instance != null) if (PlaylistTracks.instance != null || FolderTracks.instance != null || ChannelDetails.instance != null)
{ {
//for (int i = 0; i < SupportFragmentManager.BackStackEntryCount; i++) for (int i = 0; i < SupportFragmentManager.BackStackEntryCount; i++)
//{ {
// Console.WriteLine("&Back stack entry " + i + ": " + SupportFragmentManager.GetBackStackEntryAt(i)); Console.WriteLine("&Back stack entry " + i + ": " + SupportFragmentManager.GetBackStackEntryAt(i));
//} }
SupportFragmentManager.PopBackStack(); 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) else if (YoutubeSearch.instances != null)
{ {
@@ -347,7 +358,7 @@ namespace Opus
public bool OnMenuItemActionCollapse(IMenuItem item) //Youtube search collapse public bool OnMenuItemActionCollapse(IMenuItem item) //Youtube search collapse
{ {
if (YoutubeSearch.instances == null /*|| SearchableActivity.IgnoreMyself*/) if (YoutubeSearch.instances == null || !item.ActionView.Focusable)
return true; return true;
SupportFragmentManager.PopBackStack(); SupportFragmentManager.PopBackStack();
@@ -361,7 +372,7 @@ namespace Opus
public void OnFocusChange(View v, bool hasFocus) 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(); Bundle animation = ActivityOptionsCompat.MakeCustomAnimation(this, Android.Resource.Animation.FadeIn, Android.Resource.Animation.FadeOut).ToBundle();
StartActivity(new Intent(this, typeof(SearchableActivity)), animation); StartActivity(new Intent(this, typeof(SearchableActivity)), animation);

View File

@@ -2,6 +2,7 @@
using Android.Support.Design.Widget; using Android.Support.Design.Widget;
using Android.Support.V4.App; using Android.Support.V4.App;
using Android.Support.V4.View; using Android.Support.V4.View;
using Android.Support.V7.Widget;
using Android.Views; using Android.Views;
using Opus.Adapter; using Opus.Adapter;
@@ -39,6 +40,8 @@ namespace Opus.Fragments
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 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); View view = inflater.Inflate(Resource.Layout.ViewPager, container, false);
TabLayout tabs = Activity.FindViewById<TabLayout>(Resource.Id.tabs); TabLayout tabs = Activity.FindViewById<TabLayout>(Resource.Id.tabs);
ViewPager pager = view.FindViewById<ViewPager>(Resource.Id.pager); ViewPager pager = view.FindViewById<ViewPager>(Resource.Id.pager);
@@ -95,6 +98,15 @@ namespace Opus.Fragments
YoutubeSearch.instances[pos].IsFocused = true; YoutubeSearch.instances[pos].IsFocused = true;
YoutubeSearch.instances[pos].OnFocus(); 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; return view;
} }
@@ -114,7 +126,7 @@ namespace Opus.Fragments
{ {
if (instance.IsFocused) 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; MainActivity.instance.contentRefresh.Refresh -= OnRefresh;
Activity.FindViewById<AppBarLayout>(Resource.Id.appbar).RemoveOnOffsetChangedListener(this); 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; instance = null;
} }
base.OnDestroyView(); base.OnDestroyView();

View File

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