Navigation Menu

Skip to content

Commit

Permalink
Mac: Updated project with latest changes. Added SyncMenu and SyncDown…
Browse files Browse the repository at this point in the history
…load windows with controls but without connecting the presenters yet.

Related to issue #381.
  • Loading branch information
ycastonguay committed Aug 11, 2013
1 parent 05066fd commit 1de3502
Show file tree
Hide file tree
Showing 26 changed files with 2,006 additions and 161 deletions.
18 changes: 0 additions & 18 deletions MPfm/MPfm.Android/Resources/drawable/button_selector.xml

This file was deleted.

18 changes: 0 additions & 18 deletions MPfm/MPfm.Android/Resources/drawable/list_selector.xml

This file was deleted.

1 change: 1 addition & 0 deletions MPfm/MPfm.MVP/MPfm.MVP.csproj
Expand Up @@ -230,5 +230,6 @@
<Compile Include="Presenters\Interfaces\ISyncDownloadPresenter.cs" />
<Compile Include="Presenters\SyncDownloadPresenter.cs" />
<Compile Include="Messages\PlayerPlaylistUpdatedMessage.cs" />
<Compile Include="Views\IDesktopPreferencesView.cs" />
</ItemGroup>
</Project>
90 changes: 69 additions & 21 deletions MPfm/MPfm.MVP/Navigation/NavigationManager.cs
Expand Up @@ -21,6 +21,8 @@
using TinyIoC;
using MPfm.MVP.Views;
using MPfm.MVP.Presenters.Interfaces;
using MPfm.Library.Objects;
using MPfm.Sound.AudioFiles;

namespace MPfm.MVP.Navigation
{
Expand All @@ -38,10 +40,7 @@ public abstract class NavigationManager
private ILibraryBrowserPresenter _libraryBrowserPresenter;
private ISongBrowserPresenter _songBrowserPresenter;

private IPreferencesView _preferencesView;
private IAudioPreferencesView _audioPreferencesView;
private IGeneralPreferencesView _generalPreferencesView;
private ILibraryPreferencesView _libraryPreferencesView;
private IDesktopPreferencesView _desktopPreferencesView;
private IAudioPreferencesPresenter _audioPreferencesPresenter;
private IGeneralPreferencesPresenter _generalPreferencesPresenter;
private ILibraryPreferencesPresenter _libraryPreferencesPresenter;
Expand All @@ -51,6 +50,10 @@ public abstract class NavigationManager

private ISyncView _syncView;
private ISyncPresenter _syncPresenter;
private ISyncMenuView _syncMenuView;
private ISyncMenuPresenter _syncMenuPresenter;
private ISyncDownloadView _syncDownloadView;
private ISyncDownloadPresenter _syncDownloadPresenter;

public virtual ISplashView CreateSplashView()
{
Expand Down Expand Up @@ -100,35 +103,34 @@ public virtual IMainView CreateMainView()
return _mainView;
}

public virtual IPreferencesView CreatePreferencesView()
public virtual IDesktopPreferencesView CreatePreferencesView()
{
// If the view is still visible, just make it the top level window
if(_preferencesView != null)
if(_desktopPreferencesView != null)
{
_preferencesView.ShowView(true);
return _preferencesView;
_desktopPreferencesView.ShowView(true);
return _desktopPreferencesView;
}

// The view invokes the OnViewReady action when the view is ready. This means the presenter can be created and bound to the view.
Action<IBaseView> onViewReady = (view) =>
{
_audioPreferencesPresenter = Bootstrapper.GetContainer().Resolve<IAudioPreferencesPresenter>();
_audioPreferencesPresenter.BindView((IAudioPreferencesView)view);
_generalPreferencesPresenter = Bootstrapper.GetContainer().Resolve<IGeneralPreferencesPresenter>();
_generalPreferencesPresenter.BindView((IGeneralPreferencesView)view);
_libraryPreferencesPresenter = Bootstrapper.GetContainer().Resolve<ILibraryPreferencesPresenter>();
_libraryPreferencesPresenter.BindView((ILibraryPreferencesView)view);
};
Action<IBaseView> onViewReady = (view) => {
_audioPreferencesPresenter = Bootstrapper.GetContainer().Resolve<IAudioPreferencesPresenter>();
_audioPreferencesPresenter.BindView((IAudioPreferencesView)view);
_generalPreferencesPresenter = Bootstrapper.GetContainer().Resolve<IGeneralPreferencesPresenter>();
_generalPreferencesPresenter.BindView((IGeneralPreferencesView)view);
_libraryPreferencesPresenter = Bootstrapper.GetContainer().Resolve<ILibraryPreferencesPresenter>();
_libraryPreferencesPresenter.BindView((ILibraryPreferencesView)view);
};

// Create view and manage view destruction
_preferencesView = Bootstrapper.GetContainer().Resolve<IPreferencesView>(new NamedParameterOverloads() { { "onViewReady", onViewReady } });
_preferencesView.OnViewDestroy = (view) => {
_preferencesView = null;
_desktopPreferencesView = Bootstrapper.GetContainer().Resolve<IDesktopPreferencesView>(new NamedParameterOverloads() { { "onViewReady", onViewReady } });
_desktopPreferencesView.OnViewDestroy = (view) => {
_desktopPreferencesView = null;
_audioPreferencesPresenter = null;
_generalPreferencesPresenter = null;
_libraryPreferencesPresenter = null;
};
return _preferencesView;
return _desktopPreferencesView;
}

public virtual ISyncView CreateSyncView()
Expand All @@ -155,5 +157,51 @@ public virtual ISyncView CreateSyncView()
};
return _syncView;
}

