in Android/app/src/main/java/com/harvard/studyappmodule/surveyscheduler/SurveyScheduler.java [581:753]
public ActivityStatus getActivityStatus(
ActivityData activityData,
String studyId,
String activityId,
Date currentDate,
ActivitiesWS activityListItem) {
String activityStatus = SurveyActivitiesFragment.YET_To_START;
int currentRunId = 0;
RealmResults<ActivityRun> activityRuns =
dbServiceSubscriber.getAllActivityRunFromDB(studyId, activityId, realm);
activityRuns = activityRuns.sort("runId", Sort.ASCENDING);
int missedRun = 0;
int completedRun = 0;
Date currentRunStartDate = null;
Date currentRunEndDate = null;
boolean runAvailable = false;
Activities activitiesForStatus = null;
SimpleDateFormat simpleDateFormat = AppController.getDateFormatForApi();
ActivityRun activityRun = null;
ActivityRun activityPreviousRun = null;
boolean previousRun = true;
for (int i = 0; i < activityRuns.size(); i++) {
Date activityRunStDate = null;
Date activityRunEndDate = null;
try {
activityRunStDate =
simpleDateFormat.parse(simpleDateFormat.format(activityRuns.get(i).getStartDate()));
activityRunEndDate =
simpleDateFormat.parse(simpleDateFormat.format(activityRuns.get(i).getEndDate()));
} catch (ParseException e) {
Logger.log(e);
}
if ((currentDate.equals(activityRunStDate) || currentDate.after(activityRunStDate))
&& (currentDate.equals(activityRunEndDate) || currentDate.before(activityRunEndDate))) {
activityRun = activityRuns.get(i);
} else if (currentDate.after(activityRunStDate)) {
activityPreviousRun = activityRuns.get(i);
previousRun = false;
}
}
if (activityRun != null) {
runAvailable = true;
currentRunId = activityRun.getRunId();
currentRunStartDate = activityRun.getStartDate();
currentRunEndDate = activityRun.getEndDate();
} else {
if (activityPreviousRun != null) {
currentRunId = activityPreviousRun.getRunId();
currentRunStartDate = activityPreviousRun.getStartDate();
currentRunEndDate = activityPreviousRun.getEndDate();
}
}
boolean activityIdAvailable = false;
if (activityData.getActivities() != null) {
for (int i = 0; i < activityData.getActivities().size(); i++) {
if (activityData.getActivities().get(i).getActivityId().equalsIgnoreCase(activityId)) {
activitiesForStatus = activityData.getActivities().get(i);
if (activitiesForStatus.getActivityRunId() != null
&& !activitiesForStatus.getActivityRunId().equalsIgnoreCase("")) {
activityIdAvailable = true;
}
}
}
}
if (runAvailable && activityIdAvailable) {
if (currentRunId == Integer.parseInt(activitiesForStatus.getActivityRunId())) {
activityStatus = activitiesForStatus.getStatus();
} else {
activityStatus = SurveyActivitiesFragment.YET_To_START;
}
} else if (runAvailable) {
activityStatus = SurveyActivitiesFragment.YET_To_START;
} else if (activityIdAvailable) {
if (currentRunId == Integer.parseInt(activitiesForStatus.getActivityRunId())) {
if (activitiesForStatus.getStatus().equalsIgnoreCase(SurveyActivitiesFragment.COMPLETED)) {
activityStatus = activitiesForStatus.getStatus();
} else {
activityStatus = SurveyActivitiesFragment.INCOMPLETE;
}
} else {
activityStatus = SurveyActivitiesFragment.INCOMPLETE;
}
} else {
if (activityPreviousRun == null) {
activityStatus = SurveyActivitiesFragment.YET_To_START;
} else {
activityStatus = SurveyActivitiesFragment.INCOMPLETE;
}
}
Activities activities =
dbServiceSubscriber.getActivityPreferenceBySurveyId(studyId, activityId, realm);
int totalRun;
SimpleDateFormat startTimeDateFormat = AppController.getDateFormatUtcNoZone();
Date starttime = null;
try {
starttime = startTimeDateFormat.parse(activityListItem.getStartTime().split("\\.")[0]);
} catch (ParseException e) {
Logger.log(e);
}
Date endtime = null;
try {
if (activityListItem.getEndTime() != null
&& !activityListItem.getEndTime().equalsIgnoreCase("")) {
endtime = startTimeDateFormat.parse(activityListItem.getEndTime().split("\\.")[0]);
}
} catch (ParseException e) {
Logger.log(e);
}
if (starttime != null) {
if (AppController.checkafter(starttime)) {
missedRun = 0;
completedRun = 0;
totalRun =
getTotalRunsForUpcomingActivities(
activityListItem, starttime, endtime, startTimeDateFormat);
} else if (AppController.isWithinRange(starttime, endtime)) {
if (activities != null && activities.getActivityRun() != null) {
completedRun = activities.getActivityRun().getCompleted();
}
if (currentRunId <= 0) {
missedRun = 0;
currentRunStartDate = new Date();
currentRunEndDate = new Date();
} else {
missedRun = currentRunId - completedRun;
}
if (runAvailable && !activityStatus.equalsIgnoreCase(SurveyActivitiesFragment.COMPLETED)) {
missedRun--;
}
if (missedRun < 0) {
missedRun = 0;
}
totalRun = activityRuns.size();
} else {
if (activities != null && activities.getActivityRun() != null) {
completedRun = activities.getActivityRun().getCompleted();
}
totalRun = activityRuns.size();
missedRun = totalRun - completedRun;
if (missedRun < 0) {
missedRun = 0;
}
}
} else {
completedRun = 0;
currentRunId = 0;
missedRun = 0;
totalRun = 0;
currentRunStartDate = new Date();
currentRunEndDate = new Date();
activityStatus = SurveyActivitiesFragment.YET_To_START;
}
ActivityStatus activityStatusData = new ActivityStatus();
activityStatusData.setCompletedRun(completedRun);
activityStatusData.setCurrentRunId(currentRunId);
activityStatusData.setMissedRun(missedRun);
activityStatusData.setCurrentRunStartDate(currentRunStartDate);
activityStatusData.setCurrentRunEndDate(currentRunEndDate);
activityStatusData.setStatus(activityStatus);
activityStatusData.setTotalRun(totalRun);
activityStatusData.setRunIdAvailable(runAvailable);
return activityStatusData;
}