package com.betomaluje.android.miband.example.activities;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import com.betomaluje.android.miband.example.R;
import com.betomaluje.miband.DateUtils;
import com.betomaluje.miband.models.ActivityData;
import com.betomaluje.miband.sqlite.ActivitySQLite;
import com.github.mikephil.charting.animation.Easing;
import com.github.mikephil.charting.charts.BarChart;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.data.BarData;
import com.github.mikephil.charting.data.BarDataSet;
import com.github.mikephil.charting.data.BarEntry;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
/**
* Created by betomaluje on 7/16/15.
*/
public class ActivitiesChartActivity extends BaseActivity {
private final String TAG = getClass().getSimpleName();
private BarChart mChart;
@Override
protected int getLayoutResource() {
return R.layout.activity_sleepchart;
}
@Override
protected boolean getDisplayHomeAsUpEnabled() {
return true;
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
findViewById(R.id.pieChart).setVisibility(View.GONE);
createGraph();
createChartLegend();
populateChart();
}
private void createGraph() {
mChart = (BarChart) findViewById(R.id.chart1);
mChart.setDescription("");
// scaling can now only be done on x- and y-axis separately
mChart.setPinchZoom(false);
mChart.setDrawBarShadow(false);
mChart.setDrawGridBackground(false);
}
private void createChartLegend() {
/*
Legend l = mChart.getLegend();
l.setPosition(Legend.LegendPosition.RIGHT_OF_CHART_INSIDE);
l.setYOffset(0f);
l.setYEntrySpace(0f);
l.setTextSize(8f);
*/
XAxis x = mChart.getXAxis();
x.setDrawLabels(true);
x.setDrawGridLines(false);
x.setEnabled(true);
x.setDrawLimitLinesBehindData(true);
YAxis y = mChart.getAxisLeft();
y.setAxisMaxValue(1f);
y.setDrawTopYLabelEntry(false);
y.setEnabled(true);
mChart.getAxisRight().setEnabled(false);
}
private void populateChart() {
Calendar before = Calendar.getInstance();
before.add(Calendar.DAY_OF_WEEK, -7);
Calendar today = Calendar.getInstance();
today.setTimeInMillis(System.currentTimeMillis());
//Log.i(TAG, "data from " + DateUtils.convertString(before) + " to " + DateUtils.convertString(today));
ArrayList<ActivityData> allActivities = ActivitySQLite.getInstance(ActivitiesChartActivity.this)
.getActivitySamples(before.getTimeInMillis(), today.getTimeInMillis());
//.getAllActivities();
ArrayList<String> xVals = new ArrayList<String>();
ArrayList<BarEntry> unknown = new ArrayList<BarEntry>();
int i = 0;
Calendar cal = Calendar.getInstance();
cal.clear();
Date date;
String dateStringFrom = "";
String dateStringTo = "";
SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy HH:mm");
SimpleDateFormat annotationDateFormat = new SimpleDateFormat("HH:mm");
float movementDivisor = 180.0f;
float value;
for (ActivityData ad : allActivities) {
// determine start and end dates
if (i == 0) {
cal.setTimeInMillis(ad.getTimestamp() * 1000L); // make sure it's converted to long
date = cal.getTime();
dateStringFrom = dateFormat.format(date);
} else if (i == allActivities.size() - 1) {
cal.setTimeInMillis(ad.getTimestamp() * 1000L); // same here
date = cal.getTime();
dateStringTo = dateFormat.format(date);
}
String xLabel = "";
cal.setTimeInMillis(ad.getTimestamp() * 1000L);
date = cal.getTime();
String dateString = annotationDateFormat.format(date);
xLabel = dateString;
xVals.add(xLabel);
Log.i(TAG, "date " + dateString);
Log.i(TAG, "steps " + ad.getSteps());
value = ((float) ad.getIntensity() / movementDivisor);
unknown.add(new BarEntry(value, i));
i++;
}
//BarDataSet set1 = new BarDataSet(deep, "Deep Sleep");
//set1.setColor(Color.BLUE);
//BarDataSet set2 = new BarDataSet(light, "Light Sleep");
//set2.setColor(Color.CYAN);
BarDataSet set3 = new BarDataSet(unknown, "Activity");
set3.setColor(Color.RED);
ArrayList<BarDataSet> dataSets = new ArrayList<BarDataSet>();
//dataSets.add(set1);
//dataSets.add(set2);
dataSets.add(set3);
BarData data = new BarData(xVals, dataSets);
// data.setValueFormatter(new LargeValueFormatter());
// add space between the dataset groups in percent of bar-width
data.setGroupSpace(0);
mChart.setDescription(String.format("From %1$s to %2$s",
dateStringFrom, dateStringTo));
mChart.setData(data);
mChart.invalidate();
mChart.animateY(2000, Easing.EasingOption.EaseInOutQuart);
}
}