Inheritance: INotifyPropertyChanged
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
            base.OnNavigatedTo(e);
            var currentView = SystemNavigationManager.GetForCurrentView();

            displayRequest.RequestActive(); //to request keep display on

            currentView.AppViewBackButtonVisibility = AppViewBackButtonVisibility.Visible;
            currentView.BackRequested += CurrentView_BackRequested;

            if (e.NavigationMode != NavigationMode.Back)
            {
                try
                {
                    _mainPageViewModel = MainPage.Current.MainPageViewModel;
                    LayoutRoot.DataContext = _mainPageViewModel;
                    _currentTrack = _mainPageViewModel.PlayingTrack;
                    _canvasControl = new CanvasControl();
                    _canvasControl.Draw += _canvasControl_Draw;
                    App.AudioPlayer.CurrentTrackChanged += AudioPlayer_CurrentTrackChanged;
                    ContentPresenter.Content = _canvasControl;
                    CreateWaveForm();
                }
                catch (Exception ex)
                {
                    ErrorLogProxy.LogError(ex.ToString());
                    ErrorLogProxy.NotifyErrorInDebug(ex.ToString());
                }
            }
        }
 public static XmlDocument CreateTiles(Track t)
 {
     XDocument xDoc = new XDocument(
         new XElement("tile", new XAttribute("version", 3),
             new XElement("visual",
                 // Medium Tile
                 new XElement("binding",
                     new XAttribute("branding", "name"),
                     new XAttribute("displayName", "10Sound"),
                     new XAttribute("template", "TileMedium"),
                     new XElement("group",
                         new XElement("subgroup",
                             new XElement("text", t.User.Username,
                                 new XAttribute("hint-style", "caption"),
                                 new XAttribute("hint-wrap", true),
                                 new XAttribute("hint-maxLines", 3)
                             ),
                             new XElement("text", t.Title,
                                 new XAttribute("hint-style", "captionsubtle"),
                                 new XAttribute("hint-wrap", true),
                                 new XAttribute("hint-maxLines", 3)
                             )
                         )
                     )
                 ),
                 // Wide Tile
                 new XElement("binding",
                     new XAttribute("branding", "name"),
                     new XAttribute("displayName", "10Sound"),
                     new XAttribute("template", "TileWide"),
                     new XElement("group",
                         new XElement("subgroup",
                             new XElement("text", t.User.Username,
                                 new XAttribute("hint-style", "caption"),
                                 new XAttribute("hint-wrap", true),
                                 new XAttribute("hint-maxLines", 3)
                             ),
                             new XElement("text", t.Title,
                                 new XAttribute("hint-style", "captionsubtle"),
                                 new XAttribute("hint-wrap", true),
                                 new XAttribute("hint-maxLines", 3)
                             )
                         )
                     )
                 )
             )
         )
     );
     XmlDocument xmlDoc = new XmlDocument();
     xmlDoc.LoadXml(xDoc.ToString());
     return xmlDoc;
 }
 private void AudioPlayer_CurrentTrackChanged(object sender, EventArgs e)
 {
     List<Track> playlist = App.AudioPlayer.PlayList;
     Track track = App.AudioPlayer.CurrentTrack;
     int index;
     for (index = 0; index < playlist.Count; index++)
     {
         if (track.Id.Equals(playlist[index].Id))
         {
             try
             {
                 PlayListView.SelectedIndex = index;
                 _currentTrack = track;
                 _canvasControl.Invalidate();
                 return;
             }
             catch (Exception ex)
             {
                 ErrorLogProxy.LogError(ex.ToString());
                 ErrorLogProxy.NotifyErrorInDebug(ex.ToString());
             }
         }
     }
 }
        public void PlayTrack(List<Track> playList, Track track)
        {
            var oldPlaylist = PlayList;
            PlayList = playList;
            MainPage.Current.MainPageViewModel.PlayingList = PlayList;
            MainPage.Current.MainPageViewModel.PlayingTrack = track;
            bool liveTile = (bool)ApplicationSettingsHelper.ReadRoamingSettingsValue<bool>("LiveTilesEnabled");
            if (liveTile)
            {
                UpdateLiveTile(track);
            }
            bool toast = (bool)ApplicationSettingsHelper.ReadRoamingSettingsValue<bool>("ToastsEnabled");
            if (toast)
            {
                UpdateToastMessage(track);
            }
            Debug.WriteLine("Clicked item from App: " + track.Id);
            // Start the background task if it wasn't running
            if (!IsMyBackgroundTaskRunning)// || MediaPlayerState.Closed == CurrentPlayer.CurrentState)
            {
                // First update the persisted start track
                ApplicationSettingsHelper.SaveSettingsValue(ApplicationSettingsConstants.TrackId, track.Id);
                ApplicationSettingsHelper.SaveSettingsValue(ApplicationSettingsConstants.Position, new TimeSpan().ToString());

                StartBackgroundAudioTask();
            }
            else
            {

                if (oldPlaylist == null || !oldPlaylist.Equals(playList))
                {
                    MessageService.SendMessageToBackground(new UpdatePlaylistMessage(playList));
                }
                MessageService.SendMessageToBackground(new TrackChangedMessage(track.Id));
            }

            if (MediaPlayerState.Paused == CurrentPlayer.CurrentState)
            {
                CurrentPlayer.Play();
            }
        }
        void UpdateToastMessage(Track t)
        {
            var template = ToastTemplateType.ToastImageAndText02;
            var xml = ToastNotificationManager.GetTemplateContent(template);
            xml.DocumentElement.SetAttribute("launch", "Args");

            var title = xml.CreateTextNode(t.Title);
            var artist = xml.CreateTextNode(t.User.Username);
            var elements = xml.GetElementsByTagName("text");
            elements[0].AppendChild(artist);
            elements[1].AppendChild(title);

            var imageElement = xml.GetElementsByTagName("image");
            imageElement[0].Attributes[1].NodeValue = t.ArtworkUrl;

            var toast = new ToastNotification(xml);
            var notifier = ToastNotificationManager.CreateToastNotifier();
            notifier.Show(toast);
        }
 void UpdateLiveTile(Track t)
 {
     try
     {
         var xmlDoc = TileService.CreateTiles(t);
         var updater = TileUpdateManager.CreateTileUpdaterForApplication();
         TileNotification notification = new TileNotification(xmlDoc); updater.Update(notification);
     }
     catch (Exception ex)
     {
         ErrorLogProxy.LogError(ex.ToString());
         ErrorLogProxy.NotifyErrorInDebug(ex.ToString());
     }
 }
 private void ListViewBase_OnItemClick(object sender, ItemClickEventArgs e)
 {
     _currentTrack = _mainPageViewModel.PlayingTrack = (Track)e.ClickedItem;
     App.AudioPlayer.PlayTrack(MainPage.Current.MainPageViewModel.PlayingList, _currentTrack);
     _canvasControl.Invalidate();
 }