From c5bcab66c6501014511f5a8e99ec178121573bc0 Mon Sep 17 00:00:00 2001
From: Tristan Roux
Date: Thu, 31 Jan 2019 22:08:39 +0100
Subject: [PATCH] Reworking backstack management for view pagers and for the
playlist view.
---
MusicApp/MainActivity.cs | 56 +++++++++++--------
MusicApp/Resources/Portable Class/Browse.cs | 2 +-
.../Resources/Portable Class/FolderBrowse.cs | 1 +
.../Resources/Portable Class/FolderTracks.cs | 9 +++
.../Resources/Portable Class/PagerFragment.cs | 27 ++++++---
MusicApp/Resources/Portable Class/Playlist.cs | 10 +---
.../Portable Class/PlaylistTracks.cs | 21 ++++---
.../Resources/Portable Class/YoutubeEngine.cs | 14 +----
8 files changed, 80 insertions(+), 60 deletions(-)
diff --git a/MusicApp/MainActivity.cs b/MusicApp/MainActivity.cs
index 5a0f208..42f31d6 100644
--- a/MusicApp/MainActivity.cs
+++ b/MusicApp/MainActivity.cs
@@ -397,9 +397,16 @@ namespace MusicApp
{
if(item.ItemId == Android.Resource.Id.Home)
{
- if (PlaylistTracks.instance != null)
+ if (PlaylistTracks.instance != null || FolderTracks.instance != null)
{
- SupportFragmentManager.BeginTransaction().Remove(PlaylistTracks.instance).Commit();
+ Console.WriteLine("&PlaylistTrack back");
+ for (int i = 0; i < SupportFragmentManager.BackStackEntryCount; i++)
+ {
+ Console.WriteLine("&Back stack entry " + i + ": " + SupportFragmentManager.GetBackStackEntryAt(i));
+ }
+
+ SupportFragmentManager.PopBackStack();
+ //SupportFragmentManager.BeginTransaction().Remove(PlaylistTracks.instance).Commit();
}
else if (YoutubeEngine.instances != null)
{
@@ -412,15 +419,10 @@ namespace MusicApp
SupportActionBar.SetDisplayHomeAsUpEnabled(false);
YoutubeEngine.instances = null;
}
- else if (FolderTracks.instance != null)
- {
- HideSearch();
- SupportActionBar.SetHomeButtonEnabled(false);
- SupportActionBar.SetDisplayHomeAsUpEnabled(false);
- SupportActionBar.Title = "MusicApp";
- FolderTracks.instance = null;
- SupportFragmentManager.BeginTransaction().Replace(Resource.Id.contentView, Pager.NewInstance(0, 1)).Commit();
- }
+ //else if (FolderTracks.instance != null)
+ //{
+ // SupportFragmentManager.BeginTransaction().Replace(Resource.Id.contentView, Pager.NewInstance(0, 1)).Commit();
+ //}
}
else if(item.ItemId == Resource.Id.search)
{
@@ -436,19 +438,28 @@ namespace MusicApp
public bool OnMenuItemActionCollapse(IMenuItem item) //Youtube search collapse
{
- if (YoutubeEngine.instances == null)
+ Console.WriteLine("&Youtube Search Collapse");
+ if (YoutubeEngine.instances == null || PlaylistTracks.openned)
return true;
- if(Browse.instance != null)
+ Console.WriteLine("&Youtube instnace != null");
+ for (int i = 0; i < SupportFragmentManager.BackStackEntryCount; i++)
{
- YoutubeEngine.instances = null;
- SupportFragmentManager.BeginTransaction().Replace(Resource.Id.contentView, Pager.NewInstance(0, 0)).Commit();
- }
- else if (YoutubeEngine.instances != null && !PlaylistTracks.openned)
- {
- YoutubeEngine.instances = null;
- SupportFragmentManager.PopBackStack();
+ Console.WriteLine("&Back stack entry " + i + ": " + SupportFragmentManager.GetBackStackEntryAt(i));
}
+ SupportFragmentManager.PopBackStack();
+ //if (Browse.instance != null)
+ //{
+ // Console.WriteLine("&Browse insatnce != null");
+ // YoutubeEngine.instances = null;
+ // SupportFragmentManager.BeginTransaction().Replace(Resource.Id.contentView, Pager.NewInstance(0, 0)).Commit();
+ //}
+ //else if (YoutubeEngine.instances != null && !PlaylistTracks.openned)
+ //{
+ // Console.WriteLine("&Backstack");
+ // YoutubeEngine.instances = null;
+ // SupportFragmentManager.PopBackStack();
+ //}
return true;
}
@@ -1071,10 +1082,7 @@ namespace MusicApp
}
else
{
- if(PlaylistTracks.instance != null)
- SupportFragmentManager.BeginTransaction().Remove(PlaylistTracks.instance).CommitNow();
-
- SupportFragmentManager.BeginTransaction().Replace(Resource.Id.contentView, Pager.NewInstance(1, 0)).AddToBackStack(null).Commit();
+ SupportFragmentManager.BeginTransaction().Replace(Resource.Id.contentView, Pager.NewInstance(1, 0)).AddToBackStack("Youtube").Commit();
}
SearchableActivity.instance = null;
}
diff --git a/MusicApp/Resources/Portable Class/Browse.cs b/MusicApp/Resources/Portable Class/Browse.cs
index 958151d..41bc2e7 100644
--- a/MusicApp/Resources/Portable Class/Browse.cs
+++ b/MusicApp/Resources/Portable Class/Browse.cs
@@ -75,7 +75,7 @@ namespace MusicApp.Resources.Portable_Class
public static Fragment NewInstance()
{
- if(instance == null)
+ if (instance == null)
instance = new Browse { Arguments = new Bundle() };
return instance;
}
diff --git a/MusicApp/Resources/Portable Class/FolderBrowse.cs b/MusicApp/Resources/Portable Class/FolderBrowse.cs
index 3f2cd4d..a5b491f 100644
--- a/MusicApp/Resources/Portable Class/FolderBrowse.cs
+++ b/MusicApp/Resources/Portable Class/FolderBrowse.cs
@@ -53,6 +53,7 @@ namespace MusicApp.Resources.Portable_Class
public override void OnDestroy()
{
+ System.Console.WriteLine("&Destroy called");
MainActivity.instance.contentRefresh.Refresh -= OnRefresh;
if (isEmpty)
{
diff --git a/MusicApp/Resources/Portable Class/FolderTracks.cs b/MusicApp/Resources/Portable Class/FolderTracks.cs
index 8827fa5..214de9f 100644
--- a/MusicApp/Resources/Portable Class/FolderTracks.cs
+++ b/MusicApp/Resources/Portable Class/FolderTracks.cs
@@ -267,5 +267,14 @@ namespace MusicApp.Resources.Portable_Class
base.OnResume();
instance = this;
}
+
+ public override void OnDestroyView()
+ {
+ MainActivity.instance.SupportActionBar.SetHomeButtonEnabled(false);
+ MainActivity.instance.SupportActionBar.SetDisplayHomeAsUpEnabled(false);
+ MainActivity.instance.SupportActionBar.Title = "MusicApp";
+ MainActivity.instance.HideSearch();
+ base.OnDestroyView();
+ }
}
}
\ No newline at end of file
diff --git a/MusicApp/Resources/Portable Class/PagerFragment.cs b/MusicApp/Resources/Portable Class/PagerFragment.cs
index 507c4a0..223276f 100644
--- a/MusicApp/Resources/Portable Class/PagerFragment.cs
+++ b/MusicApp/Resources/Portable Class/PagerFragment.cs
@@ -13,12 +13,6 @@ namespace MusicApp.Resources.Portable_Class
private int type;
private int pos;
-
- public override void OnCreate(Bundle savedInstanceState)
- {
- base.OnCreate(savedInstanceState);
- }
-
public static Fragment NewInstance(int type, int pos)
{
instance = new Pager { Arguments = new Bundle() };
@@ -29,6 +23,13 @@ namespace MusicApp.Resources.Portable_Class
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
+ //if(savedInstanceState != null)
+ //{
+ // System.Console.WriteLine("&Instance state restored");
+ // type = savedInstanceState.GetInt("type");
+ // pos = savedInstanceState.GetInt("pos");
+ //}
+
View view = inflater.Inflate(Resource.Layout.ViewPager, container, false);
TabLayout tabs = Activity.FindViewById(Resource.Id.tabs);
ViewPager pager = view.FindViewById(Resource.Id.pager);
@@ -42,7 +43,7 @@ namespace MusicApp.Resources.Portable_Class
tabs.AddTab(tabs.NewTab().SetText(Resources.GetString(Resource.String.songs)));
tabs.AddTab(tabs.NewTab().SetText(Resources.GetString(Resource.String.folders)));
- adapter = new ViewPagerAdapter(Activity.SupportFragmentManager);
+ adapter = new ViewPagerAdapter(ChildFragmentManager);
adapter.AddFragment(Browse.NewInstance(), Resources.GetString(Resource.String.songs));
adapter.AddFragment(FolderBrowse.NewInstance(), Resources.GetString(Resource.String.folders));
@@ -65,7 +66,7 @@ namespace MusicApp.Resources.Portable_Class
tabs.AddTab(tabs.NewTab().SetText(Resources.GetString(Resource.String.lives)));
tabs.AddTab(tabs.NewTab().SetText(Resources.GetString(Resource.String.channels)));
- ViewPagerAdapter adapter = new ViewPagerAdapter(Activity.SupportFragmentManager);
+ ViewPagerAdapter adapter = new ViewPagerAdapter(ChildFragmentManager);
Fragment[] fragment = YoutubeEngine.NewInstances(YoutubeEngine.searchKeyWorld);
adapter.AddFragment(fragment[0], Resources.GetString(Resource.String.all));
adapter.AddFragment(fragment[1], Resources.GetString(Resource.String.tracks));
@@ -161,6 +162,8 @@ namespace MusicApp.Resources.Portable_Class
base.OnDestroyView();
Browse.instance = null;
FolderBrowse.instance = null;
+ YoutubeEngine.instances = null;
+
adapter?.Dispose();
TabLayout tabs = Activity.FindViewById(Resource.Id.tabs);
@@ -171,5 +174,13 @@ namespace MusicApp.Resources.Portable_Class
instance = null;
}
+
+ //public override void OnSaveInstanceState(Bundle outState)
+ //{
+ // base.OnSaveInstanceState(outState);
+ // System.Console.WriteLine("&Pager insatnce state saved");
+ // outState.PutInt("type", type);
+ // outState.PutInt("pos", View.FindViewById(Resource.Id.pager).CurrentItem);
+ //}
}
}
\ No newline at end of file
diff --git a/MusicApp/Resources/Portable Class/Playlist.cs b/MusicApp/Resources/Portable Class/Playlist.cs
index c8b50bf..cec0ae0 100644
--- a/MusicApp/Resources/Portable Class/Playlist.cs
+++ b/MusicApp/Resources/Portable Class/Playlist.cs
@@ -446,21 +446,17 @@ namespace MusicApp.Resources.Portable_Class
return;
}
- AppCompatActivity act = (AppCompatActivity)Activity;
- act.SupportActionBar.SetHomeButtonEnabled(true);
- act.SupportActionBar.SetDisplayHomeAsUpEnabled(true);
- act.SupportActionBar.Title = playlist.Name;
instance = null;
MainActivity.instance.contentRefresh.Refresh -= OnRefresh;
MainActivity.instance.contentRefresh.Refresh -= OnRefresh;
if (playlist.SyncState == SyncState.True || playlist.SyncState == SyncState.Loading)
- MainActivity.instance.SupportFragmentManager.BeginTransaction().Replace(Resource.Id.contentView, PlaylistTracks.NewInstance(playlist.YoutubeID, playlist.LocalID, playlist.Name, playlist.HasWritePermission, true, playlist.Owner, playlist.Count, playlist.ImageURL)).AddToBackStack(null).Commit();
+ MainActivity.instance.SupportFragmentManager.BeginTransaction().Replace(Resource.Id.contentView, PlaylistTracks.NewInstance(playlist.YoutubeID, playlist.LocalID, playlist.Name, playlist.HasWritePermission, true, playlist.Owner, playlist.Count, playlist.ImageURL)).AddToBackStack("Playlist Track").Commit();
else if (local || (playlist.SyncState == SyncState.Error && playlist.LocalID != 0 && playlist.LocalID != -1))
- MainActivity.instance.SupportFragmentManager.BeginTransaction().Replace(Resource.Id.contentView, PlaylistTracks.NewInstance(playlist.LocalID, playlist.Name)).AddToBackStack(null).Commit();
+ MainActivity.instance.SupportFragmentManager.BeginTransaction().Replace(Resource.Id.contentView, PlaylistTracks.NewInstance(playlist.LocalID, playlist.Name)).AddToBackStack("Playlist Track").Commit();
else
- MainActivity.instance.SupportFragmentManager.BeginTransaction().Replace(Resource.Id.contentView, PlaylistTracks.NewInstance(playlist.YoutubeID, playlist.Name, playlist.HasWritePermission, true, playlist.Owner, playlist.Count, playlist.ImageURL)).AddToBackStack(null).Commit();
+ MainActivity.instance.SupportFragmentManager.BeginTransaction().Replace(Resource.Id.contentView, PlaylistTracks.NewInstance(playlist.YoutubeID, playlist.Name, playlist.HasWritePermission, true, playlist.Owner, playlist.Count, playlist.ImageURL)).AddToBackStack("Playlist Track").Commit();
}
private void ListView_ItemLongClick(object sender, int position)
diff --git a/MusicApp/Resources/Portable Class/PlaylistTracks.cs b/MusicApp/Resources/Portable Class/PlaylistTracks.cs
index a4af7cc..0bfeb1f 100644
--- a/MusicApp/Resources/Portable Class/PlaylistTracks.cs
+++ b/MusicApp/Resources/Portable Class/PlaylistTracks.cs
@@ -61,6 +61,9 @@ namespace MusicApp.Resources.Portable_Class
MainActivity.instance.FindViewById(Resource.Id.contentLayout).SetPadding(0, 0, 0, 0);
MainActivity.instance.FindViewById(Resource.Id.toolbar).SetPadding(0, statusHeight, 0, 0);
MainActivity.instance.FindViewById(Resource.Id.toolbar).LayoutParameters.Height += statusHeight;
+ MainActivity.instance.SupportActionBar.SetHomeButtonEnabled(true);
+ MainActivity.instance.SupportActionBar.SetDisplayHomeAsUpEnabled(true);
+ MainActivity.instance.SupportActionBar.Title = playlistName;
}
public bool OnMenuItemClick(IMenuItem item)
@@ -241,7 +244,7 @@ namespace MusicApp.Resources.Portable_Class
dialog.Show();
}
- public override void OnStop()
+ public override void OnDestroyView()
{
Activity.FindViewById(Resource.Id.headerMore).Click -= PlaylistMore;
@@ -283,18 +286,18 @@ namespace MusicApp.Resources.Portable_Class
if (YoutubeEngine.instances[i].focused)
selectedTab = i;
}
- if (!navigating)
- {
- MainActivity.instance?.SupportFragmentManager.BeginTransaction().Attach(YoutubeEngine.instances[selectedTab]).Commit();
- MainActivity.instance?.SupportFragmentManager.BeginTransaction().Remove(instance).Commit();
- }
+ //if (!navigating)
+ //{
+ // MainActivity.instance?.SupportFragmentManager.BeginTransaction().Attach(YoutubeEngine.instances[selectedTab]).Commit();
+ // MainActivity.instance?.SupportFragmentManager.BeginTransaction().Remove(instance).Commit();
+ //}
}
- else if (!navigating && Queue.instance == null)
- MainActivity.instance.SupportFragmentManager.PopBackStack();
+ //else if (!navigating && Queue.instance == null)
+ // MainActivity.instance.SupportFragmentManager.PopBackStack();
instance = null;
}
- base.OnStop();
+ base.OnDestroyView();
}
public static async Task CompleteItem(Song song, string YoutubeID)
diff --git a/MusicApp/Resources/Portable Class/YoutubeEngine.cs b/MusicApp/Resources/Portable Class/YoutubeEngine.cs
index 1277943..6304bfc 100644
--- a/MusicApp/Resources/Portable Class/YoutubeEngine.cs
+++ b/MusicApp/Resources/Portable Class/YoutubeEngine.cs
@@ -417,20 +417,12 @@ namespace MusicApp.Resources.Portable_Class
Play(item.YoutubeID, item.Title, item.Artist, item.Album);
break;
case YtKind.Playlist:
- ViewGroup rootView = Activity.FindViewById(Android.Resource.Id.Content);
- rootView.RemoveView(LoadingView);
- foreach(YoutubeEngine instance in instances)
- {
- rootView.RemoveView(instance.EmptyView);
- }
-
- MainActivity.instance.SupportActionBar.SetDisplayHomeAsUpEnabled(true);
- MainActivity.instance.SupportActionBar.Title = item.Title;
PlaylistTracks.openned = true;
MainActivity.instance.menu.FindItem(Resource.Id.search).CollapseActionView();
MainActivity.instance.FindViewById(Resource.Id.tabs).Visibility = ViewStates.Gone;
- MainActivity.instance.SupportFragmentManager.BeginTransaction().Add(Resource.Id.contentView, PlaylistTracks.NewInstance(item.YoutubeID, item.Title, false, false, item.Artist, -1, item.Album)).Commit();
- MainActivity.instance.SupportFragmentManager.BeginTransaction().Detach(this).Commit();
+ MainActivity.instance.SupportFragmentManager.BeginTransaction().Replace(Resource.Id.contentView, PlaylistTracks.NewInstance(item.YoutubeID, item.Title, false, false, item.Artist, -1, item.Album)).AddToBackStack("Playlist Track").Commit();
+ //MainActivity.instance.SupportFragmentManager.BeginTransaction().Add(Resource.Id.contentView, PlaylistTracks.NewInstance(item.YoutubeID, item.Title, false, false, item.Artist, -1, item.Album)).Commit();
+ //MainActivity.instance.SupportFragmentManager.BeginTransaction().Detach(this).Commit();
break;
default:
break;