diff --git a/Opus/Code/MainActivity.cs b/Opus/Code/MainActivity.cs index 3a5641d..b38870e 100644 --- a/Opus/Code/MainActivity.cs +++ b/Opus/Code/MainActivity.cs @@ -285,10 +285,6 @@ namespace Opus if(account != null) Picasso.With(this).Load(account.PhotoUrl).Transform(new CircleTransformation()).Into(new AccountTarget()); - var item = menu.FindItem(Resource.Id.filter); - var filterView = item.ActionView.JavaCast(); - filterView.QueryTextChange += Search; - item.SetVisible(false); menu.FindItem(Resource.Id.search).SetOnActionExpandListener(this); ((SearchView)menu.FindItem(Resource.Id.search).ActionView).SetOnQueryTextFocusChangeListener(this); ((SearchView)menu.FindItem(Resource.Id.search).ActionView).QueryHint = GetString(Resource.String.youtube_search); @@ -297,6 +293,23 @@ namespace Opus return base.OnCreateOptionsMenu(menu); } + public void AddFilterListener(EventHandler textChanged) + { + if (menu == null) + return; + + var item = menu.FindItem(Resource.Id.filter); + var filterView = item.ActionView.JavaCast(); + filterView.QueryTextChange += textChanged; + } + + public void RemoveFilterListener(EventHandler textChanged) + { + var item = menu.FindItem(Resource.Id.filter); + var filterView = item.ActionView.JavaCast(); + filterView.QueryTextChange -= textChanged; + } + public override bool OnOptionsItemSelected(IMenuItem item) { if(item.ItemId == Android.Resource.Id.Home) @@ -348,16 +361,6 @@ namespace Opus return true; } - void Search(object sender, SearchView.QueryTextChangeEventArgs e) - { - if (Browse.instance != null) - Browse.instance.Search(e.NewText); - if (PlaylistTracks.instance != null) - PlaylistTracks.instance.Search(e.NewText); - if (FolderTracks.instance != null) - FolderTracks.instance.Search(e.NewText); - } - public void OnFocusChange(View v, bool hasFocus) { if (hasFocus) diff --git a/Opus/Code/UI/Fragments/Browse.cs b/Opus/Code/UI/Fragments/Browse.cs index 36e56e8..c6341c6 100644 --- a/Opus/Code/UI/Fragments/Browse.cs +++ b/Opus/Code/UI/Fragments/Browse.cs @@ -34,12 +34,14 @@ namespace Opus.Fragments { base.OnActivityCreated(savedInstanceState); MainActivity.instance.contentRefresh.Refresh += OnRefresh; + MainActivity.instance.AddFilterListener(Search); ListView.NestedScrollingEnabled = true; } public override void OnDestroy() { MainActivity.instance.contentRefresh.Refresh -= OnRefresh; + MainActivity.instance.RemoveFilterListener(Search); base.OnDestroy(); instance = null; } @@ -138,12 +140,12 @@ namespace Opus.Fragments adapter.NotifyDataSetChanged(); } - public void Search(string search) + public void Search(object sender, Android.Support.V7.Widget.SearchView.QueryTextChangeEventArgs e) { - if (search == "") + if (e.NewText == "") query = null; else - query = search; + query = e.NewText; LoaderManager.GetInstance(this).RestartLoader(0, null, this); } diff --git a/Opus/Code/UI/Fragments/FolderTracks.cs b/Opus/Code/UI/Fragments/FolderTracks.cs index 2094560..a164bae 100644 --- a/Opus/Code/UI/Fragments/FolderTracks.cs +++ b/Opus/Code/UI/Fragments/FolderTracks.cs @@ -34,6 +34,7 @@ namespace Opus.Fragments { base.OnActivityCreated(savedInstanceState); MainActivity.instance.contentRefresh.Refresh += OnRefresh; + MainActivity.instance.AddFilterListener(Search); MainActivity.instance.SupportActionBar.SetDisplayShowTitleEnabled(true); MainActivity.instance.FindViewById(Resource.Id.toolbarLogo).Visibility = ViewStates.Gone; @@ -42,6 +43,7 @@ namespace Opus.Fragments public override void OnDestroy() { + MainActivity.instance.RemoveFilterListener(Search); MainActivity.instance.contentRefresh.Refresh -= OnRefresh; instance = null; base.OnDestroy(); @@ -125,12 +127,12 @@ namespace Opus.Fragments adapter.NotifyDataSetChanged(); } - public void Search(string search) + public void Search(object sender, Android.Support.V7.Widget.SearchView.QueryTextChangeEventArgs e) { - if (search == "") + if (e.NewText == "") query = null; else - query = search; + query = e.NewText; LoaderManager.GetInstance(this).RestartLoader(0, null, this); } diff --git a/Opus/Code/UI/Fragments/PlaylistTracks.cs b/Opus/Code/UI/Fragments/PlaylistTracks.cs index 18989cb..0304091 100644 --- a/Opus/Code/UI/Fragments/PlaylistTracks.cs +++ b/Opus/Code/UI/Fragments/PlaylistTracks.cs @@ -19,6 +19,7 @@ using CursorLoader = Android.Support.V4.Content.CursorLoader; using PlaylistItem = Opus.DataStructure.PlaylistItem; using PopupMenu = Android.Support.V7.Widget.PopupMenu; using RecyclerView = Android.Support.V7.Widget.RecyclerView; +using SearchView = Android.Support.V7.Widget.SearchView; using Toolbar = Android.Support.V7.Widget.Toolbar; namespace Opus.Fragments @@ -46,7 +47,14 @@ namespace Opus.Fragments public override void OnActivityCreated(Bundle savedInstanceState) { base.OnActivityCreated(savedInstanceState); + if(item == null) + { + MainActivity.instance.SupportFragmentManager.PopBackStack(); + return; + } + MainActivity.instance.contentRefresh.Refresh += OnRefresh; + MainActivity.instance.AddFilterListener(Search); MainActivity.instance.DisplaySearch(); MainActivity.instance.SupportActionBar.SetHomeButtonEnabled(true); @@ -67,7 +75,7 @@ namespace Opus.Fragments #pragma warning disable CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed PopulateList(); #pragma warning restore CS4014 // Because this call is not awaited, execution of the current method continues before the call is completed - if(useHeader) + if(useHeader && item != null) CreateHeader(); //if (item.SyncState == SyncState.Error) // CreateSyncBanner(); @@ -127,6 +135,7 @@ namespace Opus.Fragments public override void OnDestroyView() { + MainActivity.instance.RemoveFilterListener(Search); Activity.FindViewById(Resource.Id.headerPlay).Click -= HeaderPlay; Activity.FindViewById(Resource.Id.headerShuffle).Click -= HeaderShuffle; Activity.FindViewById(Resource.Id.headerMore).Click -= PlaylistMore; @@ -253,6 +262,7 @@ namespace Opus.Fragments instance.item = new PlaylistItem() { Name = playlistName, Count = songs.Count, HasWritePermission = false, LocalID = -1, YoutubeID = null }; instance.useHeader = false; instance.fullyLoadded = true; + instance.isInEditMode = false; instance.adapter = new PlaylistTrackAdapter(new SearchableList(songs)); return instance; } @@ -262,6 +272,7 @@ namespace Opus.Fragments instance = new PlaylistTracks { Arguments = new Bundle() }; instance.item = item; instance.useHeader = true; + instance.isInEditMode = true; instance.fullyLoadded = item.LocalID != 0 && item.LocalID != -1; Task.Run(async () => @@ -437,12 +448,12 @@ namespace Opus.Fragments LoadMore(); } - public void Search(string search) + public void Search(object sender, SearchView.QueryTextChangeEventArgs e) { - if (search == "") + if (e.NewText == "") query = null; else - query = search.ToLower(); + query = e.NewText.ToLower(); if(item.LocalID != -1) LoaderManager.GetInstance(this).RestartLoader(0, null, this); diff --git a/Opus/Resources/menu/toolbar_menu.xml b/Opus/Resources/menu/toolbar_menu.xml index 3eb703e..cc3a4db 100644 --- a/Opus/Resources/menu/toolbar_menu.xml +++ b/Opus/Resources/menu/toolbar_menu.xml @@ -12,6 +12,7 @@ android:id="@+id/filter" android:icon="@drawable/Filter" android:title="@string/filter" + android:visible="false" app:showAsAction="always|collapseActionView" app:actionViewClass="android.support.v7.widget.SearchView" />