package org.starfishrespect.myconsumption.android.ui; import android.graphics.Color; import android.graphics.Typeface; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.view.ViewCompat; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import com.github.mikephil.charting.charts.PieChart; import com.github.mikephil.charting.components.Legend; import com.github.mikephil.charting.data.Entry; import com.github.mikephil.charting.data.PieData; import com.github.mikephil.charting.data.PieDataSet; import com.github.mikephil.charting.utils.ColorTemplate; import org.starfishrespect.myconsumption.android.R; import org.starfishrespect.myconsumption.android.SingleInstance; import org.starfishrespect.myconsumption.android.util.StatUtils; import org.starfishrespect.myconsumption.server.api.dto.StatDTO; import java.text.DecimalFormat; import java.util.ArrayList; /** * Fragment used to display one tab of StatActivity * S23Y (2015). Licensed under the Apache License, Version 2.0. * Author: Thibaud Ledent */ public class SlidingStatFragment extends Fragment { private static final String STATDTO_KEY = "statdto_key"; private StatDTO mStat; private PieChart mChart; public static SlidingStatFragment newInstance(StatDTO stat) { SlidingStatFragment f = new SlidingStatFragment(); Bundle b = new Bundle(); b.putSerializable(STATDTO_KEY, stat); f.setArguments(b); return f; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_sliding_stat,container,false); mStat = (StatDTO) getArguments().getSerializable( STATDTO_KEY); ViewCompat.setElevation(rootView, 50); // If no values found for this period, just display info for the user if (mStat == null || mStat.getConsumption() == 0) { LinearLayout layout = (LinearLayout) rootView.findViewById(R.id.stat_container); layout.setVisibility(View.GONE); TextView textView = (TextView) rootView.findViewById(R.id.txtViewNoValues); textView.setVisibility(View.VISIBLE); return rootView; } DecimalFormat df = new DecimalFormat("0.00"); TextView textView = (TextView) rootView.findViewById(R.id.txtVwConsumption); textView.setText(String.valueOf(StatUtils.wh2kWh(mStat.getConsumption()))); textView = (TextView) rootView.findViewById(R.id.txtVwAverageWatts); textView.setText(String.valueOf(mStat.getAverage())); textView = (TextView) rootView.findViewById(R.id.txtVwMaximum); textView.setText(String.valueOf(mStat.getMaxValue())); textView = (TextView) rootView.findViewById(R.id.txtVwMaximumTimestamp); textView.setText(StatUtils.timestamp2DateString(mStat.getMaxTimestamp())); textView = (TextView) rootView.findViewById(R.id.txtVwMinimum); textView.setText(String.valueOf(mStat.getMinValue())); textView = (TextView) rootView.findViewById(R.id.txtVwMinimumTimestamp); textView.setText(StatUtils.timestamp2DateString(mStat.getMinTimestamp())); textView = (TextView) rootView.findViewById(R.id.txtVwCO2); double co2 = (StatUtils.wh2kWh(mStat.getConsumption()) * SingleInstance.getkWhToCO2()); textView.setText(df.format(co2)); textView = (TextView) rootView.findViewById(R.id.txtVwEuroHigh); double dayEuro = (StatUtils.wh2kWh(mStat.getConsumptionDay()) * SingleInstance.getkWhDayPrice()); textView.setText(df.format(dayEuro)); textView = (TextView) rootView.findViewById(R.id.txtVwEuroOff); double nightEuro = (StatUtils.wh2kWh(mStat.getConsumptionNight()) * SingleInstance.getkWhNightPrice()); textView.setText(df.format(nightEuro)); textView = (TextView) rootView.findViewById(R.id.txtVwEuro); double totEuro = dayEuro + nightEuro; textView.setText(df.format(totEuro)); // Adding arrow ImageView imgView = (ImageView) rootView.findViewById(R.id.imageView); int diff = mStat.getDiffLastTwo(); String text = ""; if (diff > 0) { imgView.setImageResource(R.drawable.ic_arrow_up); text = "+"; } else if (diff < 0) imgView.setImageResource(R.drawable.ic_arrow_down); else imgView.setImageResource(R.drawable.ic_arrow_stable); textView = (TextView) rootView.findViewById(R.id.txtVwComparison); textView.setText(text + " " + StatUtils.wh2kWh(diff)); // Piechart mChart = (PieChart) rootView.findViewById(R.id.pieChart1); mChart.setDescription(""); // radius of the center hole in percent of maximum radius mChart.setHoleRadius(45f); mChart.setTransparentCircleRadius(50f); Legend l = mChart.getLegend(); l.setPosition(Legend.LegendPosition.BELOW_CHART_CENTER); mChart.setData(generatePieData()); return rootView; } protected PieData generatePieData() { ArrayList<Entry> entries1 = new ArrayList<Entry>(); ArrayList<String> xVals = new ArrayList<String>(); xVals.add("PEAK TIME: " + StatUtils.wh2kWh(mStat.getConsumptionDay()) + " " + getString(R.string.textview_stat_kWh)); xVals.add("OFF-PEAK TIME: " + StatUtils.wh2kWh(mStat.getConsumptionNight()) + " " + getString(R.string.textview_stat_kWh)); entries1.add(new Entry((float) StatUtils.wh2kWh(mStat.getConsumptionDay()), 0)); entries1.add(new Entry((float) StatUtils.wh2kWh(mStat.getConsumptionNight()), 1)); PieDataSet ds1 = new PieDataSet(entries1, ""); ds1.setColors(ColorTemplate.VORDIPLOM_COLORS); ds1.setSliceSpace(2f); ds1.setValueTextColor(Color.BLACK); ds1.setValueTextSize(12f); PieData d = new PieData(xVals, ds1); d.setValueTypeface(Typeface.DEFAULT); return d; } }