public static void SendBadge(uint count) { BadgeNumericNotificationContent badgeContent = new BadgeNumericNotificationContent(count); BadgeNotification notif = new BadgeNotification(badgeContent.GetXml()); BadgeUpdateManager.CreateBadgeUpdaterForApplication().Update(notif); }
/// <summary> /// Makes sure the main app tile is an icon tile type /// </summary> public void UpdateMainTile(int unreadCount) { // Setup the main tile as iconic for small and medium TileContent content = new TileContent() { Visual = new TileVisual() { TileSmall = new TileBinding() { Content = new TileBindingContentIconic() { Icon = new TileImageSource("ms-appx:///Assets/AppAssets/IconicTiles/Iconic144.png"), } }, TileMedium = new TileBinding() { Content = new TileBindingContentIconic() { Icon = new TileImageSource("ms-appx:///Assets/AppAssets/IconicTiles/Iconic200.png"), } }, } }; // If the user is signed in we will do more for large and wide. if (m_baconMan.UserMan.IsUserSignedIn && m_baconMan.UserMan.CurrentUser != null && !String.IsNullOrWhiteSpace(m_baconMan.UserMan.CurrentUser.Name)) { content.Visual.TileWide = new TileBinding() { Content = new TileBindingContentAdaptive() { Children = { new TileText() { Text = m_baconMan.UserMan.CurrentUser.Name, Style = TileTextStyle.Caption }, new TileText() { Text = String.Format("{0:N0}", m_baconMan.UserMan.CurrentUser.CommentKarma) + " comment karma", Style = TileTextStyle.CaptionSubtle }, new TileText() { Text = String.Format("{0:N0}", m_baconMan.UserMan.CurrentUser.LinkKarma) + " link karma", Style = TileTextStyle.CaptionSubtle }, } }, }; // If we have messages replace the user name with the message string. if (unreadCount != 0) { TileText unreadCountText = new TileText() { Text = unreadCount + " Unread Inbox Message" + (unreadCount == 1 ? "" : "s"), Style = TileTextStyle.Body }; ((TileBindingContentAdaptive)content.Visual.TileWide.Content).Children[0] = unreadCountText; } // Also set the cake day if it is today DateTime origin = new DateTime(1970, 1, 1, 0, 0, 0, 0); DateTime userCreationTime = origin.AddSeconds(m_baconMan.UserMan.CurrentUser.CreatedUtc).ToLocalTime(); TimeSpan elapsed = DateTime.Now - userCreationTime; double fullYears = Math.Floor((elapsed.TotalDays / 365)); int daysUntil = (int)(elapsed.TotalDays - (fullYears * 365)); if (daysUntil == 0) { // Make the text TileText cakeDayText = new TileText() { Text = "Today is your cake day!", Style = TileTextStyle.Body }; ((TileBindingContentAdaptive)content.Visual.TileWide.Content).Children[0] = cakeDayText; } } // Set large to the be same as wide. content.Visual.TileLarge = content.Visual.TileWide; // Update the tile TileUpdateManager.CreateTileUpdaterForApplication().Update(new TileNotification(content.GetXml())); // Update the badge BadgeNumericNotificationContent badgeContent = new BadgeNumericNotificationContent(); badgeContent.Number = (uint)unreadCount; BadgeUpdateManager.CreateBadgeUpdaterForApplication().Update(new BadgeNotification(badgeContent.GetXml())); }
private async void CreateBadgeTile_Click(object sender, RoutedEventArgs e) { if (!SecondaryTile.Exists(BADGE_TILE_ID)) { SecondaryTile secondTile = new SecondaryTile( BADGE_TILE_ID, "LockScreen CS - Badge only", "BADGE_ARGS", new Uri("ms-appx:///Assets/squareTile-sdk.png"), TileSize.Square150x150 ); secondTile.LockScreenBadgeLogo = new Uri("ms-appx:///Assets/badgelogo-sdk.png"); bool isPinned = await secondTile.RequestCreateForSelectionAsync(GetElementRect((FrameworkElement)sender), Placement.Above); if (isPinned) { BadgeNumericNotificationContent badgeContent = new BadgeNumericNotificationContent(2); BadgeUpdateManager.CreateBadgeUpdaterForSecondaryTile(BADGE_TILE_ID).Update(new BadgeNotification(badgeContent.GetXml())); rootPage.NotifyUser("Secondary tile created and badge updated. Go to PC settings to add it to the lock screen.", NotifyType.StatusMessage); } else { rootPage.NotifyUser("Tile not created.", NotifyType.ErrorMessage); } } else { rootPage.NotifyUser("Badge secondary tile already exists.", NotifyType.ErrorMessage); } }
/// <summary> /// Updates all of the notifications based on the message list. /// </summary> /// <param name="newMessages"></param> public async void UpdateNotifications(List <Message> newMessages) { bool updateSliently = !m_baconMan.IsBackgroundTask; // Check if we are disabled. if (!IsEnabled || !m_baconMan.UserMan.IsUserSignedIn) { // Clear things out ToastNotificationManager.History.Clear(); // Clear the tile BadgeNumericNotificationContent content = new BadgeNumericNotificationContent(); content.Number = 0; BadgeUpdateManager.CreateBadgeUpdaterForApplication().Update(new BadgeNotification(content.GetXml())); return; } try { // Get the current state of the messages. IReadOnlyList <ToastNotification> history = ToastNotificationManager.History.GetHistory(); // We need to keep track of anything new to send to the band. List <Tuple <string, string, string> > newNotifications = new List <Tuple <string, string, string> >(); // We also need to keep track of how many are unread so we can updates our badge. int unreadCount = 0; if (NotificationType == 0) { // For help look here. // http://blogs.msdn.com/b/tiles_and_toasts/archive/2015/07/09/quickstart-sending-a-local-toast-notification-and-handling-activations-from-it-windows-10.aspx // We need to keep track of what notifications we should have so we can remove ones we don't need. Dictionary <string, bool> unReadMessages = new Dictionary <string, bool>(); foreach (Message message in newMessages.Reverse <Message>()) { // If it is new if (message.IsNew) { unreadCount++; // Add the message to our list unReadMessages.Add(message.Id, true); // Check if it is already been reported but dismissed from the UI if (ShownMessageNotifications.ContainsKey(message.Id)) { continue; } // If not add that we are showing it. ShownMessageNotifications[message.Id] = true; // Check if it is already in the UI foreach (ToastNotification oldToast in history) { if (oldToast.Tag.Equals(message.Id)) { continue; } } // Get the post title. string title = ""; if (message.WasComment) { string subject = message.Subject; if (subject.Length > 0) { subject = subject.Substring(0, 1).ToUpper() + subject.Substring(1); } title = subject + " from " + message.Author; } else { title = message.Subject; } // Get the body string body = message.Body; // Add the notification to our list newNotifications.Add(new Tuple <string, string, string>(title, body, message.Id)); } } // Make sure that all of the messages in our history are still unread // if not remove them. for (int i = 0; i < history.Count; i++) { if (!unReadMessages.ContainsKey(history[i].Tag)) { // This message isn't unread any longer. ToastNotificationManager.History.Remove(history[i].Tag); } } // Save any settings we changed SaveSettings(); } else { // Count how many are unread foreach (Message message in newMessages) { if (message.IsNew) { unreadCount++; } } // If we have a different unread count now show the notification. if (LastKnownUnreadCount != unreadCount) { // Update the notification. LastKnownUnreadCount = unreadCount; // Clear anything we have in the notification center already. ToastNotificationManager.History.Clear(); if (unreadCount != 0) { newNotifications.Add(new Tuple <string, string, string>($"You have {unreadCount} new inbox message" + (unreadCount == 1 ? "." : "s."), "", "totalCount")); } } } // For every notification, show it. bool hasShownNote = false; foreach (Tuple <string, string, string> newNote in newNotifications) { // Make the visual ToastVisual visual = new ToastVisual(); visual.TitleText = new ToastText() { Text = newNote.Item1 }; if (!String.IsNullOrWhiteSpace(newNote.Item2)) { visual.BodyTextLine1 = new ToastText() { Text = newNote.Item2 }; } // Make the toast content ToastContent toastContent = new ToastContent(); toastContent.Visual = visual; toastContent.Launch = c_messageInboxOpenArgument; toastContent.ActivationType = ToastActivationType.Foreground; toastContent.Duration = ToastDuration.Short; var toast = new ToastNotification(toastContent.GetXml()); toast.Tag = newNote.Item3; // Only show if we should and this is the first message to show. toast.SuppressPopup = hasShownNote || updateSliently || AddToNotificationCenterSilently; ToastNotificationManager.CreateToastNotifier().Show(toast); // Mark that we have shown one. hasShownNote = true; } // Make sure the main tile is an iconic tile. m_baconMan.TileMan.EnsureMainTileIsIconic(); // Update the badge BadgeNumericNotificationContent content = new BadgeNumericNotificationContent(); content.Number = (uint)unreadCount; BadgeUpdateManager.CreateBadgeUpdaterForApplication().Update(new BadgeNotification(content.GetXml())); // Update the band if we have one. if (!updateSliently) { await m_baconMan.BackgroundMan.BandMan.UpdateInboxMessages(newNotifications, newMessages); } // If all was successful update the last time we updated LastUpdateTime = DateTime.Now; } catch (Exception ex) { m_baconMan.TelemetryMan.ReportUnExpectedEvent(this, "messageUpdaterFailed", ex); m_baconMan.MessageMan.DebugDia("failed to update message notifications", ex); } // When we are done release the deferral ReleaseDeferal(); }
private void SendBadgeNotification_Click(object sender, RoutedEventArgs e) { if (VerifyTileIsPinned()) { BadgeNumericNotificationContent badgeContent = new BadgeNumericNotificationContent(6); // Send the notification to the secondary tile BadgeUpdateManager.CreateBadgeUpdaterForSecondaryTile(MainPage.dynamicTileId).Update(new BadgeNotification(badgeContent.GetXml())); rootPage.NotifyUser("Badge notification sent to " + MainPage.dynamicTileId, NotifyType.StatusMessage); } }
public static void CreateBadge(BadgeNumericNotificationContent badge) { BadgeNotification b = new BadgeNotification(badge.GetXml()); BadgeUpdateManager.CreateBadgeUpdaterForApplication().Update(b); }
private void SendBadge_Click(object sender, RoutedEventArgs e) { BadgeNumericNotificationContent badgeContent = new BadgeNumericNotificationContent(6); BadgeUpdateManager.CreateBadgeUpdaterForApplication().Update(new BadgeNotification(badgeContent.GetXml())); rootPage.NotifyUser("Badge notification sent", NotifyType.StatusMessage); }