diff --git a/MPfm/MPfm.Android/Classes/Activities/AboutActivity.cs b/MPfm/MPfm.Android/Classes/Activities/AboutActivity.cs index 49dfea12..4aad3202 100644 --- a/MPfm/MPfm.Android/Classes/Activities/AboutActivity.cs +++ b/MPfm/MPfm.Android/Classes/Activities/AboutActivity.cs @@ -73,7 +73,8 @@ protected override void OnCreate(Bundle bundle) _webView.SetWebViewClient(_webViewClient); // Since the onViewReady action could not be added to an intent, tell the NavMgr the view is ready - ((AndroidNavigationManager)_navigationManager).SetAboutActivityInstance(this); + //((AndroidNavigationManager)_navigationManager).SetAboutActivityInstance(this); + _navigationManager.BindAboutView(this); } protected override void OnStart() diff --git a/MPfm/MPfm.Android/Classes/Activities/EqualizerPresetDetailsActivity.cs b/MPfm/MPfm.Android/Classes/Activities/EqualizerPresetDetailsActivity.cs index f2fb93b3..28910eab 100644 --- a/MPfm/MPfm.Android/Classes/Activities/EqualizerPresetDetailsActivity.cs +++ b/MPfm/MPfm.Android/Classes/Activities/EqualizerPresetDetailsActivity.cs @@ -73,7 +73,7 @@ protected override void OnCreate(Bundle bundle) _sourceActivityType = Intent.GetStringExtra("sourceActivity"); // Since the onViewReady action could not be added to an intent, tell the NavMgr the view is ready - ((AndroidNavigationManager)_navigationManager).SetEqualizerPresetDetailsActivityInstance(this); + //((AndroidNavigationManager)_navigationManager).SetEqualizerPresetDetailsActivityInstance(this); } protected override void OnStart() diff --git a/MPfm/MPfm.Android/Classes/Activities/EqualizerPresetsActivity.cs b/MPfm/MPfm.Android/Classes/Activities/EqualizerPresetsActivity.cs index 2172d975..c80b7353 100644 --- a/MPfm/MPfm.Android/Classes/Activities/EqualizerPresetsActivity.cs +++ b/MPfm/MPfm.Android/Classes/Activities/EqualizerPresetsActivity.cs @@ -76,7 +76,8 @@ protected override void OnCreate(Bundle bundle) _sourceActivityType = Intent.GetStringExtra("sourceActivity"); // Since the onViewReady action could not be added to an intent, tell the NavMgr the view is ready - ((AndroidNavigationManager)_navigationManager).SetEqualizerPresetsActivityInstance(this); + //((AndroidNavigationManager)_navigationManager).SetEqualizerPresetsActivityInstance(this); + _navigationManager.BindEqualizerPresetsView(null, this); } private void ListViewOnItemClick(object sender, AdapterView.ItemClickEventArgs itemClickEventArgs) diff --git a/MPfm/MPfm.Android/Classes/Activities/FirstRunActivity.cs b/MPfm/MPfm.Android/Classes/Activities/FirstRunActivity.cs index 89eb5efc..f228da7a 100644 --- a/MPfm/MPfm.Android/Classes/Activities/FirstRunActivity.cs +++ b/MPfm/MPfm.Android/Classes/Activities/FirstRunActivity.cs @@ -61,7 +61,8 @@ protected override void OnCreate(Bundle bundle) // Since the onViewReady action could not be added to an intent, tell the NavMgr the view is ready _navigationManager = (AndroidNavigationManager)Bootstrapper.GetContainer().Resolve(); - ((AndroidNavigationManager)_navigationManager).SetFirstRunActivityInstance(this); + //((AndroidNavigationManager)_navigationManager).SetFirstRunActivityInstance(this); + _navigationManager.BindFirstRunView(this); } protected override void OnStart() diff --git a/MPfm/MPfm.Android/Classes/Activities/MainActivity.cs b/MPfm/MPfm.Android/Classes/Activities/MainActivity.cs index 79858c3a..ee4e6bc1 100644 --- a/MPfm/MPfm.Android/Classes/Activities/MainActivity.cs +++ b/MPfm/MPfm.Android/Classes/Activities/MainActivity.cs @@ -35,10 +35,12 @@ using MPfm.Android.Classes.Cache; using MPfm.Android.Classes.Fragments; using MPfm.Android.Classes.Navigation; +using MPfm.Library.Objects; using MPfm.MVP.Bootstrap; using MPfm.MVP.Messages; using MPfm.MVP.Models; using MPfm.MVP.Navigation; +using MPfm.MVP.Presenters.Interfaces; using MPfm.MVP.Views; using MPfm.Sound.AudioFiles; using MPfm.Sound.Playlists; @@ -55,6 +57,8 @@ public class MainActivity : BaseActivity, View.IOnTouchListener, ActionBar.IOnNa { private ITinyMessengerHub _messengerHub; private AndroidNavigationManager _navigationManager; + private List>>> _tabHistory; + private Dictionary, Tuple> _mobileLibraryBrowserList = new Dictionary, Tuple>(); private SplashFragment _splashFragment; private ViewFlipper _viewFlipper; private LinearLayout _miniPlayer; @@ -91,6 +95,7 @@ protected override void OnCreate(Bundle bundle) base.OnCreate(bundle); _messengerHub = Bootstrapper.GetContainer().Resolve(); + _tabHistory = new List>>>(); RequestWindowFeature(WindowFeatures.ActionBar); SetContentView(Resource.Layout.Main); @@ -159,17 +164,77 @@ protected override void OnCreate(Bundle bundle) _navigationManager.BindOptionsMenuView(this); _navigationManager.BindPlayerStatusView(this); //_navigationManager.Start(); - _navigationManager.SetMainActivityInstance(this); + //_navigationManager.SetMainActivityInstance(this); + _navigationManager.BindMobileMainView(this); } - public void AddTab(MobileNavigationTabType type, string title, Fragment fragment) + // This needs to be moved to MainActivity. Only MainActivity manages a backstack of MLBs. + public bool CanGoBackInMobileLibraryBrowserBackstack(MobileNavigationTabType tabType) { - Console.WriteLine("MainActivity - Adding tab {0}", title); + var tab = _tabHistory.FirstOrDefault(x => x.Item1 == tabType); + if (tab != null) + return tab.Item2.Count > 1; + return false; + } - _fragment = fragment; - FragmentTransaction transaction = FragmentManager.BeginTransaction(); - transaction.Replace(Resource.Id.main_fragmentContainer, fragment); - transaction.Commit(); + public void PopMobileLibraryBrowserBackstack(MobileNavigationTabType tabType) + { + var tab = _tabHistory.FirstOrDefault(x => x.Item1 == tabType); + var tabItem = tab.Item2.Last(); + tab.Item2.Remove(tabItem); + tabItem = tab.Item2.Last(); + + //Console.WriteLine("ANDROID NAVMGR -- PopMobileLibraryBrowserBackstack - About to restore: tabType: {0} browserType: {1}", tabType.ToString(), tabItem.Item1.ToString()); + MobileLibraryBrowserType browserType = MobileLibraryBrowserType.Artists; + switch (tabType) + { + case MobileNavigationTabType.Artists: + browserType = MobileLibraryBrowserType.Artists; + break; + case MobileNavigationTabType.Albums: + browserType = MobileLibraryBrowserType.Albums; + break; + case MobileNavigationTabType.Songs: + browserType = MobileLibraryBrowserType.Songs; + break; + case MobileNavigationTabType.Playlists: + browserType = MobileLibraryBrowserType.Playlists; + break; + } + + // Refresh query using presenter + // How to get presenter? Well. we have the instance of the view, right? so we can use the view to call the presenter. + //var presenter = GetMobileLibraryBrowserPresenter(tabType, browserType); + //presenter.PopBackstack(tabItem.Item1, tabItem.Item2); + } + + public void ChangeMobileLibraryBrowserType(MobileNavigationTabType tabType, MobileLibraryBrowserType newBrowserType) + { + MobileLibraryBrowserType browserType = MobileLibraryBrowserType.Artists; + switch (tabType) + { + case MobileNavigationTabType.Artists: + browserType = MobileLibraryBrowserType.Artists; + break; + case MobileNavigationTabType.Albums: + browserType = MobileLibraryBrowserType.Albums; + break; + case MobileNavigationTabType.Songs: + browserType = MobileLibraryBrowserType.Songs; + break; + case MobileNavigationTabType.Playlists: + browserType = MobileLibraryBrowserType.Playlists; + break; + } + + _tabHistory.Clear(); + _tabHistory.Add(new Tuple>>(tabType, new List>() { + new Tuple(newBrowserType, new LibraryQuery()) + })); + + //var presenter = GetMobileLibraryBrowserPresenter(tabType, browserType); + //if (presenter != null) + // presenter.ChangeBrowserType(newBrowserType); } public void PushDialogView(string viewTitle, IBaseView sourceView, IBaseView view) @@ -191,7 +256,7 @@ public bool OnNavigationItemSelected(int itemPosition, long itemId) if (_fragment is MobileLibraryBrowserFragment) { Console.WriteLine("MainActivity - OnNavigationItemSelected - Updating fragment - itemPosition: {0} - itemId: {1}", itemPosition, itemId); - _navigationManager.ChangeMobileLibraryBrowserType(MobileNavigationTabType.Artists, (MobileLibraryBrowserType)itemPosition); + ChangeMobileLibraryBrowserType(MobileNavigationTabType.Artists, (MobileLibraryBrowserType)itemPosition); } return true; } @@ -240,10 +305,10 @@ protected override void OnDestroy() public override void OnBackPressed() { var tabType = MobileNavigationTabType.Artists; - if (_navigationManager.CanGoBackInMobileLibraryBrowserBackstack(tabType)) + if (CanGoBackInMobileLibraryBrowserBackstack(tabType)) { //Console.WriteLine("MainActivity - OnBackPressed - CanRemoveFragment"); - _navigationManager.PopMobileLibraryBrowserBackstack(tabType); + PopMobileLibraryBrowserBackstack(tabType); } else { @@ -426,6 +491,24 @@ public void ShowMiniPlaylist() ShowMiniPlayerSlide(1); } + #region IMobileMainView implementation + + public void AddTab(MobileNavigationTabType type, string title, MobileLibraryBrowserType browserType, LibraryQuery query, IBaseView view) + { + Console.WriteLine("MainActivity - Adding tab {0}", title); + + //_tabHistory.Add(new Tuple>>(type, new List>() { + // new Tuple(browserType, query) + //})); + + _fragment = (Fragment)view; + FragmentTransaction transaction = FragmentManager.BeginTransaction(); + transaction.Replace(Resource.Id.main_fragmentContainer, _fragment); + transaction.Commit(); + } + + #endregion + #region IMobileOptionsMenuView implementation public Action OnItemClick { get; set; } diff --git a/MPfm/MPfm.Android/Classes/Activities/MarkerDetailsActivity.cs b/MPfm/MPfm.Android/Classes/Activities/MarkerDetailsActivity.cs index e69a48ee..3391f406 100644 --- a/MPfm/MPfm.Android/Classes/Activities/MarkerDetailsActivity.cs +++ b/MPfm/MPfm.Android/Classes/Activities/MarkerDetailsActivity.cs @@ -48,7 +48,8 @@ protected override void OnCreate(Bundle bundle) ActionBar.SetHomeButtonEnabled(true); // Since the onViewReady action could not be added to an intent, tell the NavMgr the view is ready - ((AndroidNavigationManager)_navigationManager).SetMarkerDetailsActivityInstance(this); + //((AndroidNavigationManager)_navigationManager).SetMarkerDetailsActivityInstance(this); + //_navigationManager.BindMarkerDetailsView(this, ); } protected override void OnStart() diff --git a/MPfm/MPfm.Android/Classes/Activities/PlayerActivity.cs b/MPfm/MPfm.Android/Classes/Activities/PlayerActivity.cs index 0d176abf..f159005d 100644 --- a/MPfm/MPfm.Android/Classes/Activities/PlayerActivity.cs +++ b/MPfm/MPfm.Android/Classes/Activities/PlayerActivity.cs @@ -152,6 +152,7 @@ protected override void OnCreate(Bundle bundle) } else { + Console.WriteLine("PlayerActivity - OnCreate - State is null - isInitialized: {0}", _isInitialized); } @@ -162,7 +163,8 @@ protected override void OnCreate(Bundle bundle) // Console.WriteLine("PlayerActivity - OnCreate - Bundle is null!"); // When Android stops an activity, it recalls OnCreate after, even though the activity is not destroyed (OnDestroy). It actually goes through creating a new object (the ctor is called). - ((AndroidNavigationManager)_navigationManager).SetPlayerActivityInstance(this); + //((AndroidNavigationManager)_navigationManager).SetPlayerActivityInstance(this); + _navigationManager.BindPlayerView(MobileNavigationTabType.Playlists, this); // Activate lock screen if not already activated _messengerHub.PublishAsync(new ActivateLockScreenMessage(this, true)); diff --git a/MPfm/MPfm.Android/Classes/Activities/PlaylistActivity.cs b/MPfm/MPfm.Android/Classes/Activities/PlaylistActivity.cs index decfad2e..297ef571 100644 --- a/MPfm/MPfm.Android/Classes/Activities/PlaylistActivity.cs +++ b/MPfm/MPfm.Android/Classes/Activities/PlaylistActivity.cs @@ -70,7 +70,8 @@ protected override void OnCreate(Bundle bundle) _sourceActivityType = Intent.GetStringExtra("sourceActivity"); // Since the onViewReady action could not be added to an intent, tell the NavMgr the view is ready - ((AndroidNavigationManager)_navigationManager).SetPlaylistActivityInstance(this); + //((AndroidNavigationManager)_navigationManager).SetPlaylistActivityInstance(this); + _navigationManager.BindPlaylistView(null, this); } //public override void OnAttachedToWindow() diff --git a/MPfm/MPfm.Android/Classes/Activities/PreferencesActivity.cs b/MPfm/MPfm.Android/Classes/Activities/PreferencesActivity.cs index 72ff1914..3375b392 100644 --- a/MPfm/MPfm.Android/Classes/Activities/PreferencesActivity.cs +++ b/MPfm/MPfm.Android/Classes/Activities/PreferencesActivity.cs @@ -58,7 +58,8 @@ protected override void OnCreate(Bundle bundle) _viewPager.SetOnPageChangeListener(_viewPagerAdapter); // Since the onViewReady action could not be added to an intent, tell the NavMgr the view is ready - ((AndroidNavigationManager) _navigationManager).SetPreferencesActivityInstance(this); + //((AndroidNavigationManager) _navigationManager).SetPreferencesActivityInstance(this); + _navigationManager.BindPreferencesView(this); } protected override void OnStart() diff --git a/MPfm/MPfm.Android/Classes/Activities/ResumePlaybackActivity.cs b/MPfm/MPfm.Android/Classes/Activities/ResumePlaybackActivity.cs index 8c260047..6a840ad3 100644 --- a/MPfm/MPfm.Android/Classes/Activities/ResumePlaybackActivity.cs +++ b/MPfm/MPfm.Android/Classes/Activities/ResumePlaybackActivity.cs @@ -59,7 +59,8 @@ protected override void OnCreate(Bundle bundle) _listView.ItemClick += ListViewOnItemClick; // Since the onViewReady action could not be added to an intent, tell the NavMgr the view is ready - ((AndroidNavigationManager)_navigationManager).SetResumePlaybackActivityInstance(this); + //((AndroidNavigationManager)_navigationManager).SetResumePlaybackActivityInstance(this); + _navigationManager.BindResumePlaybackView(this); } private void ListViewOnItemClick(object sender, AdapterView.ItemClickEventArgs itemClickEventArgs) diff --git a/MPfm/MPfm.Android/Classes/Activities/SplashActivity.cs b/MPfm/MPfm.Android/Classes/Activities/SplashActivity.cs index 05790347..ffec4fcd 100644 --- a/MPfm/MPfm.Android/Classes/Activities/SplashActivity.cs +++ b/MPfm/MPfm.Android/Classes/Activities/SplashActivity.cs @@ -30,18 +30,15 @@ namespace MPfm.Android [Activity(Label = "Sessions Splash", ScreenOrientation = ScreenOrientation.Sensor, Theme = "@style/MyAppTheme", ConfigurationChanges = ConfigChanges.KeyboardHidden | ConfigChanges.Orientation | ConfigChanges.ScreenSize, WindowSoftInputMode = SoftInput.StateHidden, NoHistory = true)] public class SplashActivity : BaseActivity, ISplashView { - private AndroidNavigationManager _navigationManager; - protected override void OnCreate(Bundle bundle) { Console.WriteLine("SplashActivity - OnCreate"); base.OnCreate(bundle); - _navigationManager = (AndroidNavigationManager)Bootstrapper.GetContainer().Resolve(); SetContentView(Resource.Layout.Splash); - //_navigationManager.Start(); - _navigationManager.BindSplashView(this); + var navigationManager = Bootstrapper.GetContainer().Resolve(); + navigationManager.BindSplashView(this); //AppConfigManager.Instance.Load(); //Console.WriteLine("LaunchActivity - OnCreate - isFirstRun: {0} resumePlayback.currentAudioFileId: {1} resumePlayback.currentPlaylistId: {2}", AppConfigManager.Instance.Root.IsFirstRun, AppConfigManager.Instance.Root.ResumePlayback.CurrentAudioFileId, AppConfigManager.Instance.Root.ResumePlayback.CurrentPlaylistId); diff --git a/MPfm/MPfm.Android/Classes/Activities/SyncActivity.cs b/MPfm/MPfm.Android/Classes/Activities/SyncActivity.cs index ecc4e019..78c07a21 100644 --- a/MPfm/MPfm.Android/Classes/Activities/SyncActivity.cs +++ b/MPfm/MPfm.Android/Classes/Activities/SyncActivity.cs @@ -67,7 +67,8 @@ protected override void OnCreate(Bundle bundle) _listView.ItemClick += ListViewOnItemClick; // Since the onViewReady action could not be added to an intent, tell the NavMgr the view is ready - ((AndroidNavigationManager)_navigationManager).SetSyncActivityInstance(this); + //((AndroidNavigationManager)_navigationManager).SetSyncActivityInstance(this); + _navigationManager.BindSyncView(this); } private void BtnConnectManuallyOnClick(object sender, EventArgs eventArgs) diff --git a/MPfm/MPfm.Android/Classes/Activities/SyncCloudActivity.cs b/MPfm/MPfm.Android/Classes/Activities/SyncCloudActivity.cs index c17aeba4..016e3349 100644 --- a/MPfm/MPfm.Android/Classes/Activities/SyncCloudActivity.cs +++ b/MPfm/MPfm.Android/Classes/Activities/SyncCloudActivity.cs @@ -76,7 +76,8 @@ protected override void OnCreate(Bundle bundle) _lblConnected.Text = string.Format("Is Linked: {0} {1}", _cloudLibrary.HasLinkedAccount, DateTime.Now.ToLongTimeString()); // Since the onViewReady action could not be added to an intent, tell the NavMgr the view is ready - ((AndroidNavigationManager)_navigationManager).SetSyncCloudActivityInstance(this); + //((AndroidNavigationManager)_navigationManager).SetSyncCloudActivityInstance(this); + _navigationManager.BindSyncCloudView(this); } private void BtnLoginOnClick(object sender, EventArgs e) diff --git a/MPfm/MPfm.Android/Classes/Activities/SyncDownloadActivity.cs b/MPfm/MPfm.Android/Classes/Activities/SyncDownloadActivity.cs index c2d5c81d..994baa43 100644 --- a/MPfm/MPfm.Android/Classes/Activities/SyncDownloadActivity.cs +++ b/MPfm/MPfm.Android/Classes/Activities/SyncDownloadActivity.cs @@ -67,7 +67,7 @@ protected override void OnCreate(Bundle bundle) _lblTotalFilesValue = FindViewById(Resource.Id.syncDownload_lblTotalFilesValue); // Since the onViewReady action could not be added to an intent, tell the NavMgr the view is ready - ((AndroidNavigationManager)_navigationManager).SetSyncDownloadActivityInstance(this); + //((AndroidNavigationManager)_navigationManager).SetSyncDownloadActivityInstance(this); } protected override void OnStart() diff --git a/MPfm/MPfm.Android/Classes/Activities/SyncMenuActivity.cs b/MPfm/MPfm.Android/Classes/Activities/SyncMenuActivity.cs index 91669f49..7955d6bd 100644 --- a/MPfm/MPfm.Android/Classes/Activities/SyncMenuActivity.cs +++ b/MPfm/MPfm.Android/Classes/Activities/SyncMenuActivity.cs @@ -76,7 +76,8 @@ protected override void OnCreate(Bundle bundle) _listView.ItemLongClick += ListViewOnItemLongClick; // Since the onViewReady action could not be added to an intent, tell the NavMgr the view is ready - ((AndroidNavigationManager)_navigationManager).SetSyncMenuActivityInstance(this); + //((AndroidNavigationManager)_navigationManager).SetSyncMenuActivityInstance(this); + //_navigationManager.BindSyncMenuView(this, null); } private void ListViewOnItemClick(object sender, AdapterView.ItemClickEventArgs itemClickEventArgs) diff --git a/MPfm/MPfm.Android/Classes/Activities/SyncWebBrowserActivity.cs b/MPfm/MPfm.Android/Classes/Activities/SyncWebBrowserActivity.cs index 3e8e1b35..8f3901e1 100644 --- a/MPfm/MPfm.Android/Classes/Activities/SyncWebBrowserActivity.cs +++ b/MPfm/MPfm.Android/Classes/Activities/SyncWebBrowserActivity.cs @@ -55,7 +55,8 @@ protected override void OnCreate(Bundle bundle) _lblCode = FindViewById(Resource.Id.syncWebBrowser_lblCode); // Since the onViewReady action could not be added to an intent, tell the NavMgr the view is ready - ((AndroidNavigationManager)_navigationManager).SetSyncWebBrowserActivityInstance(this); + //((AndroidNavigationManager)_navigationManager).SetSyncWebBrowserActivityInstance(this); + _navigationManager.BindSyncWebBrowserView(this); } protected override void OnStart() diff --git a/MPfm/MPfm.Android/Classes/Fragments/LoopsFragment.cs b/MPfm/MPfm.Android/Classes/Fragments/LoopsFragment.cs index dde36129..afcb8abc 100644 --- a/MPfm/MPfm.Android/Classes/Fragments/LoopsFragment.cs +++ b/MPfm/MPfm.Android/Classes/Fragments/LoopsFragment.cs @@ -22,12 +22,14 @@ using Android.Views; using Android.Widget; using MPfm.Android.Classes.Fragments.Base; +using MPfm.MVP.Bootstrap; +using MPfm.MVP.Navigation; using MPfm.MVP.Views; using MPfm.Player.Objects; namespace MPfm.Android.Classes.Fragments { - public class LoopsFragment : BaseFragment, ILoopsView, View.IOnClickListener + public class LoopsFragment : BaseFragment, ILoopsView { private View _view; @@ -40,9 +42,12 @@ public override View OnCreateView(LayoutInflater inflater, ViewGroup container, return _view; } - public void OnClick(View v) + public override void OnResume() { - + base.OnResume(); + + var navigationManager = Bootstrapper.GetContainer().Resolve(); + navigationManager.BindLoopsView(this); } #region ILoopsView implementation diff --git a/MPfm/MPfm.Android/Classes/Fragments/MarkersFragment.cs b/MPfm/MPfm.Android/Classes/Fragments/MarkersFragment.cs index c9b9a007..1774d90e 100644 --- a/MPfm/MPfm.Android/Classes/Fragments/MarkersFragment.cs +++ b/MPfm/MPfm.Android/Classes/Fragments/MarkersFragment.cs @@ -23,6 +23,8 @@ using Android.Widget; using MPfm.Android.Classes.Adapters; using MPfm.Android.Classes.Fragments.Base; +using MPfm.MVP.Bootstrap; +using MPfm.MVP.Navigation; using MPfm.MVP.Presenters; using MPfm.MVP.Views; using MPfm.Player.Objects; @@ -72,6 +74,9 @@ public override void OnResume() { Console.WriteLine("MarkersFragment - OnResume"); base.OnResume(); + + var navigationManager = Bootstrapper.GetContainer().Resolve(); + navigationManager.BindMarkersView(this); } public override void OnStart() diff --git a/MPfm/MPfm.Android/Classes/Fragments/PitchShiftingFragment.cs b/MPfm/MPfm.Android/Classes/Fragments/PitchShiftingFragment.cs index 43521c7b..2f8d99cf 100644 --- a/MPfm/MPfm.Android/Classes/Fragments/PitchShiftingFragment.cs +++ b/MPfm/MPfm.Android/Classes/Fragments/PitchShiftingFragment.cs @@ -22,7 +22,9 @@ using Android.Views; using Android.Widget; using MPfm.Android.Classes.Fragments.Base; +using MPfm.MVP.Bootstrap; using MPfm.MVP.Models; +using MPfm.MVP.Navigation; using MPfm.MVP.Views; namespace MPfm.Android.Classes.Fragments @@ -61,6 +63,13 @@ public override View OnCreateView(LayoutInflater inflater, ViewGroup container, return _view; } + public override void OnResume() + { + base.OnResume(); + var navigationManager = Bootstrapper.GetContainer().Resolve(); + navigationManager.BindPitchShiftingView(this); + } + private void SeekBarOnProgressChanged(object sender, SeekBar.ProgressChangedEventArgs e) { // Pitch shifting range: -12 to +12. Seek bar range: 0-23 diff --git a/MPfm/MPfm.Android/Classes/Fragments/PlayerMetadataFragment.cs b/MPfm/MPfm.Android/Classes/Fragments/PlayerMetadataFragment.cs index ff16300a..d268b275 100644 --- a/MPfm/MPfm.Android/Classes/Fragments/PlayerMetadataFragment.cs +++ b/MPfm/MPfm.Android/Classes/Fragments/PlayerMetadataFragment.cs @@ -21,6 +21,8 @@ using Android.Views; using Android.Widget; using MPfm.Android.Classes.Fragments.Base; +using MPfm.MVP.Bootstrap; +using MPfm.MVP.Navigation; using MPfm.MVP.Views; using MPfm.Player.Objects; using MPfm.Sound.AudioFiles; @@ -47,6 +49,14 @@ public override View OnCreateView(LayoutInflater inflater, ViewGroup container, return _view; } + public override void OnResume() + { + base.OnResume(); + + var navigationManager = Bootstrapper.GetContainer().Resolve(); + navigationManager.BindPlayerMetadataView(this); + } + #region IPlayerMetadataView implementation public Action OnOpenPlaylist { get; set; } diff --git a/MPfm/MPfm.Android/Classes/Fragments/TimeShiftingFragment.cs b/MPfm/MPfm.Android/Classes/Fragments/TimeShiftingFragment.cs index a743b805..7e737168 100644 --- a/MPfm/MPfm.Android/Classes/Fragments/TimeShiftingFragment.cs +++ b/MPfm/MPfm.Android/Classes/Fragments/TimeShiftingFragment.cs @@ -21,7 +21,9 @@ using Android.Views; using Android.Widget; using MPfm.Android.Classes.Fragments.Base; +using MPfm.MVP.Bootstrap; using MPfm.MVP.Models; +using MPfm.MVP.Navigation; using MPfm.MVP.Presenters; using MPfm.MVP.Views; @@ -61,6 +63,13 @@ public override View OnCreateView(LayoutInflater inflater, ViewGroup container, return _view; } + public override void OnResume() + { + base.OnResume(); + var navigationManager = Bootstrapper.GetContainer().Resolve(); + navigationManager.BindTimeShiftingView(this); + } + private void SeekBarOnProgressChanged(object sender, SeekBar.ProgressChangedEventArgs progressChangedEventArgs) { // Time shifting range: 50% to 150%. Seek bar range: 0-1000 diff --git a/MPfm/MPfm.Android/Classes/Navigation/AndroidNavigationManager.cs b/MPfm/MPfm.Android/Classes/Navigation/AndroidNavigationManager.cs index 26656d09..df78512b 100644 --- a/MPfm/MPfm.Android/Classes/Navigation/AndroidNavigationManager.cs +++ b/MPfm/MPfm.Android/Classes/Navigation/AndroidNavigationManager.cs @@ -27,6 +27,7 @@ using MPfm.MVP.Navigation; using MPfm.MVP.Presenters.Interfaces; using MPfm.MVP.Views; +using MPfm.Sound.AudioFiles; using TinyMessenger; namespace MPfm.Android.Classes.Navigation @@ -34,24 +35,6 @@ namespace MPfm.Android.Classes.Navigation public sealed class AndroidNavigationManager : MobileNavigationManager { private readonly ITinyMessengerHub _messageHub; - private Action _onMainViewReady; - private Action _onSplashViewReady; - private Action _onAboutViewReady; - private Action _onPlayerViewReady; - private Action _onPreferencesViewReady; - private Action _onEqualizerPresetsViewReady; - private Action _onSyncViewReady; - private Action _onSyncConnectManualViewReady; - private Action _onSyncMenuViewReady; - private Action _onSyncDownloadViewReady; - private Action _onSyncWebBrowserViewReady; - private Action _onSyncCloudViewReady; - private Action _onMarkerDetailsViewReady; - private Action _onEqualizerPresetDetailsViewReady; - private Action _onPlaylistViewReady; - private Action _onResumePlaybackViewReady; - private Action _onFirstRunViewReady; - private List>>> _tabHistory; private IPlayerStatusView _lockScreenView; private IPlayerStatusPresenter _lockScreenPresenter; @@ -61,13 +44,12 @@ public sealed class AndroidNavigationManager : MobileNavigationManager public AndroidNavigationManager(ITinyMessengerHub messageHub) { - _tabHistory = new List>>>(); _messageHub = messageHub; _messageHub.Subscribe((m) => { switch (m.CommandType) { case MobileNavigationManagerCommandMessageType.ShowPlayerView: - CreatePlayerView(MobileNavigationTabType.More, null); + CreatePlayerView(MobileNavigationTabType.More); break; case MobileNavigationManagerCommandMessageType.ShowEqualizerPresetsView: var sourceView = (IBaseView) m.Sender; @@ -77,101 +59,12 @@ public AndroidNavigationManager(ITinyMessengerHub messageHub) }); } - public bool CanGoBackInMobileLibraryBrowserBackstack(MobileNavigationTabType tabType) - { - var tab = _tabHistory.FirstOrDefault(x => x.Item1 == tabType); - if (tab != null) - return tab.Item2.Count > 1; - return false; - } - - public void PopMobileLibraryBrowserBackstack(MobileNavigationTabType tabType) - { - var tab = _tabHistory.FirstOrDefault(x => x.Item1 == tabType); - var tabItem = tab.Item2.Last(); - tab.Item2.Remove(tabItem); - tabItem = tab.Item2.Last(); - - //Console.WriteLine("ANDROID NAVMGR -- PopMobileLibraryBrowserBackstack - About to restore: tabType: {0} browserType: {1}", tabType.ToString(), tabItem.Item1.ToString()); - MobileLibraryBrowserType browserType = MobileLibraryBrowserType.Artists; - switch (tabType) - { - case MobileNavigationTabType.Artists: - browserType = MobileLibraryBrowserType.Artists; - break; - case MobileNavigationTabType.Albums: - browserType = MobileLibraryBrowserType.Albums; - break; - case MobileNavigationTabType.Songs: - browserType = MobileLibraryBrowserType.Songs; - break; - case MobileNavigationTabType.Playlists: - browserType = MobileLibraryBrowserType.Playlists; - break; - } - - // Refresh query using presenter - var presenter = GetMobileLibraryBrowserPresenter(tabType, browserType); - presenter.PopBackstack(tabItem.Item1, tabItem.Item2); - } - - public void ChangeMobileLibraryBrowserType(MobileNavigationTabType tabType, MobileLibraryBrowserType newBrowserType) - { - MobileLibraryBrowserType browserType = MobileLibraryBrowserType.Artists; - switch (tabType) - { - case MobileNavigationTabType.Artists: - browserType = MobileLibraryBrowserType.Artists; - break; - case MobileNavigationTabType.Albums: - browserType = MobileLibraryBrowserType.Albums; - break; - case MobileNavigationTabType.Songs: - browserType = MobileLibraryBrowserType.Songs; - break; - case MobileNavigationTabType.Playlists: - browserType = MobileLibraryBrowserType.Playlists; - break; - } - - _tabHistory.Clear(); - _tabHistory.Add(new Tuple>>(tabType, new List>() { - new Tuple(newBrowserType, new LibraryQuery()) - })); - - var presenter = GetMobileLibraryBrowserPresenter(tabType, browserType); - if(presenter != null) - presenter.ChangeBrowserType(newBrowserType); - } public override void NotifyMobileLibraryBrowserQueryChange(MobileNavigationTabType tabType, MobileLibraryBrowserType browserType, LibraryQuery query) { //Console.WriteLine("ANDROID NAVMGR -- NotifyMobileLibraryBrowserQueryChange tabType: {0} browserType: {1}", tabType.ToString(), browserType.ToString()); - var tab = _tabHistory.FirstOrDefault(x => x.Item1 == tabType); - tab.Item2.Add(new Tuple(browserType, query)); - } - - public override void AddTab(MobileNavigationTabType type, string title, IBaseView view) - { - // Not used on Android - } - - public override void AddTab(MobileNavigationTabType type, string title, MobileLibraryBrowserType browserType, LibraryQuery query, IBaseView view) - { - _tabHistory.Add(new Tuple>>(type, new List>() { - new Tuple(browserType, query) - })); - MainActivity.AddTab(type, title, (Fragment) view); - } - - public override void PushTabView(MobileNavigationTabType type, IBaseView view) - { - // Not used on Android - } - - public override void PushTabView(MobileNavigationTabType type, MobileLibraryBrowserType browserType, LibraryQuery query, IBaseView view) - { - // Not used on Android + //var tab = _tabHistory.FirstOrDefault(x => x.Item1 == tabType); + //tab.Item2.Add(new Tuple(browserType, query)); } public override void PushDialogView(MobileDialogPresentationType presentationType, string viewTitle, IBaseView sourceView, IBaseView view) @@ -215,205 +108,98 @@ public override void CreateSplashView() MPfmApplication.GetApplicationContext().StartActivity(intent); } - protected override void CreateAboutViewInternal(Action onViewReady) + public override void CreateAboutView() { - _onAboutViewReady = onViewReady; var intent = new Intent(MainActivity, typeof(AboutActivity)); MainActivity.StartActivity(intent); } - protected override void CreatePlayerViewInternal(MobileNavigationTabType tabType, Action onViewReady) + public override void CreatePlayerView(MobileNavigationTabType tabType) { - // Why is this method necessary on Android? No way to get the activity instance when starting a new activity. - // No way to create an activity instance other than using intents. No way to pass an object (other than serializable) in intent (i.e. Action onViewReady). - _onPlayerViewReady = onViewReady; - //var intent = new Intent(MainActivity, typeof(PlayerActivity)); - //MainActivity.StartActivity(intent); var intent = new Intent(MPfmApplication.GetApplicationContext(), typeof (PlayerActivity)); intent.AddFlags(ActivityFlags.NewTask); MPfmApplication.GetApplicationContext().StartActivity(intent); } - protected override void CreatePreferencesViewInternal(Action onViewReady) + public override void CreatePreferencesView() { - _onPreferencesViewReady = onViewReady; var intent = new Intent(MainActivity, typeof (PreferencesActivity)); MainActivity.StartActivity(intent); } - protected override void CreateEqualizerPresetsViewInternal(IBaseView sourceView, Action onViewReady) + public override void CreateEqualizerPresetsView(IBaseView sourceView) { - _onEqualizerPresetsViewReady = onViewReady; var activity = GetActivityFromView(sourceView); StartActivity(activity, typeof(EqualizerPresetsActivity)); } - protected override void CreateEqualizerPresetDetailsViewInternal(IBaseView sourceView, Action onViewReady) + public override void CreateEqualizerPresetDetailsView(IBaseView sourceView, Guid presetId) { - _onEqualizerPresetDetailsViewReady = onViewReady; var activity = GetActivityFromView(sourceView); - StartActivity(activity, typeof(EqualizerPresetDetailsActivity)); + var intent = new Intent(activity, typeof(EqualizerPresetDetailsActivity)); + intent.PutExtra("sourceActivity", activity.GetType().FullName); + intent.PutExtra("presetId", presetId.ToString()); + activity.StartActivity(intent); } - protected override void CreateMarkerDetailsViewInternal(IBaseView sourceView, Action onViewReady) + public override void CreateMarkerDetailsView(IBaseView sourceView, Guid markerId) { - _onMarkerDetailsViewReady = onViewReady; var activity = GetActivityFromView(sourceView); - StartActivity(activity, typeof(MarkerDetailsActivity)); + var intent = new Intent(activity, typeof(MarkerDetailsActivity)); + intent.PutExtra("sourceActivity", activity.GetType().FullName); + intent.PutExtra("markerId", markerId.ToString()); + activity.StartActivity(intent); } - protected override void CreatePlaylistViewInternal(IBaseView sourceView, Action onViewReady) + public override void CreatePlaylistView(IBaseView sourceView) { - _onPlaylistViewReady = onViewReady; var activity = GetActivityFromView(sourceView); StartActivity(activity, typeof(PlaylistActivity)); } - protected override void CreateSyncViewInternal(Action onViewReady) + public override void CreateSyncView() { - _onSyncViewReady = onViewReady; var intent = new Intent(MainActivity, typeof(SyncActivity)); MainActivity.StartActivity(intent); } - protected override void CreateSyncMenuViewInternal(Action onViewReady, SyncDevice device) + public override void CreateSyncMenuView(SyncDevice device) { - _onSyncMenuViewReady = onViewReady; var intent = new Intent(MainActivity, typeof(SyncMenuActivity)); MainActivity.StartActivity(intent); } - protected override void CreateSyncWebBrowserViewInternal(Action onViewReady) + public override void CreateSyncWebBrowserView() { - _onSyncWebBrowserViewReady = onViewReady; var intent = new Intent(MainActivity, typeof(SyncWebBrowserActivity)); MainActivity.StartActivity(intent); } - protected override void CreateSyncCloudViewInternal(Action onViewReady) + public override void CreateSyncCloudView() { - _onSyncCloudViewReady = onViewReady; var intent = new Intent(MainActivity, typeof(SyncCloudActivity)); MainActivity.StartActivity(intent); } - protected override void CreateSyncDownloadViewInternal(Action onViewReady, SyncDevice device, IEnumerable audioFiles) + public override void CreateSyncDownloadView(SyncDevice device, IEnumerable audioFiles) { - _onSyncDownloadViewReady = onViewReady; var intent = new Intent(MainActivity, typeof(SyncDownloadActivity)); + // Pass params to intent MainActivity.StartActivity(intent); } - protected override void CreateResumePlaybackViewInternal(Action onViewReady) + public override void CreateResumePlaybackView() { - _onResumePlaybackViewReady = onViewReady; var intent = new Intent(MainActivity, typeof(ResumePlaybackActivity)); MainActivity.StartActivity(intent); } - protected override void CreateFirstRunViewInternal(Action onViewReady) + public override void CreateFirstRunView() { - _onFirstRunViewReady = onViewReady; var intent = new Intent(MainActivity, typeof(FirstRunActivity)); MainActivity.StartActivity(intent); } - public void SetMainActivityInstance(MainActivity activity) - { - if (_onMainViewReady != null) - _onMainViewReady(activity); - } - - public void SetSplashActivityInstance(SplashActivity activity) - { - if (_onSplashViewReady != null) - _onSplashViewReady(activity); - } - - public void SetAboutActivityInstance(AboutActivity activity) - { - if (_onAboutViewReady != null) - _onAboutViewReady(activity); - } - - public void SetPlayerActivityInstance(PlayerActivity activity) - { - if (_onPlayerViewReady != null) - _onPlayerViewReady(activity); - } - - public void SetPreferencesActivityInstance(PreferencesActivity activity) - { - if (_onPreferencesViewReady != null) - _onPreferencesViewReady(activity); - } - - public void SetEqualizerPresetsActivityInstance(EqualizerPresetsActivity activity) - { - if (_onEqualizerPresetsViewReady != null) - _onEqualizerPresetsViewReady(activity); - } - - public void SetEqualizerPresetDetailsActivityInstance(EqualizerPresetDetailsActivity activity) - { - if (_onEqualizerPresetDetailsViewReady != null) - _onEqualizerPresetDetailsViewReady(activity); - } - - public void SetMarkerDetailsActivityInstance(MarkerDetailsActivity activity) - { - if (_onMarkerDetailsViewReady != null) - _onMarkerDetailsViewReady(activity); - } - - public void SetSyncActivityInstance(SyncActivity activity) - { - if (_onSyncViewReady != null) - _onSyncViewReady(activity); - } - - public void SetSyncMenuActivityInstance(SyncMenuActivity activity) - { - if (_onSyncMenuViewReady != null) - _onSyncMenuViewReady(activity); - } - - public void SetSyncDownloadActivityInstance(SyncDownloadActivity activity) - { - if (_onSyncDownloadViewReady != null) - _onSyncDownloadViewReady(activity); - } - - public void SetSyncWebBrowserActivityInstance(SyncWebBrowserActivity activity) - { - if (_onSyncWebBrowserViewReady != null) - _onSyncWebBrowserViewReady(activity); - } - - public void SetSyncCloudActivityInstance(SyncCloudActivity activity) - { - if (_onSyncCloudViewReady != null) - _onSyncCloudViewReady(activity); - } - - public void SetPlaylistActivityInstance(PlaylistActivity activity) - { - if (_onPlaylistViewReady != null) - _onPlaylistViewReady(activity); - } - - public void SetResumePlaybackActivityInstance(ResumePlaybackActivity activity) - { - if (_onResumePlaybackViewReady != null) - _onResumePlaybackViewReady(activity); - } - - public void SetFirstRunActivityInstance(FirstRunActivity activity) - { - if (_onFirstRunViewReady != null) - _onFirstRunViewReady(activity); - } - public void SetLockScreenActivityInstance(LockScreenActivity activity) { _lockScreenView = activity; diff --git a/MPfm/MPfm.MVP/Navigation/MobileNavigationManager.cs b/MPfm/MPfm.MVP/Navigation/MobileNavigationManager.cs index d99e332e..56ea4a5e 100644 --- a/MPfm/MPfm.MVP/Navigation/MobileNavigationManager.cs +++ b/MPfm/MPfm.MVP/Navigation/MobileNavigationManager.cs @@ -125,10 +125,6 @@ public abstract class MobileNavigationManager : INavigationManager private Dictionary, Tuple> _mobileLibraryBrowserList = new Dictionary, Tuple>(); - public abstract void AddTab(MobileNavigationTabType type, string title, IBaseView view); - public abstract void AddTab(MobileNavigationTabType type, string title, MobileLibraryBrowserType browserType, LibraryQuery query, IBaseView view); - public abstract void PushTabView(MobileNavigationTabType type, IBaseView view); - public abstract void PushTabView(MobileNavigationTabType type, MobileLibraryBrowserType browserType, LibraryQuery query, IBaseView view); public abstract void PushDialogView(MobileDialogPresentationType presentationType, string viewTitle, IBaseView sourceView, IBaseView view); public abstract void PushDialogSubview(MobileDialogPresentationType presentationType, string parentViewTitle, IBaseView view); public abstract void NotifyMobileLibraryBrowserQueryChange(MobileNavigationTabType type, MobileLibraryBrowserType browserType, LibraryQuery query); @@ -141,36 +137,11 @@ public virtual void Start() private void ContinueAfterSplash() { - Tracing.Log("MobileNavigationManager - ContinueAfterSplash"); -#if ANDROID - // Only one 'tab' on Android since we re-use the same fragment for different queries - // can't the sub views be pushed inside IPlayerView, IPreferencesView, etc? i.e.e IPlayerView.PushView(IBaseView view) - //CreateMainView(); - //var artistsView = CreateMobileLibraryBrowserView(MobileNavigationTabType.Artists, MobileLibraryBrowserType.Artists, new LibraryQuery()); - //AddTab(MobileNavigationTabType.Artists, "Artists", MobileLibraryBrowserType.Artists, new LibraryQuery(), artistsView); -#endif -#if IOS - // TO DO: Actually create MainView - var playlistsView = CreateMobileLibraryBrowserView(MobileNavigationTabType.Playlists, MobileLibraryBrowserType.Playlists, new LibraryQuery()); - var artistsView = CreateMobileLibraryBrowserView(MobileNavigationTabType.Artists, MobileLibraryBrowserType.Artists, new LibraryQuery()); - var albumsView = CreateMobileLibraryBrowserView(MobileNavigationTabType.Albums, MobileLibraryBrowserType.Albums, new LibraryQuery()); - var songsView = CreateMobileLibraryBrowserView(MobileNavigationTabType.Songs, MobileLibraryBrowserType.Songs, new LibraryQuery()); - var moreView = CreateOptionsMenuView(); - AddTab(MobileNavigationTabType.Playlists, "Sessions", MobileLibraryBrowserType.Playlists, new LibraryQuery(), playlistsView); - AddTab(MobileNavigationTabType.Artists, "Artists", MobileLibraryBrowserType.Artists, new LibraryQuery(), artistsView); - AddTab(MobileNavigationTabType.Albums, "Albums", MobileLibraryBrowserType.Albums, new LibraryQuery(), albumsView); - AddTab(MobileNavigationTabType.Songs, "Songs", MobileLibraryBrowserType.Songs, new LibraryQuery(), songsView); - AddTab(MobileNavigationTabType.More, "More", moreView); -#endif - - // Finally hide the splash screen, our UI is ready - //HideSplash(); - AppConfigManager.Instance.Load(); - Console.WriteLine("LaunchActivity - OnCreate - isFirstRun: {0} resumePlayback.currentAudioFileId: {1} resumePlayback.currentPlaylistId: {2}", AppConfigManager.Instance.Root.IsFirstRun, AppConfigManager.Instance.Root.ResumePlayback.CurrentAudioFileId, AppConfigManager.Instance.Root.ResumePlayback.CurrentPlaylistId); + Tracing.Log("MobileNavigationManager - ContinueAfterSplash - isFirstRun: {0} resumePlayback.currentAudioFileId: {1} resumePlayback.currentPlaylistId: {2}", AppConfigManager.Instance.Root.IsFirstRun, AppConfigManager.Instance.Root.ResumePlayback.CurrentAudioFileId, AppConfigManager.Instance.Root.ResumePlayback.CurrentPlaylistId); if (AppConfigManager.Instance.Root.IsFirstRun) { - Tracing.Log("LaunchActivity - First run of the application; launching FirstRun activity..."); + Tracing.Log("MobileNavigationManager - First run of the application; launching FirstRun activity..."); CreateFirstRunView(); } else if (!string.IsNullOrEmpty(AppConfigManager.Instance.Root.ResumePlayback.CurrentAudioFileId)) @@ -182,7 +153,7 @@ private void ContinueAfterSplash() if (audioFile != null) { - Tracing.Log("LaunchActivity - Resume playback is available; launching Player activity..."); + Tracing.Log("MobileNavigationManager - Resume playback is available; launching Player activity..."); var audioFiles = audioFileCacheService.AudioFiles.Where(x => x.ArtistName == audioFile.ArtistName && x.AlbumTitle == audioFile.AlbumTitle).ToList(); playerService.Play(audioFiles, audioFile.FilePath); @@ -195,10 +166,11 @@ private void ContinueAfterSplash() }, FilePath = audioFile.FilePath }); - CreatePlayerView(MobileNavigationTabType.Playlists, onViewBindedToPresenter); + CreatePlayerView(MobileNavigationTabType.Playlists); } } + // Shouldn't this be done by the presenter instead, who notifies the view? This should be the ONLY view that the NavMgr calls directly... _splashView.DestroyView(); } @@ -297,6 +269,7 @@ public virtual void BindMobileMainView(IMobileMainView view) // when binding the view (i.e. INavigationManager.BindMarkerDetailsView(Guid markerId)) Tracing.Log("MobileNavigationManager - BindMobileMainView"); _mainView = view; + _mainPresenter = Bootstrapper.GetContainer().Resolve(); _mainView.OnViewDestroy = (view2) => { _mainPresenter.ViewDestroyed(); @@ -304,236 +277,221 @@ public virtual void BindMobileMainView(IMobileMainView view) _mainView = null; }; _mainPresenter.BindView(view); + +#if ANDROID + var artistsView = CreateMobileLibraryBrowserView(MobileNavigationTabType.Artists, MobileLibraryBrowserType.Artists, new LibraryQuery()); + _mainView.AddTab(MobileNavigationTabType.Artists, "Artists", MobileLibraryBrowserType.Artists, new LibraryQuery(), artistsView); +#elif IOS + var playlistsView = CreateMobileLibraryBrowserView(MobileNavigationTabType.Playlists, MobileLibraryBrowserType.Playlists, new LibraryQuery()); + var artistsView = CreateMobileLibraryBrowserView(MobileNavigationTabType.Artists, MobileLibraryBrowserType.Artists, new LibraryQuery()); + var albumsView = CreateMobileLibraryBrowserView(MobileNavigationTabType.Albums, MobileLibraryBrowserType.Albums, new LibraryQuery()); + var songsView = CreateMobileLibraryBrowserView(MobileNavigationTabType.Songs, MobileLibraryBrowserType.Songs, new LibraryQuery()); + var moreView = CreateOptionsMenuView(); + _mainView.AddTab(MobileNavigationTabType.Playlists, "Sessions", MobileLibraryBrowserType.Playlists, new LibraryQuery(), playlistsView); + _mainView.AddTab(MobileNavigationTabType.Artists, "Artists", MobileLibraryBrowserType.Artists, new LibraryQuery(), artistsView); + _mainView.AddTab(MobileNavigationTabType.Albums, "Albums", MobileLibraryBrowserType.Albums, new LibraryQuery(), albumsView); + _mainView.AddTab(MobileNavigationTabType.Songs, "Songs", MobileLibraryBrowserType.Songs, new LibraryQuery(), songsView); + _mainView.AddTab(MobileNavigationTabType.More, "More", moreView); +#endif } public virtual IUpdateLibraryView CreateUpdateLibraryView() { - // The view invokes the OnViewReady action when the view is ready. This means the presenter can be created and bound to the view. - Action onViewReady = (view) => - { - _updateLibraryPresenter = Bootstrapper.GetContainer().Resolve(); - _updateLibraryPresenter.BindView((IUpdateLibraryView)view); - }; + _updateLibraryView = Bootstrapper.GetContainer().Resolve(); + return _updateLibraryView; + } - // Create view and manage view destruction - _updateLibraryView = Bootstrapper.GetContainer().Resolve(new NamedParameterOverloads() { { "onViewReady", onViewReady } }); - _updateLibraryView.OnViewDestroy = (view) => + public virtual void BindUpdateLibraryView(IUpdateLibraryView view) + { + _updateLibraryView = view; + _updateLibraryPresenter = Bootstrapper.GetContainer().Resolve(); + _updateLibraryPresenter.BindView(view); + _updateLibraryView.OnViewDestroy = (view2) => { _updateLibraryPresenter.ViewDestroyed(); _updateLibraryPresenter = null; _updateLibraryView = null; }; - return _updateLibraryView; } public virtual ISelectPlaylistView CreateSelectPlaylistView(LibraryBrowserEntity item) { - // The view invokes the OnViewReady action when the view is ready. This means the presenter can be created and bound to the view. - Action onViewReady = (view) => - { - _selectPlaylistPresenter = Bootstrapper.GetContainer().Resolve(new NamedParameterOverloads() { { "item", item } }); - _selectPlaylistPresenter.BindView((ISelectPlaylistView)view); - }; + _selectPlaylistView = Bootstrapper.GetContainer().Resolve(new NamedParameterOverloads() { { "item", item } }); + return _selectPlaylistView; + } - // Create view and manage view destruction - _selectPlaylistView = Bootstrapper.GetContainer().Resolve(new NamedParameterOverloads() { { "onViewReady", onViewReady } }); - _selectPlaylistView.OnViewDestroy = (view) => + public virtual void BindSelectPlaylistView(ISelectPlaylistView view, LibraryBrowserEntity item) + { + _selectPlaylistView = view; + _selectPlaylistPresenter = Bootstrapper.GetContainer().Resolve(new NamedParameterOverloads() { { "item", item } }); + _selectPlaylistPresenter.BindView(view); + _selectPlaylistView.OnViewDestroy = (view2) => { _selectPlaylistPresenter.ViewDestroyed(); _selectPlaylistPresenter = null; _selectPlaylistView = null; - }; - return _selectPlaylistView; + }; } public virtual IAddPlaylistView CreateAddPlaylistView() { - // The view invokes the OnViewReady action when the view is ready. This means the presenter can be created and bound to the view. - Action onViewReady = (view) => - { - _addPlaylistPresenter = Bootstrapper.GetContainer().Resolve(); - _addPlaylistPresenter.BindView((IAddPlaylistView)view); - }; + _addPlaylistView = Bootstrapper.GetContainer().Resolve(); + return _addPlaylistView; + } - // Create view and manage view destruction - _addPlaylistView = Bootstrapper.GetContainer().Resolve(new NamedParameterOverloads() { { "onViewReady", onViewReady } }); - _addPlaylistView.OnViewDestroy = (view) => + public virtual void BindAddPlaylistView(IAddPlaylistView view) + { + _addPlaylistView = view; + _addPlaylistPresenter = Bootstrapper.GetContainer().Resolve(); + _addPlaylistPresenter.BindView(view); + _addPlaylistView.OnViewDestroy = (view2) => { _addPlaylistPresenter.ViewDestroyed(); _addPlaylistPresenter = null; _addPlaylistView = null; - }; - return _addPlaylistView; + }; } public virtual ISelectFoldersView CreateSelectFoldersView() { - // The view invokes the OnViewReady action when the view is ready. This means the presenter can be created and bound to the view. - Action onViewReady = (view) => - { - _selectFoldersPresenter = Bootstrapper.GetContainer().Resolve(); - _selectFoldersPresenter.BindView((ISelectFoldersView)view); - }; + _selectFoldersView = Bootstrapper.GetContainer().Resolve(); + return _selectFoldersView; + } - // Create view and manage view destruction - _selectFoldersView = Bootstrapper.GetContainer().Resolve(new NamedParameterOverloads() { { "onViewReady", onViewReady } }); - _selectFoldersView.OnViewDestroy = (view) => + public virtual void BindSelectFoldersView(ISelectFoldersView view) + { + _selectFoldersView = view; + _selectFoldersPresenter = Bootstrapper.GetContainer().Resolve(); + _selectFoldersPresenter.BindView(view); + _selectFoldersView.OnViewDestroy = (view2) => { _selectFoldersPresenter.ViewDestroyed(); _selectFoldersPresenter = null; _selectFoldersView = null; }; - return _selectFoldersView; } public virtual IAddMarkerView CreateAddMarkerView() { - // The view invokes the OnViewReady action when the view is ready. This means the presenter can be created and bound to the view. - Action onViewReady = (view) => - { - _addMarkerPresenter = Bootstrapper.GetContainer().Resolve(); - _addMarkerPresenter.BindView((IAddMarkerView)view); - }; + _addMarkerView = Bootstrapper.GetContainer().Resolve(); + return _addMarkerView; + } - // Create view and manage view destruction - _addMarkerView = Bootstrapper.GetContainer().Resolve(new NamedParameterOverloads() { { "onViewReady", onViewReady } }); - _addMarkerView.OnViewDestroy = (view) => + public virtual void BindAddMarkerView(IAddMarkerView view) + { + _addMarkerView = view; + _addMarkerPresenter = Bootstrapper.GetContainer().Resolve(); + _addMarkerPresenter.BindView(view); + _addMarkerView.OnViewDestroy = (view2) => { _addMarkerPresenter.ViewDestroyed(); _addMarkerPresenter = null; _addMarkerView = null; }; - return _addMarkerView; } - protected virtual void CreatePreferencesViewInternal(Action onViewReady) + public virtual void CreatePreferencesView() { if(_preferencesView == null) - _preferencesView = Bootstrapper.GetContainer().Resolve(new NamedParameterOverloads() { { "onViewReady", onViewReady } }); - - // Android activities are started by an intent and cannot be pushed like iOS -#if !ANDROID - PushTabView(MobileNavigationTabType.More, _preferencesView); -#endif + _preferencesView = Bootstrapper.GetContainer().Resolve(); } - public virtual void CreatePreferencesView() + public virtual void BindPreferencesView(IPreferencesView view) { - Action onViewReady = (view) => { - _preferencesView = (IPreferencesView)view; - _preferencesView.OnViewDestroy = (view2) => - { - _preferencesPresenter.ViewDestroyed(); - _preferencesPresenter = null; - _preferencesView = null; - }; - _preferencesPresenter = Bootstrapper.GetContainer().Resolve(); - _preferencesPresenter.BindView((IPreferencesView)view); + _preferencesView = view; + _preferencesView.OnViewDestroy = (view2) => + { + _preferencesPresenter.ViewDestroyed(); + _preferencesPresenter = null; + _preferencesView = null; + }; + _preferencesPresenter = Bootstrapper.GetContainer().Resolve(); + _preferencesPresenter.BindView(view); #if ANDROID - // On Android, push subviews for preferences since there's generally more space on screen and swiping horizontally is more natural. - var general = CreateGeneralPreferencesView(); - var audio = CreateAudioPreferencesView(); - var library = CreateLibraryPreferencesView(); - _preferencesView.PushSubView(general); - _preferencesView.PushSubView(audio); - _preferencesView.PushSubView(library); + // On Android, push subviews for preferences since there's generally more space on screen and swiping horizontally is more natural. + var general = CreateGeneralPreferencesView(); + var audio = CreateAudioPreferencesView(); + var library = CreateLibraryPreferencesView(); + _preferencesView.PushSubView(general); + _preferencesView.PushSubView(audio); + _preferencesView.PushSubView(library); #endif - }; - - CreatePreferencesViewInternal(onViewReady); } public virtual IAudioPreferencesView CreateAudioPreferencesView() { - // The view invokes the OnViewReady action when the view is ready. This means the presenter can be created and bound to the view. - Action onViewReady = (view) => - { - _audioPreferencesPresenter = Bootstrapper.GetContainer().Resolve(); - _audioPreferencesPresenter.BindView((IAudioPreferencesView)view); - }; + _audioPreferencesView = Bootstrapper.GetContainer().Resolve(); + return _audioPreferencesView; + } - // Create view and manage view destruction - if(_audioPreferencesView == null) + public virtual void BindAudioPreferencesView(IAudioPreferencesView view) + { + _audioPreferencesView = view; + _audioPreferencesPresenter = Bootstrapper.GetContainer().Resolve(); + _audioPreferencesPresenter.BindView(view); + _audioPreferencesView.OnViewDestroy = (view2) => { - _audioPreferencesView = Bootstrapper.GetContainer().Resolve(new NamedParameterOverloads() { { "onViewReady", onViewReady } }); - _audioPreferencesView.OnViewDestroy = (view) => - { - _audioPreferencesPresenter.ViewDestroyed(); - _audioPreferencesPresenter = null; - _audioPreferencesView = null; - }; - } - return _audioPreferencesView; + _audioPreferencesPresenter.ViewDestroyed(); + _audioPreferencesPresenter = null; + _audioPreferencesView = null; + }; } public virtual ICloudPreferencesView CreateCloudPreferencesView() { - // The view invokes the OnViewReady action when the view is ready. This means the presenter can be created and bound to the view. - Action onViewReady = (view) => - { - _cloudPreferencesPresenter = Bootstrapper.GetContainer().Resolve(); - _cloudPreferencesPresenter.BindView((ICloudPreferencesView)view); - }; + _cloudPreferencesView = Bootstrapper.GetContainer().Resolve(); + return _cloudPreferencesView; + } - // Create view and manage view destruction - if(_cloudPreferencesView == null) + public virtual void BindCloudPreferencesView(ICloudPreferencesView view) + { + _cloudPreferencesView = view; + _cloudPreferencesPresenter = Bootstrapper.GetContainer().Resolve(); + _cloudPreferencesPresenter.BindView(view); + _cloudPreferencesView.OnViewDestroy = (view2) => { - _cloudPreferencesView = Bootstrapper.GetContainer().Resolve(new NamedParameterOverloads() { { "onViewReady", onViewReady } }); - _cloudPreferencesView.OnViewDestroy = (view) => - { - _cloudPreferencesPresenter.ViewDestroyed(); - _cloudPreferencesPresenter = null; - _cloudPreferencesView = null; - }; - } - return _cloudPreferencesView; + _cloudPreferencesPresenter.ViewDestroyed(); + _cloudPreferencesPresenter = null; + _cloudPreferencesView = null; + }; } public virtual IGeneralPreferencesView CreateGeneralPreferencesView() { - // The view invokes the OnViewReady action when the view is ready. This means the presenter can be created and bound to the view. - Action onViewReady = (view) => - { - _generalPreferencesPresenter = Bootstrapper.GetContainer().Resolve(); - _generalPreferencesPresenter.BindView((IGeneralPreferencesView)view); - }; + _generalPreferencesView = Bootstrapper.GetContainer().Resolve(); + return _generalPreferencesView; + } - // Create view and manage view destruction - if(_generalPreferencesView == null) + public virtual void BindGeneralPreferencesView(IGeneralPreferencesView view) + { + _generalPreferencesView = view; + _generalPreferencesPresenter = Bootstrapper.GetContainer().Resolve(); + _generalPreferencesPresenter.BindView(view); + _generalPreferencesView.OnViewDestroy = (view2) => { - _generalPreferencesView = Bootstrapper.GetContainer().Resolve(new NamedParameterOverloads() { { "onViewReady", onViewReady } }); - _generalPreferencesView.OnViewDestroy = (view) => - { - _generalPreferencesPresenter.ViewDestroyed(); - _generalPreferencesPresenter = null; - _generalPreferencesView = null; - }; - } - return _generalPreferencesView; + _generalPreferencesPresenter.ViewDestroyed(); + _generalPreferencesPresenter = null; + _generalPreferencesView = null; + }; } public virtual ILibraryPreferencesView CreateLibraryPreferencesView() { - // The view invokes the OnViewReady action when the view is ready. This means the presenter can be created and bound to the view. - Action onViewReady = (view) => - { - _libraryPreferencesPresenter = Bootstrapper.GetContainer().Resolve(); - _libraryPreferencesPresenter.BindView((ILibraryPreferencesView)view); - }; + _libraryPreferencesView = Bootstrapper.GetContainer().Resolve(); + return _libraryPreferencesView; + } - // Create view and manage view destruction - if(_libraryPreferencesView == null) + public virtual void BindLibraryPreferencesView(ILibraryPreferencesView view) + { + _libraryPreferencesPresenter = Bootstrapper.GetContainer().Resolve(); + _libraryPreferencesPresenter.BindView(view); + _libraryPreferencesView.OnViewDestroy = (view2) => { - _libraryPreferencesView = Bootstrapper.GetContainer().Resolve(new NamedParameterOverloads() { { "onViewReady", onViewReady } }); - _libraryPreferencesView.OnViewDestroy = (view) => - { - _libraryPreferencesPresenter.ViewDestroyed(); - _libraryPreferencesPresenter = null; - _libraryPreferencesView = null; - }; - } - return _libraryPreferencesView; + _libraryPreferencesPresenter.ViewDestroyed(); + _libraryPreferencesPresenter = null; + _libraryPreferencesView = null; + }; } protected IMobileLibraryBrowserPresenter GetMobileLibraryBrowserPresenter(MobileNavigationTabType tabType, MobileLibraryBrowserType browserType) @@ -596,94 +554,74 @@ public virtual IMobileLibraryBrowserView CreateMobileLibraryBrowserView(MobileNa return newView; } - protected virtual void CreatePlayerViewInternal(MobileNavigationTabType tabType, Action onViewReady) + public virtual void CreatePlayerView(MobileNavigationTabType tabType) { if (_playerView == null) - _playerView = Bootstrapper.GetContainer().Resolve(new NamedParameterOverloads() { { "onViewReady", onViewReady } }); - -#if !ANDROID - PushTabView(tabType, _playerView); -#endif + _playerView = Bootstrapper.GetContainer().Resolve(); } - public virtual void CreatePlayerView(MobileNavigationTabType tabType, Action onViewBindedToPresenter) + public virtual void BindPlayerView(MobileNavigationTabType tabType, IPlayerView view) { - Action onViewReady = (view) => { - _playerView = (IPlayerView) view; - _playerView.OnViewDestroy = (view2) => - { - _playerPresenter.ViewDestroyed(); - _playerPresenter = null; - _playerView = null; - }; - _playerPresenter = Bootstrapper.GetContainer().Resolve(); - _playerPresenter.BindView((IPlayerView)view); - - var playerMetadata = CreatePlayerMetadataView(); - var loops = CreateLoopsView(); - var markers = CreateMarkersView(); - var timeShifting = CreateTimeShiftingView(); - var pitchShifting = CreatePitchShiftingView(); - - _playerView.PushSubView(playerMetadata); - _playerView.PushSubView(loops); - _playerView.PushSubView(markers); - _playerView.PushSubView(timeShifting); - _playerView.PushSubView(pitchShifting); - - if (onViewBindedToPresenter != null) - onViewBindedToPresenter(view); + _playerView = view; + _playerView.OnViewDestroy = (view2) => + { + _playerPresenter.ViewDestroyed(); + _playerPresenter = null; + _playerView = null; }; + _playerPresenter = Bootstrapper.GetContainer().Resolve(); + _playerPresenter.BindView(view); - if(_playerView == null) - { - CreatePlayerViewInternal(tabType, onViewReady); - } - else - { - onViewBindedToPresenter(_playerView); - PushTabView(tabType, MobileLibraryBrowserType.Artists, new LibraryQuery(), _playerView); - } + // Create sub views + var playerMetadata = CreatePlayerMetadataView(); + var loops = CreateLoopsView(); + var markers = CreateMarkersView(); + var timeShifting = CreateTimeShiftingView(); + var pitchShifting = CreatePitchShiftingView(); + + _playerView.PushSubView(playerMetadata); + _playerView.PushSubView(loops); + _playerView.PushSubView(markers); + _playerView.PushSubView(timeShifting); + _playerView.PushSubView(pitchShifting); } public virtual IPlayerMetadataView CreatePlayerMetadataView() { - // The view invokes the OnViewReady action when the view is ready. This means the presenter can be created and bound to the view. - Action onViewReady = (view) => - { - _playerMetadataPresenter = Bootstrapper.GetContainer().Resolve(); - _playerMetadataPresenter.BindView((IPlayerMetadataView)view); - }; - - // Create view and manage view destruction - _playerMetadataView = Bootstrapper.GetContainer().Resolve(new NamedParameterOverloads() { { "onViewReady", onViewReady } }); - _playerMetadataView.OnViewDestroy = (view) => + _playerMetadataView = Bootstrapper.GetContainer().Resolve(); + return _playerMetadataView; + } + + public virtual void BindPlayerMetadataView(IPlayerMetadataView view) + { + _playerMetadataView = view; + _playerMetadataPresenter = Bootstrapper.GetContainer().Resolve(); + _playerMetadataPresenter.BindView(view); + _playerMetadataView.OnViewDestroy = (view2) => { _playerMetadataPresenter.ViewDestroyed(); _playerMetadataPresenter = null; _playerMetadataView = null; }; - return _playerMetadataView; } public virtual ILoopsView CreateLoopsView() { - // The view invokes the OnViewReady action when the view is ready. This means the presenter can be created and bound to the view. - Action onViewReady = (view) => - { - _loopsPresenter = Bootstrapper.GetContainer().Resolve(); - _loopsPresenter.BindView((ILoopsView)view); - }; - - // Create view and manage view destruction - _loopsView = Bootstrapper.GetContainer().Resolve(new NamedParameterOverloads() { { "onViewReady", onViewReady } }); - _loopsView.OnViewDestroy = (view) => + _loopsView = Bootstrapper.GetContainer().Resolve(); + return _loopsView; + } + + public virtual void BindLoopsView(ILoopsView view) + { + _loopsView = view; + _loopsPresenter = Bootstrapper.GetContainer().Resolve(); + _loopsPresenter.BindView(view); + _loopsView.OnViewDestroy = (view2) => { _loopsPresenter.ViewDestroyed(); _loopsPresenter = null; _loopsView = null; }; - return _loopsView; } public virtual ILoopDetailsView CreateLoopDetailsView() @@ -708,457 +646,339 @@ public virtual ILoopDetailsView CreateLoopDetailsView() public virtual IMarkersView CreateMarkersView() { - // The view invokes the OnViewReady action when the view is ready. This means the presenter can be created and bound to the view. - Action onViewReady = (view) => - { - _markersPresenter = Bootstrapper.GetContainer().Resolve(); - _markersPresenter.BindView((IMarkersView)view); - }; - - // Create view and manage view destruction - _markersView = Bootstrapper.GetContainer().Resolve(new NamedParameterOverloads() { { "onViewReady", onViewReady } }); - _markersView.OnViewDestroy = (view) => + _markersView = Bootstrapper.GetContainer().Resolve(); + return _markersView; + } + + public virtual void BindMarkersView(IMarkersView view) + { + _markersView = view; + _markersPresenter = Bootstrapper.GetContainer().Resolve(); + _markersPresenter.BindView(view); + _markersView.OnViewDestroy = (view2) => { _markersPresenter.ViewDestroyed(); _markersPresenter = null; _markersView = null; - }; - return _markersView; + }; } - protected virtual void CreateMarkerDetailsViewInternal(IBaseView sourceView, Action onViewReady) + public virtual void CreateMarkerDetailsView(IBaseView sourceView, Guid markerId) { if (_markerDetailsView == null) - _markerDetailsView = Bootstrapper.GetContainer().Resolve(new NamedParameterOverloads() { { "onViewReady", onViewReady } }); - -#if !ANDROID - PushDialogView(MobileDialogPresentationType.Standard, "Marker Details", sourceView, _markerDetailsView); -#endif + _markerDetailsView = Bootstrapper.GetContainer().Resolve(new NamedParameterOverloads() { { "markerId", markerId } }); } - public virtual void CreateMarkerDetailsView(IBaseView sourceView, Guid markerId) + public virtual void BindMarkerDetailsView(IMarkerDetailsView view, Guid markerId) { - Action onViewReady = (view) => + _markerDetailsView = view; + _markerDetailsPresenter = Bootstrapper.GetContainer().Resolve(new NamedParameterOverloads() { { "markerId", markerId } }); + _markerDetailsPresenter.BindView(view); + _markerDetailsView.OnViewDestroy = (view2) => { - _markerDetailsView = (IMarkerDetailsView)view; - _markerDetailsView.OnViewDestroy = (view2) => - { - _markerDetailsPresenter.ViewDestroyed(); - _markerDetailsPresenter = null; - _markerDetailsView = null; - }; - _markerDetailsPresenter = Bootstrapper.GetContainer().Resolve(new NamedParameterOverloads() { { "markerId", markerId } }); - _markerDetailsPresenter.BindView((IMarkerDetailsView)view); - }; - - CreateMarkerDetailsViewInternal(sourceView, onViewReady); + _markerDetailsPresenter.ViewDestroyed(); + _markerDetailsPresenter = null; + _markerDetailsView = null; + }; } public virtual ITimeShiftingView CreateTimeShiftingView() { - // The view invokes the OnViewReady action when the view is ready. This means the presenter can be created and bound to the view. - Action onViewReady = (view) => - { - _timeShiftingPresenter = Bootstrapper.GetContainer().Resolve(); - _timeShiftingPresenter.BindView((ITimeShiftingView)view); - }; - - // Create view and manage view destruction - _timeShiftingView = Bootstrapper.GetContainer().Resolve(new NamedParameterOverloads() { { "onViewReady", onViewReady } }); - _timeShiftingView.OnViewDestroy = (view) => + _timeShiftingView = Bootstrapper.GetContainer().Resolve(); + return _timeShiftingView; + } + + public virtual void BindTimeShiftingView(ITimeShiftingView view) + { + _timeShiftingView = view; + _timeShiftingPresenter = Bootstrapper.GetContainer().Resolve(); + _timeShiftingPresenter.BindView(view); + _timeShiftingView.OnViewDestroy = (view2) => { _timeShiftingPresenter.ViewDestroyed(); _timeShiftingPresenter = null; _timeShiftingView = null; }; - return _timeShiftingView; } public virtual IPitchShiftingView CreatePitchShiftingView() { - // The view invokes the OnViewReady action when the view is ready. This means the presenter can be created and bound to the view. - Action onViewReady = (view) => - { - _pitchShiftingPresenter = Bootstrapper.GetContainer().Resolve(); - _pitchShiftingPresenter.BindView((IPitchShiftingView)view); - }; - - // Create view and manage view destruction - _pitchShiftingView = Bootstrapper.GetContainer().Resolve(new NamedParameterOverloads() { { "onViewReady", onViewReady } }); - _pitchShiftingView.OnViewDestroy = (view) => + _pitchShiftingView = Bootstrapper.GetContainer().Resolve(); + return _pitchShiftingView; + } + + public virtual void BindPitchShiftingView(IPitchShiftingView view) + { + _pitchShiftingView = view; + _pitchShiftingPresenter = Bootstrapper.GetContainer().Resolve(); + _pitchShiftingPresenter.BindView(view); + _pitchShiftingView.OnViewDestroy = (view2) => { _pitchShiftingPresenter.ViewDestroyed(); _pitchShiftingPresenter = null; _pitchShiftingView = null; }; - return _pitchShiftingView; } - protected virtual void CreateEqualizerPresetsViewInternal(IBaseView sourceView, Action onViewReady) + public virtual void CreateEqualizerPresetsView(IBaseView sourceView) { if(_equalizerPresetsView == null) - _equalizerPresetsView = Bootstrapper.GetContainer().Resolve(new NamedParameterOverloads() { { "onViewReady", onViewReady } }); - -#if !ANDROID - PushDialogView(MobileDialogPresentationType.Standard, "Equalizer Presets", null, _equalizerPresetsView); -#endif + _equalizerPresetsView = Bootstrapper.GetContainer().Resolve(); } - public virtual void CreateEqualizerPresetsView(IBaseView sourceView) + public virtual void BindEqualizerPresetsView(IBaseView sourceView, IEqualizerPresetsView view) { - Action onViewReady = (view) => + _equalizerPresetsView = view; + _equalizerPresetsView.OnViewDestroy = (view2) => { - _equalizerPresetsView = (IEqualizerPresetsView)view; - _equalizerPresetsView.OnViewDestroy = (view2) => - { - _equalizerPresetsPresenter.ViewDestroyed(); - _equalizerPresetsPresenter = null; - _equalizerPresetsView = null; - }; - _equalizerPresetsPresenter = Bootstrapper.GetContainer().Resolve(); - _equalizerPresetsPresenter.BindView((IEqualizerPresetsView)view); + _equalizerPresetsPresenter.ViewDestroyed(); + _equalizerPresetsPresenter = null; + _equalizerPresetsView = null; }; - - CreateEqualizerPresetsViewInternal(sourceView, onViewReady); + _equalizerPresetsPresenter = Bootstrapper.GetContainer().Resolve(); + _equalizerPresetsPresenter.BindView(view); } - protected virtual void CreateEqualizerPresetDetailsViewInternal(IBaseView sourceView, Action onViewReady) + public virtual void CreateEqualizerPresetDetailsView(IBaseView sourceView, Guid presetId) { if (_equalizerPresetDetailsView == null) - _equalizerPresetDetailsView = Bootstrapper.GetContainer().Resolve(new NamedParameterOverloads() { { "onViewReady", onViewReady } }); - -#if !ANDROID - PushDialogSubview(MobileDialogPresentationType.Standard, "Equalizer Presets", _equalizerPresetDetailsView); -#endif + _equalizerPresetDetailsView = Bootstrapper.GetContainer().Resolve(new NamedParameterOverloads() { { "presetId", presetId } }); } - public virtual void CreateEqualizerPresetDetailsView(IBaseView sourceView, EQPreset preset) + public virtual void BindEqualizerPresetDetailsView(IBaseView sourceView, IEqualizerPresetDetailsView view, Guid presetId) { - Action onViewReady = (view) => + _equalizerPresetDetailsView = view; + _equalizerPresetDetailsView.OnViewDestroy = (view2) => { - _equalizerPresetDetailsView = (IEqualizerPresetDetailsView)view; - _equalizerPresetDetailsView.OnViewDestroy = (view2) => - { - _equalizerPresetDetailsPresenter.ViewDestroyed(); - _equalizerPresetDetailsPresenter = null; - _equalizerPresetDetailsView = null; - }; - _equalizerPresetDetailsPresenter = Bootstrapper.GetContainer().Resolve(new NamedParameterOverloads(){{"preset", preset}}); - _equalizerPresetDetailsPresenter.BindView((IEqualizerPresetDetailsView)view); + _equalizerPresetDetailsPresenter.ViewDestroyed(); + _equalizerPresetDetailsPresenter = null; + _equalizerPresetDetailsView = null; }; - - CreateEqualizerPresetDetailsViewInternal(sourceView, onViewReady); + _equalizerPresetDetailsPresenter = Bootstrapper.GetContainer().Resolve(new NamedParameterOverloads(){{"presetId", presetId}}); + _equalizerPresetDetailsPresenter.BindView(view); } - protected virtual void CreateSyncViewInternal(Action onViewReady) + public virtual void CreateSyncView() { if (_syncView == null) - _syncView = Bootstrapper.GetContainer().Resolve(new NamedParameterOverloads() { { "onViewReady", onViewReady } }); - -#if !ANDROID - PushTabView(MobileNavigationTabType.More, _syncView); -#endif + _syncView = Bootstrapper.GetContainer().Resolve(); } - public virtual void CreateSyncView() + public virtual void BindSyncView(ISyncView view) { - Action onViewReady = (view) => + _syncView = view; + _syncView.OnViewDestroy = (view2) => { - _syncView = (ISyncView)view; - _syncView.OnViewDestroy = (view2) => - { - _syncPresenter.ViewDestroyed(); - _syncPresenter = null; - _syncView = null; - }; - _syncPresenter = Bootstrapper.GetContainer().Resolve(); - _syncPresenter.BindView((ISyncView)view); + _syncPresenter.ViewDestroyed(); + _syncPresenter = null; + _syncView = null; }; - - CreateSyncViewInternal(onViewReady); + _syncPresenter = Bootstrapper.GetContainer().Resolve(); + _syncPresenter.BindView(view); } - protected virtual void CreateSyncWebBrowserViewInternal(Action onViewReady) + public virtual void CreateSyncWebBrowserView() { if (_syncWebBrowserView == null) - _syncWebBrowserView = Bootstrapper.GetContainer().Resolve(new NamedParameterOverloads() { { "onViewReady", onViewReady } }); - -#if !ANDROID - PushTabView(MobileNavigationTabType.More, _syncWebBrowserView); -#endif + _syncWebBrowserView = Bootstrapper.GetContainer().Resolve(); } - public virtual void CreateSyncWebBrowserView() + public virtual void BindSyncWebBrowserView(ISyncWebBrowserView view) { - Action onViewReady = (view) => + _syncWebBrowserView = view; + _syncWebBrowserView.OnViewDestroy = (view2) => { - _syncWebBrowserView = (ISyncWebBrowserView)view; - _syncWebBrowserView.OnViewDestroy = (view2) => - { - _syncWebBrowserPresenter.ViewDestroyed(); - _syncWebBrowserPresenter = null; - _syncWebBrowserView = null; - }; - _syncWebBrowserPresenter = Bootstrapper.GetContainer().Resolve(); - _syncWebBrowserPresenter.BindView((ISyncWebBrowserView)view); + _syncWebBrowserPresenter.ViewDestroyed(); + _syncWebBrowserPresenter = null; + _syncWebBrowserView = null; }; - - CreateSyncWebBrowserViewInternal(onViewReady); + _syncWebBrowserPresenter = Bootstrapper.GetContainer().Resolve(); + _syncWebBrowserPresenter.BindView(view); } - protected virtual void CreateSyncCloudViewInternal(Action onViewReady) + public virtual void CreateSyncCloudView() { if (_syncCloudView == null) - _syncCloudView = Bootstrapper.GetContainer().Resolve(new NamedParameterOverloads() { { "onViewReady", onViewReady } }); - -#if !ANDROID - PushTabView(MobileNavigationTabType.More, _syncCloudView); -#endif + _syncCloudView = Bootstrapper.GetContainer().Resolve(); } - public virtual void CreateSyncCloudView() + public virtual void BindSyncCloudView(ISyncCloudView view) { - Action onViewReady = (view) => + _syncCloudView = view; + _syncCloudView.OnViewDestroy = (view2) => { - _syncCloudView = (ISyncCloudView)view; - _syncCloudView.OnViewDestroy = (view2) => - { - _syncCloudPresenter.ViewDestroyed(); - _syncCloudPresenter = null; - _syncCloudPresenter = null; - }; - _syncCloudPresenter = Bootstrapper.GetContainer().Resolve(); - _syncCloudPresenter.BindView((ISyncCloudView)view); + _syncCloudPresenter.ViewDestroyed(); + _syncCloudPresenter = null; + _syncCloudView = null; }; - - CreateSyncCloudViewInternal(onViewReady); + _syncCloudPresenter = Bootstrapper.GetContainer().Resolve(); + _syncCloudPresenter.BindView(view); } - protected virtual void CreateSyncMenuViewInternal(Action onViewReady, SyncDevice device) + public virtual void CreateSyncMenuView(SyncDevice device) { + //if (_syncMenuView == null) + // _syncMenuView = Bootstrapper.GetContainer().Resolve(new NamedParameterOverloads() { { "onViewReady", onViewReady } }); + //else + // _syncMenuPresenter.SetSyncDevice(device); + if (_syncMenuView == null) - _syncMenuView = Bootstrapper.GetContainer().Resolve(new NamedParameterOverloads() { { "onViewReady", onViewReady } }); - else - _syncMenuPresenter.SetSyncDevice(device); - -#if !ANDROID - PushTabView(MobileNavigationTabType.More, _syncMenuView); -#endif + _syncMenuView = Bootstrapper.GetContainer().Resolve(); } - public virtual void CreateSyncMenuView(SyncDevice device) + public virtual void BindSyncMenuView(ISyncMenuView view, SyncDevice device) { - Action onViewReady = (view) => + _syncMenuView = view; + _syncMenuView.OnViewDestroy = (view2) => { - _syncMenuView = (ISyncMenuView)view; - _syncMenuView.OnViewDestroy = (view2) => - { - _syncMenuPresenter.ViewDestroyed(); - _syncMenuPresenter = null; - _syncMenuView = null; - }; - _syncMenuPresenter = Bootstrapper.GetContainer().Resolve(); - _syncMenuPresenter.BindView((ISyncMenuView)view); - _syncMenuPresenter.SetSyncDevice(device); + _syncMenuPresenter.ViewDestroyed(); + _syncMenuPresenter = null; + _syncMenuView = null; }; - - CreateSyncMenuViewInternal(onViewReady, device); + _syncMenuPresenter = Bootstrapper.GetContainer().Resolve(); + _syncMenuPresenter.BindView(view); + // Move this to ctor! + //_syncMenuPresenter.SetSyncDevice(device); } - protected virtual void CreateSyncDownloadViewInternal(Action onViewReady, SyncDevice device, IEnumerable audioFiles) + public virtual void CreateSyncDownloadView(SyncDevice device, IEnumerable audioFiles) { - if (_syncDownloadView == null) - _syncDownloadView = Bootstrapper.GetContainer().Resolve(new NamedParameterOverloads() { { "onViewReady", onViewReady } }); - else - _syncDownloadPresenter.StartSync(device, audioFiles); + //if (_syncDownloadView == null) + // _syncDownloadView = Bootstrapper.GetContainer().Resolve(new NamedParameterOverloads() { { "onViewReady", onViewReady } }); + //else + // _syncDownloadPresenter.StartSync(device, audioFiles); -#if !ANDROID - PushTabView(MobileNavigationTabType.More, _syncDownloadView); -#endif + if (_syncDownloadView == null) + _syncDownloadView = Bootstrapper.GetContainer().Resolve(); } - public virtual void CreateSyncDownloadView(SyncDevice device, IEnumerable audioFiles) + public virtual void BindSyncDownloadView(ISyncDownloadView view, SyncDevice device, IEnumerable audioFiles) { - Action onViewReady = (view) => + _syncDownloadView = view; + _syncDownloadView.OnViewDestroy = (view2) => { - _syncDownloadView = (ISyncDownloadView)view; - _syncDownloadView.OnViewDestroy = (view2) => - { - _syncDownloadPresenter.ViewDestroyed(); - _syncDownloadPresenter = null; - _syncDownloadView = null; - }; - _syncDownloadPresenter = Bootstrapper.GetContainer().Resolve(); - _syncDownloadPresenter.BindView((ISyncDownloadView)view); - _syncDownloadPresenter.StartSync(device, audioFiles); + _syncDownloadPresenter.ViewDestroyed(); + _syncDownloadPresenter = null; + _syncDownloadView = null; }; - - CreateSyncDownloadViewInternal(onViewReady, device, audioFiles); + _syncDownloadPresenter = Bootstrapper.GetContainer().Resolve(); + _syncDownloadPresenter.BindView(view); + // Move to Ctor + //_syncDownloadPresenter.StartSync(device, audioFiles); } - protected virtual void CreateAboutViewInternal(Action onViewReady) + public virtual void CreateAboutView() { if (_aboutView == null) - _aboutView = Bootstrapper.GetContainer().Resolve(new NamedParameterOverloads() { { "onViewReady", onViewReady } }); - -#if !ANDROID - PushTabView(MobileNavigationTabType.More, _aboutView); -#endif + _aboutView = Bootstrapper.GetContainer().Resolve(); } - public virtual void CreateAboutView() + public virtual void BindAboutView(IAboutView view) { - Action onViewReady = (view) => + _aboutView = view; + _aboutView.OnViewDestroy = (view2) => { - _aboutView = (IAboutView)view; - _aboutView.OnViewDestroy = (view2) => - { - _aboutPresenter.ViewDestroyed(); - _aboutPresenter = null; - _aboutView = null; - }; - _aboutPresenter = Bootstrapper.GetContainer().Resolve(); - _aboutPresenter.BindView((IAboutView)view); + _aboutPresenter.ViewDestroyed(); + _aboutPresenter = null; + _aboutView = null; }; - - CreateAboutViewInternal(onViewReady); + _aboutPresenter = Bootstrapper.GetContainer().Resolve(); + _aboutPresenter.BindView(view); } - protected virtual void CreateFirstRunViewInternal(Action onViewReady) + public virtual void CreateFirstRunView() { if (_firstRunView == null) - _firstRunView = Bootstrapper.GetContainer().Resolve(new NamedParameterOverloads() { { "onViewReady", onViewReady } }); - -#if !ANDROID - PushDialogView(MobileDialogPresentationType.Overlay, "First Run", null, _firstRunView); -#endif + _firstRunView = Bootstrapper.GetContainer().Resolve(); } - public virtual void CreateFirstRunView() + public virtual void BindFirstRunView(IFirstRunView view) { - Action onViewReady = (view) => + _firstRunView = view; + _firstRunView.OnViewDestroy = (view2) => { - _firstRunView = (IFirstRunView)view; - _firstRunView.OnViewDestroy = (view2) => - { - _firstRunPresenter.ViewDestroyed(); - _firstRunPresenter = null; - _firstRunView = null; - }; - _firstRunPresenter = Bootstrapper.GetContainer().Resolve(); - _firstRunPresenter.BindView((IFirstRunView)view); + _firstRunPresenter.ViewDestroyed(); + _firstRunPresenter = null; + _firstRunView = null; }; - - CreateFirstRunViewInternal(onViewReady); + _firstRunPresenter = Bootstrapper.GetContainer().Resolve(); + _firstRunPresenter.BindView(view); } - protected virtual void CreateResumePlaybackViewInternal(Action onViewReady) + public virtual void CreateResumePlaybackView() { if (_resumePlaybackView == null) - _resumePlaybackView = Bootstrapper.GetContainer().Resolve(new NamedParameterOverloads() { { "onViewReady", onViewReady } }); - -#if !ANDROID - PushTabView(MobileNavigationTabType.More, _resumePlaybackView); -#endif + _resumePlaybackView = Bootstrapper.GetContainer().Resolve(); } - public virtual void CreateResumePlaybackView() + public virtual void BindResumePlaybackView(IResumePlaybackView view) { - Action onViewReady = (view) => + _resumePlaybackView = view; + _resumePlaybackView.OnViewDestroy = (view2) => { - _resumePlaybackView = (IResumePlaybackView)view; - _resumePlaybackView.OnViewDestroy = (view2) => - { - _resumePlaybackPresenter.ViewDestroyed(); - _resumePlaybackPresenter = null; - _resumePlaybackView = null; - }; - _resumePlaybackPresenter = Bootstrapper.GetContainer().Resolve(); - _resumePlaybackPresenter.BindView((IResumePlaybackView)view); + _resumePlaybackPresenter.ViewDestroyed(); + _resumePlaybackPresenter = null; + _resumePlaybackView = null; }; - - CreateResumePlaybackViewInternal(onViewReady); + _resumePlaybackPresenter = Bootstrapper.GetContainer().Resolve(); + _resumePlaybackPresenter.BindView(view); } public virtual IStartResumePlaybackView CreateStartResumePlaybackView() { - // The view invokes the OnViewReady action when the view is ready. This means the presenter can be created and bound to the view. - Action onViewReady = (view) => - { - _startResumePlaybackPresenter = Bootstrapper.GetContainer().Resolve(); - _startResumePlaybackPresenter.BindView((IStartResumePlaybackView)view); - }; + _startResumePlaybackView = Bootstrapper.GetContainer().Resolve(); + return _startResumePlaybackView; + } - // Create view and manage view destruction - _startResumePlaybackView = Bootstrapper.GetContainer().Resolve(new NamedParameterOverloads() { { "onViewReady", onViewReady } }); - _startResumePlaybackView.OnViewDestroy = (view) => + public virtual void BindStartResumePlaybackView(IStartResumePlaybackView view) + { + _startResumePlaybackView = view; + _startResumePlaybackPresenter = Bootstrapper.GetContainer().Resolve(); + _startResumePlaybackPresenter.BindView(view); + _startResumePlaybackView.OnViewDestroy = (view2) => { _startResumePlaybackPresenter.ViewDestroyed(); _startResumePlaybackPresenter = null; _startResumePlaybackView = null; - }; - return _startResumePlaybackView; + }; } - protected virtual void CreateCloudConnectViewInternal(Action onViewReady) + public virtual void CreateCloudConnectView() { if (_cloudConnectView == null) - _cloudConnectView = Bootstrapper.GetContainer().Resolve(new NamedParameterOverloads() { { "onViewReady", onViewReady } }); - -#if !ANDROID - PushTabView(MobileNavigationTabType.More, _cloudConnectView); -#endif + _cloudConnectView = Bootstrapper.GetContainer().Resolve(); } - public virtual void CreateCloudConnectView() + public virtual void BindCloudConnectView(ICloudConnectView view) { - Action onViewReady = (view) => + _cloudConnectView = view; + _cloudConnectView.OnViewDestroy = (view2) => { - _cloudConnectView = (ICloudConnectView)view; - _cloudConnectView.OnViewDestroy = (view2) => - { - _cloudConnectPresenter.ViewDestroyed(); - _cloudConnectPresenter = null; - _cloudConnectView = null; - }; - _cloudConnectPresenter = Bootstrapper.GetContainer().Resolve(); - _cloudConnectPresenter.BindView((ICloudConnectView)view); + _cloudConnectPresenter.ViewDestroyed(); + _cloudConnectPresenter = null; + _cloudConnectView = null; }; - - CreateCloudConnectViewInternal(onViewReady); + _cloudConnectPresenter = Bootstrapper.GetContainer().Resolve(); + _cloudConnectPresenter.BindView(view); } - protected virtual void CreatePlaylistViewInternal(IBaseView sourceView, Action onViewReady) + public virtual void CreatePlaylistView(IBaseView sourceView) { if (_playlistView == null) - _playlistView = Bootstrapper.GetContainer().Resolve(new NamedParameterOverloads() { { "onViewReady", onViewReady } }); - -#if !ANDROID - //PushTabView(MobileNavigationTabType.More, _playlistView); - PushDialogView(MobileDialogPresentationType.Standard, "Playlist", sourceView, _playlistView); -#endif + _playlistView = Bootstrapper.GetContainer().Resolve(); } - public virtual void CreatePlaylistView(IBaseView sourceView) + public virtual void BindPlaylistView(IBaseView sourceView, IPlaylistView view) { - Action onViewReady = (view) => + _playlistView = view; + _playlistView.OnViewDestroy = (view2) => { - _playlistView = (IPlaylistView)view; - _playlistView.OnViewDestroy = (view2) => - { - _playlistPresenter.ViewDestroyed(); - _playlistPresenter = null; - _playlistView = null; - }; - _playlistPresenter = Bootstrapper.GetContainer().Resolve(); - _playlistPresenter.BindView((IPlaylistView)view); + _playlistPresenter.ViewDestroyed(); + _playlistPresenter = null; + _playlistView = null; }; - - CreatePlaylistViewInternal(sourceView, onViewReady); - } - - public void CreateMainViewToto() - { + _playlistPresenter = Bootstrapper.GetContainer().Resolve(); + _playlistPresenter.BindView(view); } } diff --git a/MPfm/MPfm.MVP/Presenters/EqualizerPresetsPresenter.cs b/MPfm/MPfm.MVP/Presenters/EqualizerPresetsPresenter.cs index 9bccd522..c30f9e69 100644 --- a/MPfm/MPfm.MVP/Presenters/EqualizerPresetsPresenter.cs +++ b/MPfm/MPfm.MVP/Presenters/EqualizerPresetsPresenter.cs @@ -181,7 +181,7 @@ private void AddPreset() { try { - _mobileNavigationManager.CreateEqualizerPresetDetailsView(View, new EQPreset()); + _mobileNavigationManager.CreateEqualizerPresetDetailsView(View, Guid.Empty); } catch(Exception ex) { @@ -213,7 +213,7 @@ private void EditPreset(Guid presetId) if(preset == null) return; - _mobileNavigationManager.CreateEqualizerPresetDetailsView(View, preset); + _mobileNavigationManager.CreateEqualizerPresetDetailsView(View, preset.EQPresetId); } catch(Exception ex) { diff --git a/MPfm/MPfm.MVP/Presenters/MobileLibraryBrowserPresenter.cs b/MPfm/MPfm.MVP/Presenters/MobileLibraryBrowserPresenter.cs index 059fdfa1..b3f75d07 100644 --- a/MPfm/MPfm.MVP/Presenters/MobileLibraryBrowserPresenter.cs +++ b/MPfm/MPfm.MVP/Presenters/MobileLibraryBrowserPresenter.cs @@ -199,7 +199,7 @@ private void PlayItem(int index) FilePath = _items[index].AudioFile != null ? _items[index].AudioFile.FilePath : string.Empty }); - _navigationManager.CreatePlayerView(_tabType, onViewBindedToPresenter); + _navigationManager.CreatePlayerView(_tabType); } else if (_items[index].EntityType == LibraryBrowserEntityType.Album) { @@ -209,7 +209,7 @@ private void PlayItem(int index) FilePath = _items[index].AudioFile != null ? _items[index].AudioFile.FilePath : string.Empty }); - _navigationManager.CreatePlayerView(_tabType, onViewBindedToPresenter); + _navigationManager.CreatePlayerView(_tabType); } else if (_items[index].EntityType == LibraryBrowserEntityType.Song) { @@ -219,7 +219,7 @@ private void PlayItem(int index) FilePath = _items[index].AudioFile != null ? _items[index].AudioFile.FilePath : string.Empty }); - _navigationManager.CreatePlayerView(_tabType, onViewBindedToPresenter); + _navigationManager.CreatePlayerView(_tabType); } } catch (Exception ex) @@ -327,7 +327,7 @@ private void ItemClick(int index) Query = _items[index].Query, FilePath = _items[index].AudioFile.FilePath }); - _navigationManager.CreatePlayerView(_tabType, onViewBindedToPresenter); + _navigationManager.CreatePlayerView(_tabType); } catch(Exception ex) { diff --git a/MPfm/MPfm.MVP/Presenters/MobileOptionsMenuPresenter.cs b/MPfm/MPfm.MVP/Presenters/MobileOptionsMenuPresenter.cs index b4230d9b..ff24c60f 100644 --- a/MPfm/MPfm.MVP/Presenters/MobileOptionsMenuPresenter.cs +++ b/MPfm/MPfm.MVP/Presenters/MobileOptionsMenuPresenter.cs @@ -109,7 +109,7 @@ private void OnItemClick(MobileOptionsMenuType menuType) } case MobileOptionsMenuType.Preferences: { - _navigationManager.CreatePreferencesView(); + _navigationManager.CreatePreferencesView(); break; } } diff --git a/MPfm/MPfm.MVP/Presenters/PlayerStatusPresenter.cs b/MPfm/MPfm.MVP/Presenters/PlayerStatusPresenter.cs index f53cdef6..667bae39 100644 --- a/MPfm/MPfm.MVP/Presenters/PlayerStatusPresenter.cs +++ b/MPfm/MPfm.MVP/Presenters/PlayerStatusPresenter.cs @@ -105,7 +105,7 @@ private void RefreshPlaylists(Guid selectedPlaylistId) private void OpenPlaylist() { - _mobileNavigationManager.CreatePlaylistView(View); + _mobileNavigationManager.CreatePlaylistView(View); } private void PlayerPlayPause() diff --git a/MPfm/MPfm.MVP/Presenters/PreferencesPresenter.cs b/MPfm/MPfm.MVP/Presenters/PreferencesPresenter.cs index 93a2ce4e..d821bf6d 100644 --- a/MPfm/MPfm.MVP/Presenters/PreferencesPresenter.cs +++ b/MPfm/MPfm.MVP/Presenters/PreferencesPresenter.cs @@ -59,22 +59,22 @@ private void SelectItem(string item) if(item.ToUpper() == "AUDIO PREFERENCES") { var view = _navigationManager.CreateAudioPreferencesView(); - _navigationManager.PushTabView(MobileNavigationTabType.More, view); + //_navigationManager.PushTabView(MobileNavigationTabType.More, view); } else if(item.ToUpper() == "GENERAL PREFERENCES") { var view = _navigationManager.CreateGeneralPreferencesView(); - _navigationManager.PushTabView(MobileNavigationTabType.More, view); + //_navigationManager.PushTabView(MobileNavigationTabType.More, view); } else if(item.ToUpper() == "LIBRARY PREFERENCES") { var view = _navigationManager.CreateLibraryPreferencesView(); - _navigationManager.PushTabView(MobileNavigationTabType.More, view); + //_navigationManager.PushTabView(MobileNavigationTabType.More, view); } else if(item.ToUpper() == "CLOUD PREFERENCES") { var view = _navigationManager.CreateCloudPreferencesView(); - _navigationManager.PushTabView(MobileNavigationTabType.More, view); + //_navigationManager.PushTabView(MobileNavigationTabType.More, view); } } } diff --git a/MPfm/MPfm.MVP/Presenters/ResumePlaybackPresenter.cs b/MPfm/MPfm.MVP/Presenters/ResumePlaybackPresenter.cs index 2b53d795..8fb4b83e 100644 --- a/MPfm/MPfm.MVP/Presenters/ResumePlaybackPresenter.cs +++ b/MPfm/MPfm.MVP/Presenters/ResumePlaybackPresenter.cs @@ -137,7 +137,7 @@ private void ResumePlayback(CloudDeviceInfo device) // Only need to create the Player view on mobile devices #if IOS || ANDROID || WINDOWS_PHONE || WINDOWSSTORE - _mobileNavigationManager.CreatePlayerView(MobileNavigationTabType.More, onViewBindedToPresenter); + _mobileNavigationManager.CreatePlayerView(MobileNavigationTabType.More); #else var audioFiles = _audioFileCacheService.SelectAudioFiles(new LibraryQuery() { ArtistName = device.ArtistName, diff --git a/MPfm/MPfm.MVP/Views/IMobileMainView.cs b/MPfm/MPfm.MVP/Views/IMobileMainView.cs index f9e94bd6..069bfd63 100644 --- a/MPfm/MPfm.MVP/Views/IMobileMainView.cs +++ b/MPfm/MPfm.MVP/Views/IMobileMainView.cs @@ -17,6 +17,8 @@ using System; using System.Collections.Generic; +using MPfm.Library.Objects; +using MPfm.MVP.Navigation; namespace MPfm.MVP.Views { @@ -25,5 +27,6 @@ namespace MPfm.MVP.Views /// public interface IMobileMainView : IBaseView { + void AddTab(MobileNavigationTabType type, string title, MobileLibraryBrowserType browserType, LibraryQuery query, IBaseView view); } }