public override UITableViewCell GetCell(UITableView tableView, NSIndexPath indexPath) { var cell = tableView.DequeueReusableCell((NSString)"Cell", indexPath); if (indexPath.Section == 0) { if (indexPath.Row == 0) { cell.TextLabel.Text = "Walking"; cell.DetailTextLabel.Text = formatTimeInterval(activityDataManager.WalkingDuration); } else if (indexPath.Row == 1) { cell.TextLabel.Text = "Running"; cell.DetailTextLabel.Text = formatTimeInterval(activityDataManager.RunningDuration); } else if (indexPath.Row == 2) { cell.TextLabel.Text = "Driving"; cell.DetailTextLabel.Text = formatTimeInterval(activityDataManager.VehicularDuration); } else if (indexPath.Row == 3) { cell.TextLabel.Text = "Moving"; cell.DetailTextLabel.Text = formatTimeInterval(activityDataManager.MovingDuration); } else if (indexPath.Row == 4) { cell.TextLabel.Text = "Current activity"; cell.DetailTextLabel.Text = currentActivity; } } else if (indexPath.Section == 1) { cell.TextLabel.Text = detailItem.IsToday ? "Live Step Counts" : "Step Counts"; cell.DetailTextLabel.Text = (activityDataManager.StepCounts + currentSteps).ToString(); } else if (indexPath.Section == 2) { var activity = activityDataManager.SignificantActivities [indexPath.Row]; cell.TextLabel.Text = String.Format("{0} ({1} - {2})", ActivityDataManager.ActivityTypeToString(activity.ActivityType), dateFormatter.StringFor(activity.StartDate), dateFormatter.StringFor(activity.EndDate)); if (activity.ActivityType == ActivityType.Walking || activity.ActivityType == ActivityType.Running) { cell.DetailTextLabel.Text = activity.StepCounts.ToString(); } else { cell.DetailTextLabel.Text = "n/a"; } } return(cell); }
async Task refreshDays () { if (dataManager == null) dataManager = new ActivityDataManager (); if (ActivityDataManager.CheckAvailability ()) { var authorized = await dataManager.CheckAuthorizationAsync (); DispatchQueue.MainQueue.DispatchAsync (() => { if (authorized) { NSDate date = NSDate.Now; motionActivityQueries.Clear (); for (int i = 0; i < 7; ++i) { var query = MotionActivityQuery.FromDate (date, -i); motionActivityQueries.Add (query); TableView.ReloadData (); } } else { new UIAlertView ("M7 not authorized", "Please enable Motion Activity for this application", null, "Cancel", null).Show (); } }); } else new UIAlertView ("M7 not available", "No activity or step counting is available", null, "Cancel", null).Show (); }
public AAPLDetailViewController (IntPtr handle) : base (handle) { dateFormatter = new NSDateFormatter (); dateFormatter.DateFormat = NSDateFormatter.GetDateFormatFromTemplate ("HH:mm", 0, NSLocale.CurrentLocale); activityDataManager = new ActivityDataManager (); }
public AAPLDetailViewController(IntPtr handle) : base(handle) { dateFormatter = new NSDateFormatter(); dateFormatter.DateFormat = NSDateFormatter.GetDateFormatFromTemplate("HH:mm", 0, NSLocale.CurrentLocale); activityDataManager = new ActivityDataManager(); }
public void StartMotionUpdates(Action <ActivityType> handler) { motionActivityMgr.StartActivityUpdates(NSOperationQueue.MainQueue, ((activity) => { handler(ActivityDataManager.ActivityToType(activity)); })); }
async Task <List <SignificantActivity> > aggregateSignificantActivitiesAsync(CMMotionActivity[] activities) { List <CMMotionActivity> filteredActivities = new List <CMMotionActivity> (); // Skip all contiguous unclassified actiivty so that only one remains. for (int i = 0; i < activities.Length; ++i) { CMMotionActivity activity = activities [i]; filteredActivities.Add(activity); if (!activity.Walking && !activity.Running && !activity.Automotive) { while (++i < activities.Length) { CMMotionActivity skipThisActivity = activities [i]; if (skipThisActivity.Walking || skipThisActivity.Running || skipThisActivity.Automotive) { i = i - 1; break; } } } } // Ignore all low confidence activities. for (int i = 0; i < filteredActivities.Count;) { CMMotionActivity activity = filteredActivities [i]; if (activity.Confidence == CMMotionActivityConfidence.Low) { filteredActivities.RemoveAt(i); } else { ++i; } } // Skip all unclassified activities if their duration is smaller than // some threshold. This has the effect of coalescing the remaining med + high // confidence activies together. for (int i = 0; i < filteredActivities.Count - 1;) { CMMotionActivity activity = filteredActivities [i]; CMMotionActivity nextActivity = filteredActivities [i + 1]; var duration = nextActivity.StartDate.SecondsSinceReferenceDate - activity.StartDate.SecondsSinceReferenceDate; if (duration < 60 * 3 && !activity.Walking && !activity.Running && !activity.Automotive) { filteredActivities.RemoveAt(i); } else { ++i; } } // Coalesce activities where they differ only in confidence. for (int i = 1; i < filteredActivities.Count;) { CMMotionActivity prevActivity = filteredActivities [i - 1]; CMMotionActivity activity = filteredActivities [i]; if ((prevActivity.Walking && activity.Walking) || (prevActivity.Running && activity.Running) || (prevActivity.Automotive && activity.Automotive)) { filteredActivities.RemoveAt(i); } else { ++i; } } // Finally transform into SignificantActivity; List <SignificantActivity> significantActivities = new List <SignificantActivity> (); for (int i = 0; i < filteredActivities.Count - 1; i++) { CMMotionActivity activity = filteredActivities [i]; CMMotionActivity nextActivity = filteredActivities [i + 1]; if (!activity.Walking && !activity.Running && !activity.Automotive) { continue; } var significantActivity = new SignificantActivity(ActivityDataManager.ActivityToType(activity), (DateTime)activity.StartDate, (DateTime)nextActivity.StartDate); try { var pedometerData = await pedometer.QueryPedometerDataAsync(significantActivity.StartDate, significantActivity.EndDate); significantActivity.StepCounts = pedometerData.NumberOfSteps.Int32Value; } catch { Console.WriteLine("Error, unable to retrieve step counts for range {0}, {1}", significantActivity.StartDate.SecondsSinceReferenceDate, significantActivity.EndDate.SecondsSinceReferenceDate); } significantActivities.Add(significantActivity); } return(significantActivities); }