package com.survivingwithandroid.ubiapp; import android.content.Context; import android.graphics.Color; import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; import android.support.v4.app.Fragment; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.github.mikephil.charting.charts.BarChart; import com.github.mikephil.charting.charts.LineChart; 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 com.github.mikephil.charting.data.Entry; import com.github.mikephil.charting.data.LineData; import com.github.mikephil.charting.data.LineDataSet; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; public class ChartFragment extends Fragment { private String API_KEY = "xxxxxxxxxxxxxxxxxx"; private String tempVarId = "5656116076254219f78cad12"; private String humVarId = "565611777625421b5e91a1ef"; private static final SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); // UI reference private LineChart tempChart; private BarChart humChart; public ChartFragment() { } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View v = inflater.inflate(R.layout.fragment_chart, container, false); tempChart = (LineChart) v.findViewById(R.id.chartTemp); humChart = (BarChart) v.findViewById(R.id.chartPress); initChartTemp(tempChart); initChartBar(humChart); ( new UbidotsClient() ).handleUbidots(tempVarId, API_KEY, new UbidotsClient.UbiListener() { @Override public void onDataReady(List<UbidotsClient.Value> result) { Log.d("Chart", "======== On data Ready ==========="); List<Entry> entries = new ArrayList(); List<String> labels = new ArrayList<String>(); for (int i=0; i < result.size(); i++) { Entry be = new Entry(result.get(i).value, i); entries.add(be); Log.d("Chart", be.toString()); // Convert timestamp to date Date d = new Date(result.get(i).timestamp); // Create Labels labels.add(sdf.format(d)); } LineDataSet lse = new LineDataSet(entries, "Tempearature"); lse.setDrawHighlightIndicators(false); lse.setDrawValues(false); lse.setColor(Color.RED); lse.setCircleColor(Color.RED); lse.setLineWidth(1f); lse.setCircleSize(3f); lse.setDrawCircleHole(false); lse.setFillAlpha(65); lse.setFillColor(Color.RED); LineData ld = new LineData(labels, lse); tempChart.setData(ld); Handler handler = new Handler(ChartFragment.this.getActivity().getMainLooper()); handler.post(new Runnable() { @Override public void run() { tempChart.invalidate(); } }); } }); // Pressure ( new UbidotsClient() ).handleUbidots(humVarId, API_KEY, new UbidotsClient.UbiListener() { @Override public void onDataReady(List<UbidotsClient.Value> result) { Log.d("Chart", "======== On data Ready ==========="); List<BarEntry> entries = new ArrayList(); List<String> labels = new ArrayList<String>(); for (int i=0; i < result.size(); i++) { BarEntry be = new BarEntry(result.get(i).value, i); entries.add(be); Log.d("Chart", be.toString()); // Convert timestamp to date Date d = new Date(result.get(i).timestamp); // Create Labels labels.add(sdf.format(d)); } BarDataSet lse = new BarDataSet(entries, "Humidity"); lse.setDrawValues(false); lse.setColor(Color.BLUE); BarData bd = new BarData(labels, lse); humChart.setData(bd); Handler handler = new Handler(ChartFragment.this.getActivity().getMainLooper()); handler.post(new Runnable() { @Override public void run() { humChart.invalidate(); } }); } }); return v; } @Override public void onAttach(Context context) { super.onAttach(context); } @Override public void onDetach() { super.onDetach(); } private void initChartTemp(LineChart chart) { chart.setTouchEnabled(true); chart.setDrawGridBackground(true); chart.getAxisRight().setEnabled(false); chart.setDrawGridBackground(true); YAxis leftAxis = chart.getAxisLeft(); leftAxis.setAxisMaxValue(30F); leftAxis.setAxisMinValue(10F); leftAxis.setStartAtZero(false); leftAxis.setAxisLineWidth(2); leftAxis.setDrawGridLines(true); // X-Axis XAxis xAxis = chart.getXAxis(); xAxis.resetLabelsToSkip(); xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); xAxis.setDrawGridLines(true); } private void initChartBar(BarChart chart) { chart.setTouchEnabled(true); chart.setDrawGridBackground(true); chart.getAxisRight().setEnabled(false); chart.setDrawGridBackground(true); YAxis leftAxis = chart.getAxisLeft(); leftAxis.setAxisMaxValue(100F); leftAxis.setAxisMinValue(10F); leftAxis.setStartAtZero(false); leftAxis.setAxisLineWidth(2); leftAxis.setDrawGridLines(true); // X-Axis XAxis xAxis = chart.getXAxis(); xAxis.resetLabelsToSkip(); xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); xAxis.setDrawGridLines(true); } }