public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
 {
     if (value != null && value is Measurement)
     {
         return(DisplayValueFormatter.GetMeasurementDisplayValue((Measurement)value));
     }
     return(null);
 }
Exemplo n.º 2
0
        private async Task <RemoteViews> BuildRemoteViews(Context context, int[] appWidgetIds)
        {
            RemoteViews      widgetView   = new RemoteViews(context.PackageName, Resource.Layout.widget_measurements);
            IList <Location> locationList = null;

            try
            {
                locationList = (await _locationDataService.GetAllDataAsync(true)).ToList();
            }
            catch
            {
                // Error handling needs more work, and check how to make widget work more reliably in general
                // For now, just go without updating anything on widget if reading data fails due to OS preventing access etc.
            }

            if (locationList != null)
            {
                if (locationList.Count > 0)
                {
                    var measurements = new List <Tuple <string, Measurement> >();
                    foreach (var location in locationList)
                    {
                        foreach (var measurement in location)
                        {
                            if (measurement.IsVisibleInWidget)
                            {
                                measurements.Add(new Tuple <string, Measurement>(location.Name, measurement));
                            }
                        }
                    }

                    if (measurements.Count >= 1)
                    {
                        widgetView.SetTextViewText(Resource.Id.location1, measurements[0].Item1);
                        widgetView.SetTextViewText(Resource.Id.sensor1, measurements[0].Item2.SensorName);
                        widgetView.SetTextViewText(Resource.Id.value1, DisplayValueFormatter.GetMeasurementDisplayValue(measurements[0].Item2));
                    }
                    if (measurements.Count >= 2)
                    {
                        widgetView.SetTextViewText(Resource.Id.location2, measurements[1].Item1);
                        widgetView.SetTextViewText(Resource.Id.sensor2, measurements[1].Item2.SensorName);
                        widgetView.SetTextViewText(Resource.Id.value2, DisplayValueFormatter.GetMeasurementDisplayValue(measurements[1].Item2));
                    }
                    if (measurements.Count >= 3)
                    {
                        widgetView.SetTextViewText(Resource.Id.location3, measurements[2].Item1);
                        widgetView.SetTextViewText(Resource.Id.sensor3, measurements[2].Item2.SensorName);
                        widgetView.SetTextViewText(Resource.Id.value3, DisplayValueFormatter.GetMeasurementDisplayValue(measurements[2].Item2));
                    }
                    var firstLocation = locationList.FirstOrDefault();
                    widgetView.SetTextViewText(Resource.Id.updated, string.Format("{0}:{1}", firstLocation.Timestamp.Hour, firstLocation.Timestamp.Minute.ToString("00")));
                }
                else
                {
                    widgetView.SetTextViewText(Resource.Id.updated, context.Resources.GetString(Resource.String.no_widget_data_found));
                }
            }

            RegisterClicks(context, appWidgetIds, widgetView);

            return(widgetView);
        }