org.starfishrespect.myconsumption.android.ui.SlidingStatFragment.java Source code

Java tutorial

Introduction

Here is the source code for org.starfishrespect.myconsumption.android.ui.SlidingStatFragment.java

Source

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