Reworking backstack management for view pagers and for the playlist view.

This commit is contained in:
Tristan Roux
2019-01-31 22:08:39 +01:00
parent c7c9940786
commit c5bcab66c6
8 changed files with 80 additions and 60 deletions

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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)
{

View File

@@ -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();
}
}
}

View File

@@ -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<TabLayout>(Resource.Id.tabs);
ViewPager pager = view.FindViewById<ViewPager>(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<TabLayout>(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<ViewPager>(Resource.Id.pager).CurrentItem);
//}
}
}

View File

@@ -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)

View File

@@ -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<ImageButton>(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<Song> CompleteItem(Song song, string YoutubeID)

View File

@@ -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<ViewGroup>(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<TabLayout>(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;