public virtual ISyncMenuView CreateSyncMenuView(SyncDevice device)
{
if(_syncMenuView != null)
{
_syncMenuView.ShowView(true);
return _syncMenuView;
}

Action<IBaseView> onViewReady = (view) =>
{
_syncMenuPresenter = Bootstrapper.GetContainer().Resolve<ISyncMenuPresenter>();
_syncMenuPresenter.BindView((ISyncMenuView)view);
_syncMenuPresenter.SetSyncDevice(device);
};

_syncMenuView = Bootstrapper.GetContainer().Resolve<ISyncMenuView>(new NamedParameterOverloads() { { "onViewReady", onViewReady } });
_syncMenuView.OnViewDestroy = (view) => {
_syncMenuView = null;
_syncMenuPresenter = null;
};
return _syncMenuView;
}

public virtual ISyncDownloadView CreateSyncDownloadView(SyncDevice device, IEnumerable<AudioFile> audioFiles)
{
if(_syncDownloadView != null)
{
_syncDownloadView.ShowView(true);
return _syncDownloadView;
}

Action<IBaseView> onViewReady = (view) =>
{
_syncDownloadPresenter = Bootstrapper.GetContainer().Resolve<ISyncDownloadPresenter>();
_syncDownloadPresenter.BindView((ISyncDownloadView)view);
_syncDownloadPresenter.StartSync(device, audioFiles);
};

_syncDownloadView = Bootstrapper.GetContainer().Resolve<ISyncDownloadView>(new NamedParameterOverloads() { { "onViewReady", onViewReady } });
_syncDownloadView.OnViewDestroy = (view) => {
_syncDownloadView = null;
_syncDownloadPresenter = null;
};
return _syncDownloadView;
}
}
}
23 changes: 15 additions & 8 deletions MPfm/MPfm.MVP/Presenters/LibraryPreferencesPresenter.cs
Expand Up @@ -15,11 +15,12 @@
// You should have received a copy of the GNU General Public License
// along with MPfm. If not, see <http://www.gnu.org/licenses/>.

using MPfm.MVP.Presenters.Interfaces;
using MPfm.MVP.Views;
using MPfm.Library.Services.Interfaces;
using System;
using MPfm.Library.Services.Interfaces;
using MPfm.MVP.Bootstrap;
using MPfm.MVP.Navigation;
using MPfm.MVP.Presenters.Interfaces;
using MPfm.MVP.Views;

