public AsyncTask Start(Student student, Activity activity, bool resetActivityState = false)
        {
            return(activityService.LoadActivityState(student.Id, activity.Id, true)
                   .Then((prevResult, onCompleted, onError) =>
            {
                ActivityState activityState = prevResult.ResultAs <ActivityState>();
                if (resetActivityState || !activityState.CanResume)
                {
                    // Generate a new trace ID for restarts or new games that don't have saved state
                    activityState.TraceId = Guid.NewGuid().ToString();
                }

                DebugLog.Info("Start activity!");
//					startedEntry = TraceLog.Player(TraceLog.Action.Started, "Activity",
//					                               "Name", activity.Name,
//					                               "ActivityUri", activity.Uri,
//					                               "IsComplete", activityState.IsComplete,
//					                               "CanResume", activityState.CanResume,
//					                               "Restart", resetActivityState,
//					                               "StartDate", activityState.ModifiedDate.ToIso8601(),
//					                               "Username", student.Username,
//					                               "SubjectId", student.SubjectId,
//					                               "TraceId", activityState.TraceId);
//
//					if (activity.Uri.Contains("episode"))
//					{
//						LaunchEpisode(activityState, activity.Name, activity.Uri, resetActivityState);
//					}
//					else if (activity.Uri.Contains("assessment"))
//					{
//						LaunchAssessment(activityState, activity.Name, activity.Uri);
//					}
//					else if (activity.Uri.Contains("http"))
//					{
//						LaunchUrl(activityState, activity.Name, activity.Uri);
//					}
//					else
//					{
//						throw new Exception(String.Format("{0} has an unknown URI type: ", activity.Name, activity.Uri));
//					}

                onCompleted(viewModelFactory.Resolve <ActivityViewModel>(Resolve(activity.Uri), vm =>
                {
                    vm.Activity = activity;
                    vm.ActivityState = activityState;
                }));

//					promise.Resolve(viewModelFactory.Resolve<WebActivityViewModel>(web =>
//					{
//						web.Title = "Web Browser Launched";
//						web.Message = "Complete web viewer action for " + activity.Name;
//						web.URL = "http://www.google.com";
//					}));
            }));
        }
 public void Transition(ViewModel from, Type toViewModelType)
 {
     Transition(from, viewModelFactory.Resolve(toViewModelType));
 }