package br.com.extractor.easyfinance.chart.charts; import android.app.FragmentManager; import android.content.Context; import android.graphics.Color; import android.view.View; import android.view.ViewGroup; import com.github.mikephil.charting.animation.Easing; import com.github.mikephil.charting.charts.Chart; import com.github.mikephil.charting.charts.PieChart; 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 com.github.mikephil.charting.utils.PercentFormatter; import java.util.ArrayList; import java.util.List; import br.com.extractor.easyfinance.R; import br.com.extractor.easyfinance.chart.Panel; import br.com.extractor.easyfinance.chart.PanelException; import br.com.extractor.easyfinance.model.Despesa; import br.com.extractor.easyfinance.model.Receita; import io.realm.Realm; public class PanelExpenseVsIncome implements Panel { @Override public View buildView(Context context, ViewGroup viewGroup, FragmentManager fragmentManager) { PieChart chart = new PieChart(context); chart.setUsePercentValues(true); chart.setDragDecelerationFrictionCoef(0.95f); chart.setDrawHoleEnabled(true); chart.setHoleColorTransparent(true); chart.setTransparentCircleColor(Color.WHITE); chart.setHoleRadius(58f); chart.setTransparentCircleRadius(61f); chart.setDrawCenterText(true); chart.setRotationAngle(0); chart.setRotationEnabled(true); chart.animateY(1500, Easing.EasingOption.EaseInOutQuad); return chart; } @Override public String getDescription(Context context) { return context.getString(R.string.panel_income_vs_expense); } @Override public void obtainParamsAndProcess(Context context, View view) { processParams(view); } @Override public Object[] validateParams(View view, Object... params) throws PanelException { return new Object[0]; } @Override public void processParams(View view, Object... params) { Chart chart = (Chart) view; List<Entry> yVals1 = new ArrayList<>(); ArrayList<String> xVals = new ArrayList<>(); Realm realm = Realm.getDefaultInstance(); double totalDespesa = realm.where(Despesa.class).sumDouble("valorPago"); double totalReceita = realm.where(Receita.class).sumDouble("valorPago"); if (totalDespesa + totalReceita > 0) { yVals1.add(new Entry((float) totalDespesa, 0)); yVals1.add(new Entry((float) totalReceita, 1)); xVals.add(chart.getContext().getString(R.string.expenses)); xVals.add(chart.getContext().getString(R.string.incomes)); PieDataSet dataSet = new PieDataSet(yVals1, ""); dataSet.setSliceSpace(3f); dataSet.setSelectionShift(5f); ArrayList<Integer> colors = new ArrayList<>(); for (int c : ColorTemplate.VORDIPLOM_COLORS) colors.add(c); for (int c : ColorTemplate.JOYFUL_COLORS) colors.add(c); for (int c : ColorTemplate.COLORFUL_COLORS) colors.add(c); for (int c : ColorTemplate.LIBERTY_COLORS) colors.add(c); for (int c : ColorTemplate.PASTEL_COLORS) colors.add(c); colors.add(ColorTemplate.getHoloBlue()); dataSet.setColors(colors); PieData data = new PieData(xVals, dataSet); data.setValueFormatter(new PercentFormatter()); data.setValueTextSize(14f); data.setValueTextColor(Color.BLACK); chart.setData(data); chart.highlightValues(null); chart.invalidate(); } realm.close(); } }