protected void onCreate()

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);
      }
    }
  }