package neongarage.slakr.Course;
/**
* Created by Aaron on 4/10/2015.
*/
import org.achartengine.ChartFactory;
import org.achartengine.GraphicalView;
import org.achartengine.chart.BarChart;
import org.achartengine.model.CategorySeries;
import org.achartengine.model.XYMultipleSeriesDataset;
import org.achartengine.model.XYSeries;
import org.achartengine.renderer.DefaultRenderer;
import org.achartengine.renderer.SimpleSeriesRenderer;
import org.achartengine.renderer.XYMultipleSeriesRenderer;
import org.achartengine.renderer.XYSeriesRenderer;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.PorterDuff;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.SeekBar;
import android.widget.TextView;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
import neongarage.slakr.Assignment.Assignment;
import neongarage.slakr.Assignment.AssignmentListActivity;
import neongarage.slakr.MySQLiteHelper;
import neongarage.slakr.R;
public class CourseSummaryActivity extends ActionBarActivity {
private MySQLiteHelper db;
private Course mCourse;
private List<Assignment> mAssignments;
private GraphicalView mChartView;
Button pie;
Button bar;
Button line ;
Button course_list;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_course_summary);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
db = new MySQLiteHelper(this);
mCourse = getIntent().getParcelableExtra("course");
mAssignments = db.getAssignmentsForCourse(mCourse);
pie = (Button) findViewById(R.id.pie_chart);
bar = (Button) findViewById(R.id.bar_chart);
line = (Button) findViewById(R.id.line_graph);
course_list = (Button) findViewById(R.id.course_list);
pie.getBackground().setColorFilter(0xFF37474f, PorterDuff.Mode.MULTIPLY);
pie.setTextColor(Color.WHITE);
bar.getBackground().setColorFilter(0xFF37474f, PorterDuff.Mode.MULTIPLY);
bar.setTextColor(Color.WHITE);
line.getBackground().setColorFilter(0xFF37474f, PorterDuff.Mode.MULTIPLY);
line.setTextColor(Color.WHITE);
course_list.getBackground().setColorFilter(0xFF37474f, PorterDuff.Mode.MULTIPLY);
course_list.setTextColor(Color.WHITE);
SeekBar gradeSeekBar = (SeekBar) findViewById(R.id.desired_grade_seekbar);
final TextView desiredGrade = (TextView) findViewById(R.id.desired_grade);
gradeSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
int progress = 0;
@Override
public void onProgressChanged(SeekBar seekBar, int progresValue, boolean fromUser) {
progress = progresValue;
}@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
desiredGrade.setText("Desired Grade: " +progress +'%');
}
});
setCurrentGrade();
}
public void setCurrentGrade() {
float weight;
double total_weight = 0;
float grade;
double total_grade = 0;
double final_grade = 0;
for (int i = 0; i < mAssignments.size(); i++) {
total_weight += mAssignments.get(i).getWeight() *.01;
}
for (int i = 0; i < mAssignments.size(); i++) {
grade = mAssignments.get(i).getGrade();
weight = mAssignments.get(i).getWeight();
final_grade += (grade * .01) * (weight *.01) / total_weight;
}
DecimalFormat twoDForm = new DecimalFormat("#.##");
final_grade = final_grade * 100;
TextView current_grade = (TextView) findViewById(R.id.current_grade);
current_grade.setText("Current grade: " + Float.valueOf(twoDForm.format(final_grade)));
}
public void course_list_activity(View view) {
Intent intent = new Intent(this, AssignmentListActivity.class);
Course course = getIntent().getParcelableExtra("course");
intent.putExtra("course", course);
startActivity(intent);
}
public void addBarChart(View view) {
pie.getBackground().setColorFilter(0xFF37474f, PorterDuff.Mode.MULTIPLY);
bar.getBackground().setColorFilter(0xFFff3d00, PorterDuff.Mode.MULTIPLY);
line.getBackground().setColorFilter(0xFF37474f, PorterDuff.Mode.MULTIPLY);
List<String> names = new ArrayList<String>();
// Creating an XYSeries for Income
XYSeries earnedSeries = new XYSeries("Earned");
XYSeries totalSeries = new XYSeries("Total");
// Adding data to Income and Expense Series
float maxWeight = 0;
for (int i = 0; i < mAssignments.size(); i++) {
earnedSeries.add(i, (mAssignments.get(i).getGrade() * mAssignments.get(i).getWeight() * .01));
totalSeries.add(i, mAssignments.get(i).getWeight());
if(mAssignments.get(i).getWeight() > maxWeight){
maxWeight = mAssignments.get(i).getWeight();
}
}
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
dataset.addSeries(earnedSeries);
dataset.addSeries(totalSeries);
// Creating XYSeriesRenderer to customize incomeSeries
XYSeriesRenderer earnedRenderer = new XYSeriesRenderer();
earnedRenderer.setColor(Color.rgb(228,26,28));
earnedRenderer.setFillPoints(true);
earnedRenderer.setLineWidth(2);
earnedRenderer.setDisplayChartValues(true);
// Creating a XYMultipleSeriesRenderer to customize the whole chart
XYMultipleSeriesRenderer multiRenderer = new XYMultipleSeriesRenderer();
multiRenderer.setXLabels(0);
for(int i = 0; i<mAssignments.size(); i++){
multiRenderer.addXTextLabel(i, mAssignments.get(i).getName());
}
// Creating XYSeriesRenderer to customize expenseSeries
XYSeriesRenderer totalRenderer = new XYSeriesRenderer();
totalRenderer.setColor(Color.rgb(55,126,184));
totalRenderer.setFillPoints(true);
totalRenderer.setLineWidth(2);
totalRenderer.setDisplayChartValues(true);
// Adding incomeRenderer and expenseRenderer to multipleRenderer
// Note: The order of adding dataseries to dataset and renderers to multipleRenderer
// should be same
multiRenderer.addSeriesRenderer(earnedRenderer);
multiRenderer.addSeriesRenderer(totalRenderer);
multiRenderer.setBarSpacing(.2);
multiRenderer.setMarginsColor(Color.WHITE);
multiRenderer.setYAxisMin(0);
multiRenderer.setYAxisMax(maxWeight);
multiRenderer.setXAxisMin(-1);
multiRenderer.setLabelsTextSize(20);
// Creating an intent to plot bar chart using dataset and multipleRenderer
LinearLayout layout = (LinearLayout) findViewById(R.id.chart_layout);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT);
if(mChartView != null){
layout.removeView(mChartView);
}
mChartView = ChartFactory.getBarChartView(this, dataset, multiRenderer, BarChart.Type.DEFAULT);
mChartView.setLayoutParams(params);
layout.addView(mChartView);
}
public void addLineChart(View view) {
pie.getBackground().setColorFilter(0xFF37474f, PorterDuff.Mode.MULTIPLY);
bar.getBackground().setColorFilter(0xFF37474f, PorterDuff.Mode.MULTIPLY);
line.getBackground().setColorFilter(0xFFff3d00, PorterDuff.Mode.MULTIPLY);
List<String> names = new ArrayList<String>();
// Creating an XYSeries for Income
XYSeries earnedSeries = new XYSeries("Earned");
XYSeries passingLine = new XYSeries("70 %");
// Adding data to Income and Expense Series
for (int i = 0; i < mAssignments.size(); i++) {
earnedSeries.add(i, (mAssignments.get(i).getGrade()));
passingLine.add(i, 70);
}
XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
dataset.addSeries(earnedSeries);
dataset.addSeries(passingLine);
// Creating XYSeriesRenderer to customize incomeSeries
XYSeriesRenderer incomeRenderer = new XYSeriesRenderer();
incomeRenderer.setColor(Color.rgb(55,126,184));
incomeRenderer.setFillPoints(true);
incomeRenderer.setLineWidth(5);
incomeRenderer.setDisplayChartValues(true);
// Creating XYSeriesRenderer to customize expenseSeries
XYSeriesRenderer passingRenderer = new XYSeriesRenderer();
passingRenderer.setColor(Color.rgb(228,26,28));
passingRenderer.setFillPoints(true);
passingRenderer.setLineWidth(5);
passingRenderer.setDisplayChartValues(true);
// Creating a XYMultipleSeriesRenderer to customize the whole chart
XYMultipleSeriesRenderer multiRenderer = new XYMultipleSeriesRenderer();
multiRenderer.setXLabels(0);
for(int i = 0; i<mAssignments.size(); i++){
multiRenderer.addXTextLabel(i, mAssignments.get(i).getName());
}
// Adding incomeRenderer and expenseRenderer to multipleRenderer
// Note: The order of adding dataseries to dataset and renderers to multipleRenderer
// should be same
multiRenderer.addSeriesRenderer(incomeRenderer);
multiRenderer.addSeriesRenderer(passingRenderer);
multiRenderer.setBarSpacing(.2);
multiRenderer.setMarginsColor(Color.WHITE);
multiRenderer.setLegendTextSize(20);
multiRenderer.setYAxisMin(0);
multiRenderer.setYAxisMax(100);
// Creating an intent to plot bar chart using dataset and multipleRenderer
LinearLayout layout = (LinearLayout) findViewById(R.id.chart_layout);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT);
if(mChartView != null){
layout.removeView(mChartView);
}
mChartView = ChartFactory.getLineChartView(this, dataset, multiRenderer);
mChartView.setLayoutParams(params);
layout.addView(mChartView);
}
public void addPieChart(View view){
pie.getBackground().setColorFilter(0xFFff3d00, PorterDuff.Mode.MULTIPLY);
bar.getBackground().setColorFilter(0xFF37474f, PorterDuff.Mode.MULTIPLY);
line.getBackground().setColorFilter(0xFF37474f, PorterDuff.Mode.MULTIPLY);
// Instantiating a renderer for the Pie Chart
DefaultRenderer defaultRenderer = new DefaultRenderer();
// Pie Chart Section Value
List<Double> distribution = new ArrayList<Double>();
double weighted_grade;
double points_missed = 0;
double total_weight = 0;
for(int i=0; i < mAssignments.size(); i++){
weighted_grade = mAssignments.get(i).getWeight() * mAssignments.get(i).getGrade() *.01;
total_weight += mAssignments.get(i).getWeight();
points_missed += mAssignments.get(i).getWeight() - weighted_grade;
distribution.add(weighted_grade);
}
distribution.add(points_missed);
int[] colors = { Color.rgb(228,26,28), Color.rgb(55,126,184), Color.rgb(77,175,74), Color.rgb(152,78,163), Color.rgb(255,127,0),
Color.rgb(255,255,51), Color.rgb( 166,86,40) };
for(int i = 0 ;i<distribution.size()-1;i++){
SimpleSeriesRenderer seriesRenderer = new SimpleSeriesRenderer();
seriesRenderer.setColor(colors[i%7]);
// Adding a renderer for a slice
defaultRenderer.addSeriesRenderer(seriesRenderer);
}
SimpleSeriesRenderer seriesRenderer = new SimpleSeriesRenderer();
seriesRenderer.setColor(Color.GRAY);
// Adding a renderer for a slice
defaultRenderer.addSeriesRenderer(seriesRenderer);
// Pie Chart Section Names
List<String> code = new ArrayList<>();
double total_grade_earned = 0;
for(int i = 0 ;i<mAssignments.size();i++){
double temp = mAssignments.get(i).getWeight() * mAssignments.get(i).getGrade() *.01;
code.add(mAssignments.get(i).getType() + ' ' + temp + '/' + mAssignments.get(i).getWeight());
// code.add(mAssignments.get(i).getName() + ' ' + mAssignments.get(i).getWeight());
}
DecimalFormat twoDForm = new DecimalFormat("#.##");
code.add("Points missed: " + Double.valueOf(twoDForm.format(points_missed)) + '/' + total_weight );
CategorySeries distributionSeries = new CategorySeries("Course Distribution");
for(int i=0 ;i < mAssignments.size()+1;i++){
// Adding a slice with its values and name to the Pie Chart
distributionSeries.add(code.get(i), distribution.get(i));
}
defaultRenderer.setLabelsTextSize(18);
defaultRenderer.setShowAxes(true);
defaultRenderer.setFitLegend(true);
defaultRenderer.setShowLegend(true);
defaultRenderer.setLegendTextSize(18);
defaultRenderer.setLabelsColor(Color.BLACK);
defaultRenderer.setZoomButtonsVisible(false);
defaultRenderer.setPanEnabled(false);
LinearLayout layout = (LinearLayout) findViewById(R.id.chart_layout);
if(mChartView != null) {
layout.removeView(mChartView);
}
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT,LinearLayout.LayoutParams.WRAP_CONTENT);
mChartView = ChartFactory.getPieChartView(this, distributionSeries, defaultRenderer);
mChartView.setLayoutParams(params);
layout.addView(mChartView);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
}