package com.code44.finance.ui.reports.categories; import android.content.Context; import android.content.res.TypedArray; import android.util.AttributeSet; import android.view.Gravity; import android.widget.LinearLayout; import android.widget.TextView; import com.code44.finance.App; import com.code44.finance.R; import com.code44.finance.data.model.Currency; import com.code44.finance.graphs.pie.PieChartData; import com.code44.finance.graphs.pie.PieChartView; import com.code44.finance.qualifiers.Main; import com.code44.finance.ui.common.ViewBackgroundTheme; import com.code44.finance.utils.MoneyFormatter; import javax.inject.Inject; public class CategoriesReportView extends LinearLayout { private final PieChartView pieChartView; private final TextView totalExpenseTextView; @Inject @Main Currency mainCurrency; public CategoriesReportView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public CategoriesReportView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); setGravity(Gravity.CENTER_VERTICAL); final int padding = getResources().getDimensionPixelSize(R.dimen.keyline); setPadding(padding, padding, padding, padding); inflate(context, R.layout.view_categories_report, this); if (!isInEditMode()) { App.with(context).inject(this); } // Get views pieChartView = (PieChartView) findViewById(R.id.pieChartView); totalExpenseTextView = (TextView) findViewById(R.id.totalExpenseTextView); // Setup applyStyle(context, attrs); setPieChartData(null); if (isInEditMode()) { totalExpenseTextView.setText("0.00 $"); } else { setTotalExpense(0); } } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); final LayoutParams params = (LayoutParams) pieChartView.getLayoutParams(); params.height = pieChartView.getMeasuredWidth(); } public void setPieChartData(PieChartData pieChartData) { pieChartView.setPieChartData(pieChartData); } public void setTotalExpense(long totalExpense) { totalExpenseTextView.setText(MoneyFormatter.format(mainCurrency, totalExpense)); } private void applyStyle(Context context, AttributeSet attrs) { final TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.PieChartView, 0, 0); try { final ViewBackgroundTheme viewBackgroundTheme = ViewBackgroundTheme.from(a.getInteger(R.styleable.CategoriesReportView_viewBackgroundTheme, 0)); pieChartView.setViewBackgroundTheme(viewBackgroundTheme); if (getOrientation() == HORIZONTAL) { pieChartView.setSizeBasedOn(PieChartView.SizeBasedOn.Height); } else { MarginLayoutParams params = (MarginLayoutParams) pieChartView.getLayoutParams(); params.leftMargin = params.rightMargin = getResources().getDimensionPixelSize(R.dimen.space_xlarge); pieChartView.setSizeBasedOn(PieChartView.SizeBasedOn.Width); } final int textColor = getResources().getColor(viewBackgroundTheme == ViewBackgroundTheme.Light ? R.color.text_primary : R.color.text_primary_inverse); totalExpenseTextView.setTextColor(textColor); } finally { a.recycle(); } } }