in Android/app/src/main/java/com/harvard/studyappmodule/ChartActivity.java [109:511]
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_chart);
dbServiceSubscriber = new DbServiceSubscriber();
analyticsInstance = CustomFirebaseAnalytics.getInstance(this);
realm = AppController.getRealmobj(this);
networkChangeReceiver = new NetworkChangeReceiver(this);
dashboardData =
dbServiceSubscriber.getDashboardDataFromDB(getIntent().getStringExtra("studyId"), realm);
chartlayout = (LinearLayout) findViewById(R.id.chartlayout);
RelativeLayout backBtn = (RelativeLayout) findViewById(R.id.backBtn);
shareBtn = (RelativeLayout) findViewById(R.id.mShareBtn);
shareBtn.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
Bundle eventProperties = new Bundle();
eventProperties.putString(
CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON,
getString(R.string.chart_actvity_share));
analyticsInstance.logEvent(
CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties);
screenshotWritingPermission();
}
});
backBtn.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
Bundle eventProperties = new Bundle();
eventProperties.putString(
CustomFirebaseAnalytics.Param.BUTTON_CLICK_REASON,
getString(R.string.chart_actvity_back));
analyticsInstance.logEvent(
CustomFirebaseAnalytics.Event.ADD_BUTTON_CLICK, eventProperties);
finish();
}
});
if (dashboardData != null) {
for (int i = 0; i < dashboardData.getDashboard().getCharts().size(); i++) {
LinearLayout linearLayout = new LinearLayout(ChartActivity.this);
linearLayout.setOrientation(LinearLayout.VERTICAL);
layoutParams =
new LinearLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
layoutParams.setMargins(10, 30, 10, 30);
linearLayout.setLayoutParams(layoutParams);
TextView textView = new TextView(ChartActivity.this);
LinearLayout.LayoutParams layoutParams =
new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
textView.setLayoutParams(layoutParams);
textView.setPadding(10, 10, 10, 10);
textView.setBackgroundColor(getResources().getColor(R.color.dark_gray));
textView.setTextColor(Color.BLACK);
textView.setText(dashboardData.getDashboard().getCharts().get(i).getDisplayName());
final LineChart chart = new LineChart(ChartActivity.this);
chart.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 600));
chart.setTouchEnabled(true);
chart.setDragEnabled(true);
chart.setScaleEnabled(false);
CustomMarkerView mv = new CustomMarkerView(this, R.layout.custom_marker_view_layout);
chart.setMarkerView(mv);
final List<String> filteredXValues = new ArrayList<>();
final List<Entry> entryList = new ArrayList<>();
// Keep track fo maxMoleDiameter for TempGraphHelper.updateLineChart();
float maxValue = 0;
final ChartDataSource chartDataSource =
dashboardData.getDashboard().getCharts().get(i).getDataSource();
final RealmResults<StepRecordCustom> stepRecordCustomList;
stepRecordCustomList =
dbServiceSubscriber.getResult(
getIntent().getStringExtra("studyId")
+ "_STUDYID_"
+ chartDataSource.getActivity().getActivityId(),
chartDataSource.getKey(),
null,
null,
realm);
// Offset each xPosition by one to compensate for
if (!chartDataSource.getTimeRangeType().equalsIgnoreCase("runs")
&& !chartDataSource.getTimeRangeType().equalsIgnoreCase("hours_of_day")) {
String type;
if (chartDataSource.getTimeRangeType().equalsIgnoreCase("days_of_week")) {
type = WEEK;
} else if (chartDataSource.getTimeRangeType().equalsIgnoreCase("days_of_month")) {
type = MONTH;
} else if (chartDataSource.getTimeRangeType().equalsIgnoreCase("weeks_of_month")) {
type = MONTH;
} else {
type = YEAR;
}
addTimeLayout(
type,
chartDataSource.getTimeRangeType(),
chart,
stepRecordCustomList,
filteredXValues,
entryList,
null,
i,
dashboardData
.getDashboard()
.getCharts()
.get(i)
.getConfiguration()
.getSettings()
.get(0)
.getBarColor(),
chartDataSource.getActivity().getActivityId());
for (int j = 0, size = stepRecordCustomList.size(); j < size; j++) {
if (stepRecordCustomList.get(j).getCompleted().before(endtime)
&& stepRecordCustomList.get(j).getCompleted().after(starttime)) {
JSONObject jsonObject;
String answer = "";
String data = "";
try {
jsonObject = new JSONObject(stepRecordCustomList.get(j).result);
String[] id = stepRecordCustomList.get(j).activityID.split("_STUDYID_");
ActivitiesWS activityObj = dbServiceSubscriber.getActivityObj(id[1], id[0], realm);
if (activityObj.getType().equalsIgnoreCase("task")) {
JSONObject answerjson = new JSONObject(jsonObject.getString("answer"));
answer = answerjson.getString("duration");
answer = Double.toString(Integer.parseInt(answer) / 60f);
data = "min \nfor\n" + answerjson.getString("value") + " kicks";
} else {
answer = jsonObject.getString("answer");
data = "";
}
if (answer == null || answer.equalsIgnoreCase("")) {
answer = "0";
}
} catch (JSONException e) {
Logger.log(e);
if (answer.equalsIgnoreCase("")) {
answer = "0";
}
}
if (chartDataSource.getTimeRangeType().equalsIgnoreCase("days_of_week")) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEE");
filteredXValues.clear();
for (int k = 0; k < day.length; k++) {
String s = simpleDateFormat.format(stepRecordCustomList.get(j).getCompleted());
if (s.equalsIgnoreCase(day[k])) {
entryList.add(new Entry(Float.parseFloat(answer), k, data));
}
filteredXValues.add(day[k]);
}
} else if (chartDataSource.getTimeRangeType().equalsIgnoreCase("days_of_month")) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("d");
int month = starttime.getMonth();
int year = starttime.getYear();
filteredXValues.clear();
for (int k = 1; k <= numberOfDaysInMonth(month, year); k++) {
String s = simpleDateFormat.format(stepRecordCustomList.get(j).getCompleted());
if (s.equalsIgnoreCase("" + k)) {
entryList.add(new Entry(Float.parseFloat(answer), k - 1, data));
}
if (k % 5 == 0) {
filteredXValues.add("" + k);
} else {
filteredXValues.add("");
}
}
} else if (chartDataSource.getTimeRangeType().equalsIgnoreCase("weeks_of_month")) {
Calendar cal = Calendar.getInstance();
cal.setFirstDayOfWeek(Calendar.SUNDAY);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MMM");
filteredXValues.clear();
int weekno = numberOfWeeksInMonth(simpleDateFormat.format(starttime));
for (int k = 1; k <= weekno; k++) {
cal.setTime(stepRecordCustomList.get(j).getCompleted());
int week = cal.get(Calendar.WEEK_OF_MONTH);
if (k == week) {
entryList.add(new Entry(Float.parseFloat(answer), k - 1, data));
}
filteredXValues.add("W" + k);
}
} else if (chartDataSource.getTimeRangeType().equalsIgnoreCase("months_of_year")) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MMM");
filteredXValues.clear();
for (int k = 0; k < month.length; k++) {
String s = simpleDateFormat.format(stepRecordCustomList.get(j).getCompleted());
if (s.equalsIgnoreCase(monthfull[k])) {
entryList.add(new Entry(Float.parseFloat(answer), k, data));
}
filteredXValues.add(month[k]);
}
}
}
}
} else if (chartDataSource.getTimeRangeType().equalsIgnoreCase("runs")) {
linearLayout1 = new LinearLayout(ChartActivity.this);
SimpleDateFormat simpleDateFormat = AppController.getDateFormatForApi();
dateType = RUN;
dateTypeArray.add(RUN);
fromDayVals.add(simpleDateFormat.format(new Date()));
toDayVals.add(simpleDateFormat.format(new Date()));
filteredXValues.clear();
ArrayList<RunChart> runCharts = new ArrayList<>();
List<List<RunChart>> lists = new ArrayList<>();
RealmResults<ActivityRun> activityRuns =
dbServiceSubscriber.getAllActivityRunFromDB(
getIntent().getStringExtra("studyId"),
chartDataSource.getActivity().getActivityId(),
realm);
for (int k = 0; k < activityRuns.size(); k++) {
lists.clear();
Date runCompletedDate = null;
String runAnswer = null;
String runAnswerData = null;
for (int l = 0; l < stepRecordCustomList.size(); l++) {
if (stepRecordCustomList.get(l).taskId.contains("_")) {
String[] taskId = stepRecordCustomList.get(l).taskId.split("_STUDYID_");
String runId =
taskId[1].substring(taskId[1].lastIndexOf("_") + 1, taskId[1].length());
JSONObject jsonObject;
String answer = "";
String data = "";
try {
jsonObject = new JSONObject(stepRecordCustomList.get(l).result);
String[] id = stepRecordCustomList.get(l).activityID.split("_STUDYID_");
ActivitiesWS activityObj =
dbServiceSubscriber.getActivityObj(id[1], id[0], realm);
if (activityObj.getType().equalsIgnoreCase("task")) {
JSONObject answerjson = new JSONObject(jsonObject.getString("answer"));
answer = answerjson.getString("duration");
answer = Double.toString(Integer.parseInt(answer) / 60f);
data = "min \nfor\n" + answerjson.getString("value") + " kicks";
} else {
answer = jsonObject.getString("answer");
data = "";
}
if (answer == null || answer.equalsIgnoreCase("")) {
answer = "0";
}
} catch (JSONException e) {
Logger.log(e);
if (answer.equalsIgnoreCase("")) {
answer = "0";
}
}
if (runId.equalsIgnoreCase("" + activityRuns.get(k).getRunId())) {
runAnswer = answer;
runAnswerData = data;
runCompletedDate = stepRecordCustomList.get(l).completed;
break;
}
}
}
RunChart runChart = new RunChart();
runChart.setCompletedDate(runCompletedDate);
runChart.setResult(runAnswer);
runChart.setResultData(runAnswerData);
runChart.setRunId("" + activityRuns.get(k).getRunId());
runChart.setStartDate(activityRuns.get(k).getStartDate());
runChart.setEnddDate(activityRuns.get(k).getEndDate());
runCharts.add(runChart);
}
// new chart
lists = split(runCharts, 5);
filteredXValues.clear();
entryList.clear();
if (lists.size() > 0) {
for (int l = 0; l < lists.get(0).size(); l++) {
if (lists.get(0).get(l).getResult() != null) {
entryList.add(
new Entry(
Float.parseFloat(lists.get(0).get(l).getResult()),
Integer.parseInt(lists.get(0).get(l).getRunId()) - 1,
lists.get(0).get(l).getResultData()));
}
filteredXValues.add("" + (Integer.parseInt(lists.get(0).get(l).getRunId())));
}
}
addTimeLayoutRuns(
lists,
chartDataSource.getTimeRangeType(),
chart,
stepRecordCustomList,
filteredXValues,
entryList,
activityRuns,
i,
dashboardData
.getDashboard()
.getCharts()
.get(i)
.getConfiguration()
.getSettings()
.get(0)
.getBarColor(),
chartDataSource.getActivity().getActivityId(),
0);
} else if (chartDataSource.getTimeRangeType().equalsIgnoreCase("hours_of_day")) {
final RealmResults<ActivityRun> activityRuns =
dbServiceSubscriber.getAllActivityRunforDate(
chartDataSource.getActivity().getActivityId(),
getIntent().getStringExtra("studyId"),
new Date(),
realm);
addTimeLayout(
DAY,
chartDataSource.getTimeRangeType(),
chart,
stepRecordCustomList,
filteredXValues,
entryList,
activityRuns,
i,
dashboardData
.getDashboard()
.getCharts()
.get(i)
.getConfiguration()
.getSettings()
.get(0)
.getBarColor(),
chartDataSource.getActivity().getActivityId());
filteredXValues.clear();
for (int k = 0; k < activityRuns.size(); k++) {
for (int l = 0; l < stepRecordCustomList.size(); l++) {
if (stepRecordCustomList.get(l).getCompleted().before(endtime)
&& stepRecordCustomList.get(l).getCompleted().after(starttime)) {
if (stepRecordCustomList.get(l).taskId.contains("_")) {
String[] taskId = stepRecordCustomList.get(l).taskId.split("_STUDYID_");
String runId =
taskId[1].substring(taskId[1].lastIndexOf("_") + 1, taskId[1].length());
JSONObject jsonObject;
String answer = "";
String data = "";
try {
jsonObject = new JSONObject(stepRecordCustomList.get(l).result);
String[] id = stepRecordCustomList.get(l).activityID.split("_STUDYID_");
ActivitiesWS activityObj =
dbServiceSubscriber.getActivityObj(id[1], id[0], realm);
if (activityObj.getType().equalsIgnoreCase("task")) {
JSONObject answerjson = new JSONObject(jsonObject.getString("answer"));
answer = answerjson.getString("duration");
answer = Double.toString(Integer.parseInt(answer) / 60f);
data = "min \nfor\n" + answerjson.getString("value") + " kicks";
} else {
answer = jsonObject.getString("answer");
data = "";
}
if (answer == null || answer.equalsIgnoreCase("")) {
answer = "0";
}
} catch (JSONException e) {
Logger.log(e);
if (answer.equalsIgnoreCase("")) {
answer = "0";
}
}
if (runId.equalsIgnoreCase("" + activityRuns.get(k).getRunId())) {
entryList.add(new Entry(Float.parseFloat(answer), k, data));
}
}
}
}
filteredXValues.add("" + (k + 1));
}
}
// Update chart w/ our data
TempGraphHelper.updateLineChart(
chart,
(int) maxValue,
entryList,
filteredXValues,
dashboardData
.getDashboard()
.getCharts()
.get(i)
.getConfiguration()
.getSettings()
.get(0)
.getBarColor());
// Move to "end" of chart
linearLayout.addView(textView);
if (linearLayout1 != null) {
linearLayout.addView(linearLayout1);
}
linearLayout.addView(chart);
chartlayout.addView(linearLayout);
}
}
}