public static void ClearScheduledNotifications(TileUpdater updater)
 {
     foreach (var notif in updater.GetScheduledTileNotifications())
     {
         updater.RemoveFromSchedule(notif);
     }
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Updates a scheduled a tile for this activity with info for the provided baby or creates & schedules a new tile for this activity if one doesn't exist
        /// </summary>
        public static void UpdateBabysActivityStatusTile(this TileUpdater tileUpdater, string activityName, BabyActivityStatus babysActivityStatus)
        {
            var existingTiles = tileUpdater.GetScheduledTileNotifications();
            var existingTile  = existingTiles.SingleOrDefault(tile => tile.Tag == activityName);

            if (existingTile == null)
            {
                CreateActivityTile(tileUpdater, activityName, new[] { babysActivityStatus });
            }
            else
            {
                tileUpdater.RemoveFromSchedule(existingTile);

                var newTileContent = new XmlDocument();
                newTileContent.LoadXml(existingTile.Content.GetXml());
                var babysStatuses = newTileContent.GetElementsByTagName("text")
                                    .Where(text => text.InnerText.StartsWith(babysActivityStatus.BabyGivenName));
                // TODO - handle long & short form for wide & medium tiles respectively
                foreach (var textElement in babysStatuses)
                {
                    textElement.InnerText = CreateActivityStatusText(activityName, babysActivityStatus, false);
                }

                tileUpdater.Update(new TileNotification(newTileContent)
                {
                    Tag = activityName
                });
            }
        }
Ejemplo n.º 3
0
        private static void ClearNotifications(TileUpdater updater)
        {
            var scheduledNotifications = updater.GetScheduledTileNotifications();

            foreach (var notificaton in scheduledNotifications)
            {
                updater.RemoveFromSchedule(notificaton);
            }

            updater.Clear();
        }
Ejemplo n.º 4
0
        internal static void ClearScheduledNotifications(TileUpdater updater)
        {
            try
            {
                foreach (var scheduled in updater.GetScheduledTileNotifications())
                {
                    updater.RemoveFromSchedule(scheduled);
                }
            }

            catch (Exception ex)
            {
                TelemetryExtension.Current?.TrackException(ex);
            }
        }
Ejemplo n.º 5
0
 /// <summary>
 /// Removes the tile from the schedule.
 /// </summary>
 /// <param name="uid">The uid.</param>
 public static void RemoveTile(string uid)
 {
     try
     {
         // Check if a tile has a tag with the specified uid
         ScheduledTileNotification scheduledTileNotification = _tileUpdater.GetScheduledTileNotifications().FirstOrDefault(o => o.Tag.Equals(uid, StringComparison.OrdinalIgnoreCase));
         // If a tile is found, remove it
         if (scheduledTileNotification != null)
         {
             _tileUpdater.RemoveFromSchedule(scheduledTileNotification);
         }
     }
     catch (Exception ex)
     {
         LogFile.Instance.LogError("", "", ex.ToString());
     }
 }
        public static void CreateSchedule(int cinemaid = -1)
        {
            TileUpdater updater = TileUpdateManager.CreateTileUpdaterForApplication();

            foreach (var item in updater.GetScheduledTileNotifications())
            {
                if (DateTime.Now > item.ExpirationTime)
                {
                    updater.RemoveFromSchedule(item);
                }
            }

            IReadOnlyList <ScheduledTileNotification> scheduledTileNotifications = updater.GetScheduledTileNotifications();
            DateTime time  = DateTime.Now;
            DateTime time2 = time.AddHours(2.0);
            DateTime time3 = new DateTime(time.Year, time.Month, time.Day, time.Hour, time.Minute, 0).AddMinutes(1.0);

            if (scheduledTileNotifications.Count > 0)
            {
                DateTime dtTemp = scheduledTileNotifications[scheduledTileNotifications.Count - 1].DeliveryTime.DateTime.AddMinutes(1);
                if (dtTemp > time3)
                {
                    time3 = dtTemp;
                }
            }
            string format = "<tile><visual><binding template=\"TileSquareImage\"><image id=\"1\" src=\"{0}\"/></binding></visual></tile>";

            for (DateTime time4 = time3; time4 < time2; time4 = time4.AddMinutes(1.0))
            {
                try
                {
                    List <Uri> uris = App.GetRandomImages(cinemaid);

                    string      str2     = string.Format(format, uris[0], uris[1], uris[2], uris[3], uris[4]);
                    XmlDocument document = new XmlDocument();
                    document.LoadXml(str2);
                    ScheduledTileNotification notification2 = new ScheduledTileNotification(document, new DateTimeOffset(time4));
                    notification2.ExpirationTime = (new DateTimeOffset?((DateTimeOffset)time4.AddMinutes(1.0)));
                    ScheduledTileNotification notification = notification2;
                    updater.AddToSchedule(notification);
                }
                catch (Exception)
                {
                }
            }
        }
Ejemplo n.º 7
0
        // 删除指定 secondary tile 的指定 ScheduledTileNotification 对象
        private void btnRemoveScheduledTile_Click(object sender, RoutedEventArgs e)
        {
            string notificationId = (string)(sender as FrameworkElement).Tag;

            // 获取指定 secondary tile 的全部 ScheduledTileNotification 对象列表
            TileUpdater tileUpdater = TileUpdateManager.CreateTileUpdaterForSecondaryTile(TILEID);
            IReadOnlyList <ScheduledTileNotification> notifications = tileUpdater.GetScheduledTileNotifications();

            int notificationCount = notifications.Count;

            for (int i = 0; i < notificationCount; i++)
            {
                if (notifications[i].Id == notificationId)
                {
                    // 从计划列表中移除指定的 ScheduledTileNotification 对象
                    tileUpdater.RemoveFromSchedule(notifications[i]);
                    break;
                }
            }

            ShowScheduledTiles();
        }
Ejemplo n.º 8
0
        // Remove the notification by checking the list of scheduled notifications for a notification with matching ID.
        // While it would be possible to manage the notifications by storing a reference to each notification, such practice
        // causes memory leaks by not allowing the notifications to be collected once they have shown.
        // It's important to create unique IDs for each notification if they are to be managed later.
        void Remove_Click(object sender, RoutedEventArgs e)
        {
            IList <Object> items = ItemGridView.SelectedItems;

            for (int i = 0; i < items.Count; i++)
            {
                NotificationData item   = (NotificationData)items[i];
                String           itemId = item.ItemId;
                if (item.IsTile)
                {
                    TileUpdater updater = TileUpdateManager.CreateTileUpdaterForApplication();
                    IReadOnlyList <ScheduledTileNotification> scheduled = updater.GetScheduledTileNotifications();
                    for (int j = 0; j < scheduled.Count; j++)
                    {
                        if (scheduled[j].Id == itemId)
                        {
                            updater.RemoveFromSchedule(scheduled[j]);
                        }
                    }
                }
                else
                {
                    ToastNotifier notifier = ToastNotificationManager.CreateToastNotifier();
                    IReadOnlyList <ScheduledToastNotification> scheduled = notifier.GetScheduledToastNotifications();
                    for (int j = 0; j < scheduled.Count; j++)
                    {
                        if (scheduled[j].Id == itemId)
                        {
                            notifier.RemoveFromSchedule(scheduled[j]);
                        }
                    }
                }
            }
            rootPage.NotifyUser("Removed selected scheduled notifications", NotifyType.StatusMessage);
            RefreshListView();
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Creates & schedules a tile for this activity that contains info for all the babies
        /// </summary>
        public static void CreateActivityTile(this TileUpdater tileUpdater, string activityName, IEnumerable <BabyActivityStatus> babiesActivityStatus)
        {
            // If no activities are running or scheduled then delete the tile for this activity
            if (babiesActivityStatus.Count(s => (s.ActivityIsRunning && s.LastActivityStartTime.HasValue) || s.NextActivityStartTime.HasValue) == 0)
            {
                var existingTile = tileUpdater.GetScheduledTileNotifications()
                                   .FirstOrDefault(t => t.Tag.Equals(activityName));
                if (existingTile != null)
                {
                    tileUpdater.RemoveFromSchedule(existingTile);
                }
                return;
            }

            TileNotification tileNotification;
            //if (babiesActivityStatus.Count() == 1 && babiesActivityStatus.All(s => s.ActivityIsRunning && s.LastActivityStartTime.HasValue))
            //{
            //    var activityStatus = babiesActivityStatus.First();
            //    var tileXml = TileUpdateManager.GetTemplateContent(TileTemplateType.TileSquare150x150Block);
            //    var duration = DateTimeOffset.Now - activityStatus.LastActivityStartTime.Value;
            //    var textElements = tileXml.GetElementsByTagName("text");
            //    textElements[0].InnerText = duration.TotalMinutes.ToString("F0");
            //    textElements[1].InnerText = activityName;
            //    tileNotification = new TileNotification(tileXml) { Tag = activityName };
            //}
            var mediumTileXml          = TileUpdateManager.GetTemplateContent(TileTemplateType.TileSquare150x150Text01);
            var mediumTileTextElements = mediumTileXml.GetElementsByTagName("text");
            var wideTileXml            = TileUpdateManager.GetTemplateContent(TileTemplateType.TileWide310x150Text01);
            var wideTileTextElements   = wideTileXml.GetElementsByTagName("text");

            mediumTileTextElements[0].InnerText = activityName;
            wideTileTextElements[0].InnerText   = activityName;

            int            babyCount       = 1;
            DateTimeOffset?latestStartTime = null;

            foreach (var activityStatus in babiesActivityStatus)
            {
                if (activityStatus.NextActivityStartTime > latestStartTime)
                {
                    latestStartTime = activityStatus.NextActivityStartTime;
                }

                string longStatusText  = CreateActivityStatusText(activityName, activityStatus, true);
                string shortStatusText = CreateActivityStatusText(activityName, activityStatus, false);

                wideTileTextElements[babyCount].InnerText = longStatusText;
                if (babyCount <= 3)
                {
                    mediumTileTextElements[babyCount].InnerText = shortStatusText;
                }

                babyCount++;
                if (babyCount > 4)
                {
                    break;
                }
            }

            // Import the wide tile payload into the medium tile
            var wideTileBindingElement = mediumTileXml.ImportNode(wideTileXml.GetElementsByTagName("binding").Item(0), true);

            mediumTileXml.GetElementsByTagName("visual").Item(0).AppendChild(wideTileBindingElement);

            // Create & schedule the tile notification
            tileNotification = new TileNotification(mediumTileXml)
            {
                Tag = activityName
            };
            if (latestStartTime.HasValue)
            {
                tileNotification.ExpirationTime = latestStartTime.Value.ToLocalTime();
            }

            tileUpdater.Update(tileNotification);
        }