package lecho.lib.hellocharts.samples;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.app.ActionBarActivity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.FrameLayout;
import android.widget.ListView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
import lecho.lib.hellocharts.view.AbstractChartView;
import lecho.lib.hellocharts.view.BubbleChartView;
import lecho.lib.hellocharts.view.ColumnChartView;
import lecho.lib.hellocharts.view.LineChartView;
import lecho.lib.hellocharts.view.PieChartView;
import lecho.lib.hellocharts.view.PreviewColumnChartView;
import lecho.lib.hellocharts.view.PreviewLineChartView;
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction().add(R.id.container, new PlaceholderFragment()).commit();
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_about) {
Intent intent = new Intent(this, AboutActivity.class);
startActivity(intent);
return true;
}
return super.onOptionsItemSelected(item);
}
public enum ChartType {
LINE_CHART, COLUMN_CHART, PIE_CHART, BUBBLE_CHART, PREVIEW_LINE_CHART, PREVIEW_COLUMN_CHART, OTHER
}
/**
* A placeholder fragment containing a simple view.
*/
public static class PlaceholderFragment extends Fragment implements OnItemClickListener {
private ListView listView;
private ChartSamplesAdapter adapter;
public PlaceholderFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
listView = (ListView) rootView.findViewById(android.R.id.list);
adapter = new ChartSamplesAdapter(getActivity(), 0, generateSamplesDescriptions());
listView.setAdapter(adapter);
listView.setOnItemClickListener(this);
return rootView;
}
@Override
public void onItemClick(AdapterView<?> adapter, View view, int position, long id) {
Intent intent;
switch (position) {
case 0:
// Line Chart;
intent = new Intent(getActivity(), LineChartActivity.class);
startActivity(intent);
break;
case 1:
// Column Chart;
intent = new Intent(getActivity(), ColumnChartActivity.class);
startActivity(intent);
break;
case 2:
// Pie Chart;
intent = new Intent(getActivity(), PieChartActivity.class);
startActivity(intent);
break;
case 3:
// Bubble Chart;
intent = new Intent(getActivity(), BubbleChartActivity.class);
startActivity(intent);
break;
case 4:
// Preview Line Chart;
intent = new Intent(getActivity(), PreviewLineChartActivity.class);
startActivity(intent);
break;
case 5:
// Preview Column Chart;
intent = new Intent(getActivity(), PreviewColumnChartActivity.class);
startActivity(intent);
break;
case 6:
// Combo Chart;
intent = new Intent(getActivity(), ComboLineColumnChartActivity.class);
startActivity(intent);
break;
case 7:
// Line Column Dependency;
intent = new Intent(getActivity(), LineColumnDependencyActivity.class);
startActivity(intent);
break;
case 8:
// Tempo line chart;
intent = new Intent(getActivity(), TempoChartActivity.class);
startActivity(intent);
break;
case 9:
// Speed line chart;
intent = new Intent(getActivity(), SpeedChartActivity.class);
startActivity(intent);
break;
case 10:
// Good Bad filled line chart;
intent = new Intent(getActivity(), GoodBadChartActivity.class);
startActivity(intent);
break;
case 11:
// Good Bad filled line chart;
intent = new Intent(getActivity(), ViewPagerChartsActivity.class);
startActivity(intent);
break;
default:
break;
}
}
private List<ChartSampleDescription> generateSamplesDescriptions() {
List<ChartSampleDescription> list = new ArrayList<MainActivity.ChartSampleDescription>();
list.add(new ChartSampleDescription("Line Chart", "", ChartType.LINE_CHART));
list.add(new ChartSampleDescription("Column Chart", "", ChartType.COLUMN_CHART));
list.add(new ChartSampleDescription("Pie Chart", "", ChartType.PIE_CHART));
list.add(new ChartSampleDescription("Bubble Chart", "", ChartType.BUBBLE_CHART));
list.add(new ChartSampleDescription("Preview Line Chart",
"Control line chart viewport with another line chart.", ChartType.PREVIEW_LINE_CHART));
list.add(new ChartSampleDescription("Preview Column Chart",
"Control column chart viewport with another column chart.", ChartType.PREVIEW_COLUMN_CHART));
list.add(new ChartSampleDescription("Combo Line/Column Chart", "Combo chart with lines and columns.",
ChartType.OTHER));
list.add(new ChartSampleDescription("Line/Column Chart Dependency",
"LineChart responds(with animation) to column chart value selection.", ChartType.OTHER));
list.add(new ChartSampleDescription(
"Tempo Chart",
"Presents tempo and height values on a signle chart. Example of multiple axes and reverted Y axis" +
" with time format [mm:ss].",
ChartType.OTHER));
list.add(new ChartSampleDescription("Speed Chart",
"Presents speed and height values on a signle chart. Exapmle of multiple axes inside chart area.",
ChartType.OTHER));
list.add(new ChartSampleDescription("Good/Bad Chart",
"Example of filled area line chart with custom labels", ChartType.OTHER));
list.add(new ChartSampleDescription("ViewPager with Charts",
"Interactive charts within ViewPager. Each chart can be zoom/scroll except pie chart.",
ChartType.OTHER));
return list;
}
}
public static class ChartSamplesAdapter extends ArrayAdapter<ChartSampleDescription> {
public ChartSamplesAdapter(Context context, int resource, List<ChartSampleDescription> objects) {
super(context, resource, objects);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = View.inflate(getContext(), R.layout.list_item_sample, null);
holder = new ViewHolder();
holder.text1 = (TextView) convertView.findViewById(R.id.text1);
holder.text2 = (TextView) convertView.findViewById(R.id.text2);
holder.chartLayout = (FrameLayout) convertView.findViewById(R.id.chart_layout);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
ChartSampleDescription item = getItem(position);
holder.chartLayout.setVisibility(View.VISIBLE);
holder.chartLayout.removeAllViews();
AbstractChartView chart;
switch (item.chartType) {
case LINE_CHART:
chart = new LineChartView(getContext());
holder.chartLayout.addView(chart);
break;
case COLUMN_CHART:
chart = new ColumnChartView(getContext());
holder.chartLayout.addView(chart);
break;
case PIE_CHART:
chart = new PieChartView(getContext());
holder.chartLayout.addView(chart);
break;
case BUBBLE_CHART:
chart = new BubbleChartView(getContext());
holder.chartLayout.addView(chart);
break;
case PREVIEW_LINE_CHART:
chart = new PreviewLineChartView(getContext());
holder.chartLayout.addView(chart);
break;
case PREVIEW_COLUMN_CHART:
chart = new PreviewColumnChartView(getContext());
holder.chartLayout.addView(chart);
break;
default:
chart = null;
holder.chartLayout.setVisibility(View.GONE);
break;
}
if (null != chart) {
chart.setInteractive(false);// Disable touch handling for chart on the ListView.
}
holder.text1.setText(item.text1);
holder.text2.setText(item.text2);
return convertView;
}
private class ViewHolder {
TextView text1;
TextView text2;
FrameLayout chartLayout;
}
}
public static class ChartSampleDescription {
String text1;
String text2;
ChartType chartType;
public ChartSampleDescription(String text1, String text2, ChartType chartType) {
this.text1 = text1;
this.text2 = text2;
this.chartType = chartType;
}
}
}