package systems.intelligo.memorize.statistic; import android.content.Context; import android.graphics.Color; import android.os.Bundle; import android.text.SpannableString; import android.text.style.ForegroundColorSpan; import android.text.style.RelativeSizeSpan; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ListView; 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 com.github.mikephil.charting.data.PieData; import com.github.mikephil.charting.data.PieDataSet; import com.github.mikephil.charting.data.PieEntry; import com.github.mikephil.charting.formatter.PercentFormatter; import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; import com.github.mikephil.charting.utils.ColorTemplate; import com.github.mikephil.charting.utils.MPPointF; import java.util.ArrayList; import java.util.List; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import systems.intelligo.memorize.Injection; import systems.intelligo.memorize.R; import static systems.intelligo.memorize.AppMain.getContext; public class StatisticActivity extends AppCompatActivity implements StatisticContract.View { private StatisticContract.Presenter presenter; private PieData pieData; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_statistic); new StatisticPresenter(Injection.provideWordsRepository(getContext()), this); ListView lv = findViewById(R.id.listViewChart); presenter.init(); ArrayList<ChartItem> list = new ArrayList<>(); list.add(new LineChartItem(generateDataLine(5), getApplicationContext())); list.add(new BarChartItem(generateDataBar(5), getApplicationContext())); list.add(new PieChartItem(getPieData(), getApplicationContext())); ChartDataAdapter cda = new ChartDataAdapter(getApplicationContext(), list); lv.setAdapter(cda); } @Override public void setLoadingIndicator(boolean active) { } private class ChartDataAdapter extends ArrayAdapter<ChartItem> { ChartDataAdapter(Context context, List<ChartItem> objects) { super(context, 0, objects); } @NonNull @Override public View getView(int position, View convertView, @NonNull ViewGroup parent) { //noinspection ConstantConditions return getItem(position).getView(position, convertView, getContext()); } @Override public int getItemViewType(int position) { // return the views type ChartItem ci = getItem(position); return ci != null ? ci.getItemType() : 0; } @Override public int getViewTypeCount() { return 3; // we have 3 different item-types } } @Override public void setStatData(int total, int memorized, int favorited, int active) { ArrayList<PieEntry> entries = new ArrayList<PieEntry>(); entries.add(new PieEntry((float) memorized, "Цээжилсэн үг " + memorized, getResources().getDrawable(R.drawable.ic_timeline))); entries.add(new PieEntry((float) favorited, "Цээжилж байгаа " + favorited, getResources().getDrawable(R.drawable.ic_timeline))); entries.add(new PieEntry((float) active, "Цээжлээгүй " + active, getResources().getDrawable(R.drawable.ic_timeline))); PieDataSet dataSet = new PieDataSet(entries, "Memorize results"); dataSet.setDrawIcons(false); dataSet.setSliceSpace(3f); dataSet.setIconsOffset(new MPPointF(0, 40)); dataSet.setSelectionShift(5f); // add a lot of colors ArrayList<Integer> colors = new ArrayList<Integer>(); colors.add(getResources().getColor(R.color.chartGreen)); colors.add(getResources().getColor(R.color.chartBlue)); colors.add(getResources().getColor(R.color.chartPink)); dataSet.setColors(colors); //dataSet.setSelectionShift(0f); PieData data = new PieData(dataSet); data.setValueFormatter(new PercentFormatter()); data.setValueTextSize(11f); data.setValueTextColor(Color.WHITE); SpannableString s = new SpannableString("Нийт үг :" + total); s.setSpan(new RelativeSizeSpan(1.7f), 0, s.length(), 0); s.setSpan(new ForegroundColorSpan(ColorTemplate.getHoloBlue()), 0, s.length(), 0); pieData = new PieData(dataSet); } public PieData getPieData() { return pieData; } private LineData generateDataLine(int cnt) { ArrayList<Entry> values1 = new ArrayList<>(); for (int i = 0; i < 12; i++) { values1.add(new Entry(i, (int) (Math.random() * 65) + 40)); } LineDataSet d1 = new LineDataSet(values1, "New DataSet " + cnt + ", (1)"); d1.setLineWidth(2.5f); d1.setCircleRadius(4.5f); d1.setHighLightColor(Color.rgb(244, 117, 117)); d1.setDrawValues(false); ArrayList<Entry> values2 = new ArrayList<>(); for (int i = 0; i < 12; i++) { values2.add(new Entry(i, values1.get(i).getY() - 30)); } LineDataSet d2 = new LineDataSet(values2, "New DataSet " + cnt + ", (2)"); d2.setLineWidth(2.5f); d2.setCircleRadius(4.5f); d2.setHighLightColor(Color.rgb(244, 117, 117)); d2.setColor(ColorTemplate.VORDIPLOM_COLORS[0]); d2.setCircleColor(ColorTemplate.VORDIPLOM_COLORS[0]); d2.setDrawValues(false); ArrayList<ILineDataSet> sets = new ArrayList<>(); sets.add(d1); sets.add(d2); return new LineData(sets); } private BarData generateDataBar(int cnt) { ArrayList<BarEntry> entries = new ArrayList<>(); for (int i = 0; i < 12; i++) { entries.add(new BarEntry(i, (int) (Math.random() * 70) + 30)); } BarDataSet d = new BarDataSet(entries, "New DataSet " + cnt); d.setColors(ColorTemplate.VORDIPLOM_COLORS); d.setHighLightAlpha(255); BarData cd = new BarData(d); cd.setBarWidth(0.9f); return cd; } @Override public void setPresenter(StatisticContract.Presenter presenter) { this.presenter = presenter; } @Override public void showToast(String message) { } }