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();
 }
Example #5
0
 public void StartMotionUpdates(Action <ActivityType> handler)
 {
     motionActivityMgr.StartActivityUpdates(NSOperationQueue.MainQueue, ((activity) => {
         handler(ActivityDataManager.ActivityToType(activity));
     }));
 }
Example #6
0
        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);
        }