public void SetAlert(WeatherAlertViewModel alertView) { headerCard.SetCardBackgroundColor(GetColorFromAlertSeverity(alertView.AlertSeverity)); alertIcon.SetImageResource(GetDrawableFromAlertType(alertView.AlertType)); alertTitle.Text = alertView.Title; bodyTextView.Text = string.Format("{0}\n{1}\n{2}", alertView.ExpireDate, alertView.Message, alertView.Attribution); }
public static void CreateAlerts(LocationData location, List <WeatherAlert> alerts) { var toastNotifier = ToastNotificationManager.CreateToastNotifier(); foreach (WeatherAlert alert in alerts) { var alertVM = new WeatherAlertViewModel(alert); var toastContent = new ToastContent() { Visual = new ToastVisual() { BindingGeneric = new ToastBindingGeneric() { Children = { new AdaptiveText() { Text = alertVM.Title }, new AdaptiveText() { Text = alertVM.ExpireDate } }, AppLogoOverride = new ToastGenericAppLogo() { Source = GetAssetFromAlertType(alert.Type) }, Attribution = new ToastGenericAttributionText() { Text = alertVM.Attribution } } }, Launch = new QueryString() { { "action", "view-alerts" }, { "query", location.query }, }.ToString() }; // Set a unique ID for the notification var notID = String.Format("{0}:{1}", location.query, ((int)alertVM.AlertType).ToString()); // Create the toast notification var toastNotif = new ToastNotification(toastContent.GetXml()) { Group = Tag, Tag = notID, ExpirationTime = alert.ExpiresDate, }; // And send the notification toastNotifier.Show(toastNotif); } }
public WeatherAlertPanel(Context context, WeatherAlertViewModel alertView) : base(context) { Initialize(context); SetAlert(alertView); }
public static async Task CreateNotifications(LocationData location, List <WeatherAlert> alerts) { // Gets an instance of the NotificationManager service NotificationManagerCompat mNotifyMgr = NotificationManagerCompat.From(App.Context); InitChannel(); // Create click intent // Start WeatherNow Activity with weather data Intent intent = new Intent(App.Context, typeof(MainActivity)) .SetAction(Widgets.WeatherWidgetService.ACTION_SHOWALERTS) .PutExtra("data", location.ToJson()) .PutExtra(Widgets.WeatherWidgetService.ACTION_SHOWALERTS, true) .SetFlags(ActivityFlags.ClearTop | ActivityFlags.NewTask | ActivityFlags.ClearTask); PendingIntent clickPendingIntent = PendingIntent.GetActivity(App.Context, 0, intent, 0); // Build update foreach (WeatherAlert alert in alerts) { var alertVM = new WeatherAlertViewModel(alert); var iconBmp = ImageUtils.TintBitmap( await BitmapFactory.DecodeResourceAsync(App.Context.Resources, GetDrawableFromAlertType(alertVM.AlertType)), Color.Black); var title = String.Format("{0} - {1}", alertVM.Title, location.name); NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(App.Context, NOT_CHANNEL_ID) .SetSmallIcon(Resource.Drawable.ic_error_white) .SetLargeIcon(iconBmp) .SetContentTitle(title) .SetContentText(alertVM.ExpireDate) .SetStyle(new NotificationCompat.BigTextStyle().BigText(alertVM.ExpireDate)) .SetContentIntent(clickPendingIntent) .SetOnlyAlertOnce(true) .SetAutoCancel(true) .SetPriority(NotificationCompat.PriorityDefault) as NotificationCompat.Builder; if (Build.VERSION.SdkInt < BuildVersionCodes.N) { // Tell service to remove stored notification mBuilder.SetDeleteIntent(GetDeleteNotificationIntent((int)alertVM.AlertType)); } if (Build.VERSION.SdkInt >= BuildVersionCodes.N || WeatherAlertNotificationService.GetNotificationsCount() >= MIN_GROUPCOUNT) { mBuilder.SetGroup(TAG); } // Builds the notification and issues it. // Tag: location.query; id: weather alert type if (Build.VERSION.SdkInt < BuildVersionCodes.N) { WeatherAlertNotificationService.AddNotication((int)alertVM.AlertType, title); } mNotifyMgr.Notify(location.query, (int)alertVM.AlertType, mBuilder.Build()); } bool buildSummary = false; if (Build.VERSION.SdkInt >= BuildVersionCodes.M) { try { NotificationManager mNotifyMgrV23 = (NotificationManager)App.Context.GetSystemService(App.NotificationService); var statNotifs = mNotifyMgrV23.GetActiveNotifications(); if (statNotifs?.Length > 0) { buildSummary = statNotifs.Count(not => location.query.Equals(not.Tag)) >= MIN_GROUPCOUNT; } } catch (Exception ex) { Logger.WriteLine(LoggerLevel.Debug, ex, "SimpleWeather: {0}: error accessing notifications", LOG_TAG); } } else { buildSummary = WeatherAlertNotificationService.GetNotificationsCount() >= MIN_GROUPCOUNT; } if (buildSummary) { // Notification inboxStyle for grouped notifications var inboxStyle = new NotificationCompat.InboxStyle(); if (Build.VERSION.SdkInt < BuildVersionCodes.N) { // Add active notification titles to summary notification foreach (var notif in WeatherAlertNotificationService.GetNotifications()) { mNotifyMgr.Cancel(location.query, notif.Key); inboxStyle.AddLine(notif.Value); } inboxStyle.SetBigContentTitle(App.Context.GetString(Resource.String.title_fragment_alerts)); inboxStyle.SetSummaryText(location.name); } else { inboxStyle.SetSummaryText(App.Context.GetString(Resource.String.title_fragment_alerts)); } NotificationCompat.Builder mSummaryBuilder = new NotificationCompat.Builder(App.Context, NOT_CHANNEL_ID) .SetSmallIcon(Resource.Drawable.ic_error_white) .SetContentTitle(App.Context.GetString(Resource.String.title_fragment_alerts)) .SetContentText(location.name) .SetStyle(inboxStyle) .SetGroup(TAG) .SetGroupSummary(true) .SetContentIntent(clickPendingIntent) .SetOnlyAlertOnce(true) .SetAutoCancel(true) as NotificationCompat.Builder; if (Build.VERSION.SdkInt < BuildVersionCodes.N) { mSummaryBuilder.SetDeleteIntent(GetDeleteAllNotificationsIntent()); } // Builds the summary notification and issues it. mNotifyMgr.Notify(location.query, SUMMARY_ID, mSummaryBuilder.Build()); } }