package
com.example.gfgapp;
import
android.content.res.Resources;
import
android.graphics.Color;
import
android.os.Bundle;
import
android.widget.Toast;
import
androidx.appcompat.app.AppCompatActivity;
import
com.github.mikephil.charting.charts.LineChart;
import
com.github.mikephil.charting.components.Description;
import
com.github.mikephil.charting.components.XAxis;
import
com.github.mikephil.charting.components.YAxis;
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.formatter.ValueFormatter;
import
com.github.mikephil.charting.highlight.Highlight;
import
com.github.mikephil.charting.listener.OnChartValueSelectedListener;
import
com.github.mikephil.charting.utils.ColorTemplate;
import
com.opencsv.CSVReader;
import
java.io.IOException;
import
java.io.InputStream;
import
java.io.InputStreamReader;
import
java.util.ArrayList;
import
java.util.List;
public
class
MainActivity
extends
AppCompatActivity {
private
LineChart lineChart;
private
LineDataSet lineDataSet;
private
ArrayList<Entry> data;
private
List<String> years;
private
List<String> products;
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lineChart = findViewById(R.id.lineChart);
data =
new
ArrayList<>();
lineDataSet =
new
LineDataSet(data,
"Sales Info"
);
lineDataSet.setColors(ColorTemplate.MATERIAL_COLORS);
lineDataSet.setValueTextColor(Color.BLACK);
lineDataSet.setValueTextSize(16f);
LineData lineData =
new
LineData(lineDataSet);
lineChart.setData(lineData);
Description description =
new
Description();
description.setText(
"Line Chart"
);
lineChart.setDescription(description);
XAxis xAxis = lineChart.getXAxis();
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
xAxis.setGranularity(1f);
YAxis leftAxis = lineChart.getAxisLeft();
leftAxis.setGranularity(1f);
lineChart.getAxisRight().setEnabled(
false
);
years =
new
ArrayList<>();
products =
new
ArrayList<>();
readDataFromCSV();
setupChart();
lineChart.setOnChartValueSelectedListener(
new
OnChartValueSelectedListener() {
@Override
public
void
onValueSelected(Entry e, Highlight h) {
int
index = (
int
) e.getX();
if
(index >=
0
&& index < products.size()) {
String productName = products.get(index);
Toast.makeText(MainActivity.
this
, productName, Toast.LENGTH_SHORT).show();
}
}
@Override
public
void
onNothingSelected() {
}
});
}
private
void
readDataFromCSV() {
Resources res = getResources();
InputStream inputStream = res.openRawResource(R.raw.gfg);
try
{
CSVReader reader =
new
CSVReader(
new
InputStreamReader(inputStream));
String[] nextLine;
boolean
isFirstLine =
true
;
while
((nextLine = reader.readNext()) !=
null
) {
if
(isFirstLine) {
isFirstLine =
false
;
continue
;
}
if
(nextLine.length >=
3
) {
String year = nextLine[
0
].trim();
float
sales = Float.parseFloat(nextLine[
1
].replace(
","
,
""
).trim());
String product = nextLine[
2
].trim();
addEntryToChart(sales, year, product);
}
}
}
catch
(IOException e) {
e.printStackTrace();
}
}
private
void
addEntryToChart(
float
sales, String year, String product) {
data.add(
new
Entry(data.size(), sales));
years.add(year);
products.add(product);
}
private
void
setupChart() {
lineDataSet.notifyDataSetChanged();
lineChart.getData().notifyDataChanged();
lineChart.notifyDataSetChanged();
lineChart.setVisibleXRangeMaximum(
6
);
lineChart.moveViewToX(data.size() -
7
);
lineChart.getDescription().setText(
"Sales Info"
);
lineChart.getXAxis().setValueFormatter(
new
YearValueFormatter(years));
}
@Override
protected
void
onDestroy() {
super
.onDestroy();
}
public
static
class
YearValueFormatter
extends
ValueFormatter {
private
final
List<String> years;
public
YearValueFormatter(List<String> years) {
this
.years = years;
}
@Override
public
String getFormattedValue(
float
value) {
int
index = (
int
) value;
if
(index >=
0
&& index < years.size()) {
return
years.get(index);
}
return
""
;
}
}
}