public AccountsViewModel(IMvxLogProvider logProvider, IMvxNavigationService navigationService, IMusicProviderService musicProviderService, IAuthenticationService authenticationService, IMvxMessenger mvxMessenger) : base(logProvider, navigationService) { _musicProviderService = musicProviderService; _authenticationService = authenticationService; _mvxMessenger = mvxMessenger; CloseCommand = new MvxAsyncCommand(async() => await NavigationService.Close(this)); InvokeCommand = new MvxAsyncCommand <MusicProviderAccount>(OnAccountMusicProviderInvoke); }
public PlaybackService(IMusicProviderService musicProviderService, ITelemetryService telemetryService, IHistoryService historyService, IActivityService activityService) { // Setup services _musicProviderService = musicProviderService; _telemetryService = telemetryService; _historyService = historyService; _activityService = activityService; // Setup the random class _random = new Random(); // Only keep 3 items open and do not auto repeat // as we will be loading more items once we reach the // end of a list (or starting over if in playlist) _mediaPlaybackList = new MediaPlaybackList { MaxPlayedItemsToKeepOpen = 3, AutoRepeatEnabled = true, }; // Create the media player and disable auto play // as we are going to use a playback list. Set the // source to the media playback list. Auto play is true so if // we reach the end of a playlist (or source) start from the beginning. _mediaPlayer = new MediaPlayer { AutoPlay = false, Source = _mediaPlaybackList }; // Set the last playback volume TODO // SetTrackVolume(SettingsService.Instance.PlaybackVolume / 100); // Assign event handlers _mediaPlaybackList.CurrentItemChanged += MediaPlaybackListOnCurrentItemChanged; _mediaPlayer.CurrentStateChanged += MediaPlayerOnCurrentStateChanged; // Setup the pinger to run for app lifetime. // This is used to make sure session information is correctly // kept as long playing tracks may cause telemetry services to think // the app is closed. var pingTimer = new Timer { Interval = 180000 }; pingTimer.Elapsed += (sender, args) => _telemetryService.TrackEvent("Ping"); pingTimer.Start(); }
public InstalledMusicProvidersViewModel(IMvxLogProvider logProvider, IMvxNavigationService navigationService, IMusicProviderService musicProviderService, IDialogService dialogService) : base(logProvider, navigationService) { MusicProviders = musicProviderService.MusicProviders; CloseCommand = new MvxAsyncCommand(() => NavigationService.Close(this)); UninstallCommand = new MvxAsyncCommand <MusicProvider>(async e => { try { await musicProviderService.UninstallAsync(e.Identifier); } catch (Exception ex) { Crashes.TrackError(ex); await dialogService.ShowErrorMessageAsync("Partial error uninstalling music provider", ex.Message); } }); }
public PlaybackService(IMusicProviderService musicProviderService, ITelemetryService telemetryService, IDialogService dialogService) { }
public PlaybackService(IMusicProviderService musicProviderService, ITelemetryService telemetryService, IDialogService dialogService) { // Setup background audio AVAudioSession session = AVAudioSession.SharedInstance(); session.SetCategory(AVAudioSessionCategory.Playback, AVAudioSessionCategoryOptions.AllowAirPlay | AVAudioSessionCategoryOptions.MixWithOthers | AVAudioSessionCategoryOptions.AllowBluetooth | AVAudioSessionCategoryOptions.AllowBluetoothA2DP); session.SetActive(true); // Setup services _musicProviderService = musicProviderService; _telemetryService = telemetryService; _dialogService = dialogService; // Setup player _player = new AVPlayer(); // This should handle times a bit better _player.AddPeriodicTimeObserver(CMTime.FromSeconds(1, 1), null, time => { MainThread.BeginInvokeOnMainThread(() => { UpdateInfoCenter(); }); }); // Create the queue _queue = new List <Track>(); // Setup the random class _random = new Random(); // Setup Command Center var commandCenter = MPRemoteCommandCenter.Shared; commandCenter.PreviousTrackCommand.Enabled = true; commandCenter.PreviousTrackCommand.AddTarget(PrevCommand); commandCenter.NextTrackCommand.Enabled = true; commandCenter.NextTrackCommand.AddTarget(NextCommand); commandCenter.TogglePlayPauseCommand.Enabled = true; commandCenter.TogglePlayPauseCommand.AddTarget(ToggleCommand); commandCenter.PlayCommand.Enabled = true; commandCenter.PlayCommand.AddTarget(PlayCommand); commandCenter.PauseCommand.Enabled = true; commandCenter.PauseCommand.AddTarget(PauseCommand); commandCenter.ChangeRepeatModeCommand.Enabled = true; commandCenter.ChangeRepeatModeCommand.AddTarget(ChangeRepeatModeCommand); commandCenter.ChangePlaybackPositionCommand.Enabled = true; commandCenter.ChangePlaybackPositionCommand.AddTarget((c) => { var e = (MPChangePlaybackPositionCommandEvent)c; var time = e.PositionTime; _player.SeekAsync(CMTime.FromSeconds(time, 1)); return(MPRemoteCommandHandlerStatus.Success); }); // Setup the pinger to run for app lifetime. // This is used to make sure session information is correctly // kept as long playing tracks may cause telemetry services to think // the app is closed. var pingTimer = new Timer { Interval = 180000 }; pingTimer.Elapsed += (sender, args) => _telemetryService.TrackEvent("Ping"); pingTimer.Start(); }
public AppStart(IMvxApplication application, IMvxNavigationService navigationService, IMusicProviderService musicProviderService, IStoreService storeService) : base(application, navigationService) { _musicProviderService = musicProviderService; _storeService = storeService; }