namespace MPfm.MVP.Presenters
{
Expand All @@ -28,18 +29,24 @@ namespace MPfm.MVP.Presenters
/// </summary>
public class LibraryPreferencesPresenter : BasePresenter<ILibraryPreferencesView>, ILibraryPreferencesPresenter
{
readonly MobileNavigationManager _navigationManager;
readonly NavigationManager _navigationManager;
readonly MobileNavigationManager _mobileNavigationManager;
readonly ISyncListenerService _syncListenerService;
readonly ILibraryService _libraryService;
readonly IAudioFileCacheService _audioFileCacheService;

public LibraryPreferencesPresenter(ISyncListenerService syncListenerService, ILibraryService libraryService,
IAudioFileCacheService audioFileCacheService, MobileNavigationManager navigationManager)
IAudioFileCacheService audioFileCacheService)
{
_syncListenerService = syncListenerService;
_libraryService = libraryService;
_audioFileCacheService = audioFileCacheService;
_navigationManager = navigationManager;

#if IOS || ANDROID
_mobileNavigationManager = Bootstrapper.GetContainer().Resolve<MobileNavigationManager>();
#else
_navigationManager = Bootstrapper.GetContainer().Resolve<NavigationManager>();
#endif
}

public override void BindView(ILibraryPreferencesView view)
Expand Down Expand Up @@ -75,8 +82,8 @@ private void UpdateLibrary()
{
try
{
var view = _navigationManager.CreateUpdateLibraryView();
_navigationManager.PushDialogView("Update Library", View, view);
var view = _mobileNavigationManager.CreateUpdateLibraryView();
_mobileNavigationManager.PushDialogView("Update Library", View, view);
}
catch(Exception ex)
{
Expand Down
19 changes: 15 additions & 4 deletions MPfm/MPfm.MVP/Presenters/SyncPresenter.cs
Expand Up @@ -25,6 +25,7 @@
using MPfm.MVP.Views;
using MPfm.Library.Services;
using MPfm.MVP.Navigation;
using MPfm.MVP.Bootstrap;

namespace MPfm.MVP.Presenters
{
Expand All @@ -34,18 +35,24 @@ namespace MPfm.MVP.Presenters
public class SyncPresenter : BasePresenter<ISyncView>, ISyncPresenter
{
readonly ISyncDiscoveryService _syncDiscoveryService;
readonly MobileNavigationManager _navigationManager;
readonly MobileNavigationManager _mobileNavigationManager;
readonly NavigationManager _navigationManager;
readonly ISyncDeviceSpecifications _deviceSpecifications;
List<SyncDevice> _devices = new List<SyncDevice>();

public SyncPresenter(MobileNavigationManager navigationManager, ISyncDiscoveryService syncDiscoveryService, ISyncDeviceSpecifications deviceSpecifications)
public SyncPresenter(ISyncDiscoveryService syncDiscoveryService, ISyncDeviceSpecifications deviceSpecifications)
{
_navigationManager = navigationManager;
_deviceSpecifications = deviceSpecifications;
_syncDiscoveryService = syncDiscoveryService;
_syncDiscoveryService.OnDeviceFound += HandleOnDeviceFound;
_syncDiscoveryService.OnDiscoveryProgress += HandleOnDiscoveryProgress;
_syncDiscoveryService.OnDiscoveryEnded += HandleOnDiscoveryEnded;

#if IOS || ANDROID
_mobileNavigationManager = Bootstrapper.GetContainer().Resolve<MobileNavigationManager>();
#else
_navigationManager = Bootstrapper.GetContainer().Resolve<NavigationManager>();
#endif
}

public override void BindView(ISyncView view)
Expand Down Expand Up @@ -88,7 +95,11 @@ private void HandleOnDiscoveryEnded(IEnumerable<SyncDevice> devices)

private void ConnectDevice(SyncDevice device)
{
_navigationManager.CreateSyncMenuView(device);
#if IOS || ANDROID
_mobileNavigationManager.CreateSyncMenuView(device);
#else
_navigationManager.CreateSyncMenuView(device);
#endif
}

private void ConnectDeviceManually(string url)
Expand Down
29 changes: 29 additions & 0 deletions MPfm/MPfm.MVP/Views/IDesktopPreferencesView.cs
@@ -0,0 +1,29 @@
// Copyright © 2011-2013 Yanick Castonguay
//
// This file is part of MPfm.
//
// MPfm is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// MPfm is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with MPfm. If not, see <http://www.gnu.org/licenses/>.

using System;
using System.Collections.Generic;

namespace MPfm.MVP.Views
{
/// <summary>
/// Preferences view interface (menu for mobile devices).
/// </summary>
public interface IDesktopPreferencesView : IAudioPreferencesView, IGeneralPreferencesView, ILibraryPreferencesView
{
}
}
6 changes: 4 additions & 2 deletions MPfm/MPfm.Mac/Classes/Delegates/AppDelegate.cs
Expand Up @@ -53,10 +53,12 @@ public override void FinishedLaunching(NSObject notification)
Bootstrapper.GetContainer().Register<ISplashView, SplashWindowController>().AsMultiInstance();
Bootstrapper.GetContainer().Register<IMainView, MainWindowController>().AsMultiInstance();
Bootstrapper.GetContainer().Register<IUpdateLibraryView, UpdateLibraryWindowController>().AsMultiInstance();
//Bootstrapper.GetContainer().Register<IPlaylistView, PlaylistWindowController>().AsMultiInstance();
Bootstrapper.GetContainer().Register<IPlaylistView, PlaylistWindowController>().AsMultiInstance();
//Bootstrapper.GetContainer().Register<IEffectsView, EffectsWindowController>().AsMultiInstance();
//Bootstrapper.GetContainer().Register<IPreferencesView, PreferencesWindowController>().AsMultiInstance();
Bootstrapper.GetContainer().Register<IDesktopPreferencesView, PreferencesWindowController>().AsMultiInstance();
Bootstrapper.GetContainer().Register<ISyncView, SyncWindowController>().AsMultiInstance();
Bootstrapper.GetContainer().Register<ISyncMenuView, SyncMenuWindowController>().AsMultiInstance();
Bootstrapper.GetContainer().Register<ISyncDownloadView, SyncDownloadWindowController>().AsMultiInstance();

// Create and start navigation manager
_navigationManager = Bootstrapper.GetContainer().Resolve<NavigationManager>();
Expand Down
21 changes: 20 additions & 1 deletion MPfm/MPfm.Mac/Classes/MacSyncDeviceSpecifications.cs
Expand Up @@ -17,8 +17,9 @@

using System;
using MPfm.Library;
using MonoMac.Foundation;
using MPfm.Library.Objects;
using MPfm.Library.Services;
using MonoMac.Foundation;

namespace MPfm.Mac
{
Expand All @@ -27,6 +28,8 @@ namespace MPfm.Mac
/// </summary>
public class MacSyncDeviceSpecifications : NSObject, ISyncDeviceSpecifications
{
public event NetworkStateChanged OnNetworkStateChanged;

public SyncDeviceType GetDeviceType()
{
return SyncDeviceType.OSX;
Expand All @@ -45,5 +48,21 @@ public long GetFreeSpace()
{
return 0;
}

public string GetIPAddress()
{
return SyncListenerService.GetLocalIPAddress().ToString();
}

public string GetMusicFolderPath()
{
return Environment.GetFolderPath(Environment.SpecialFolder.MyMusic);
}

public void ReportNetworkStateChange(NetworkState networkState)
{
if (OnNetworkStateChanged != null)
OnNetworkStateChanged(networkState);
}
}
}
4 changes: 2 additions & 2 deletions MPfm/MPfm.Mac/Classes/Navigation/MacNavigationManager.cs
Expand Up @@ -55,9 +55,9 @@ public override IMainView CreateMainView()
return view;
}

public override IPreferencesView CreatePreferencesView()
public override IDesktopPreferencesView CreatePreferencesView()
{
IPreferencesView view = null;
IDesktopPreferencesView view = null;
using (var pool = new NSAutoreleasePool())
{
pool.InvokeOnMainThread(delegate {
Expand Down

0 comments on commit 1de3502

Please sign in to comment.