package com.github.andlyticsproject; import java.util.List; import android.app.Activity; import android.content.Context; import android.view.View; import android.widget.TextView; import com.github.andlyticsproject.chart.Chart; import com.github.andlyticsproject.chart.Chart.ValueCallbackHander; import com.github.andlyticsproject.model.AppStats; public class DownloadsChartListAdapter extends ChartListAdapter<AppStats> { private static final int COL_DATE = 0; private static final int COL_TOTAL_DOWNLAODS = 1; private static final int COL_ACTIVE_INSTALLS_TOTAL = 2; private static final int COL_TOTAL_DOWNLAODS_BY_DAY = 3; private static final int COL_ACTIVE_INSTALLS_PERCENT = 4; public DownloadsChartListAdapter(Activity activity) { super(activity); } @Override public int getNumPages() { return 1; } @Override public int getNumCharts(int page) throws IndexOutOfBoundsException { if (page == 0) { return 5; } throw new IndexOutOfBoundsException("page=" + page); } @Override public String getChartTitle(int page, int column) throws IndexOutOfBoundsException { if (column == COL_DATE) { return ""; } switch (page) { case 0: { switch (column) { case COL_TOTAL_DOWNLAODS: return activity.getString(R.string.total_downloads); case COL_TOTAL_DOWNLAODS_BY_DAY: return activity.getString(R.string.downloads_day); case COL_ACTIVE_INSTALLS_PERCENT: return activity.getString(R.string.active_installs_percent); case COL_ACTIVE_INSTALLS_TOTAL: return activity.getString(R.string.active_installs); } } break; } throw new IndexOutOfBoundsException("page=" + page + " column=" + column); } @Override public void updateChartValue(int position, int page, int column, TextView tv) throws IndexOutOfBoundsException { AppStats appInfo = getItem(position); if (column == COL_DATE) { tv.setText(dateFormat.format(appInfo.getDate())); return; } int textColor = BLACK_TEXT; switch (page) { case 0: { switch (column) { case COL_TOTAL_DOWNLAODS: tv.setText(Integer.toString(appInfo.getTotalDownloads())); tv.setTextColor(textColor); return; case COL_ACTIVE_INSTALLS_TOTAL: tv.setText(Integer.toString(appInfo.getActiveInstalls())); tv.setTextColor(textColor); return; case COL_TOTAL_DOWNLAODS_BY_DAY: tv.setText(Integer.toString(appInfo.getDailyDownloads())); tv.setTextColor(textColor); return; case COL_ACTIVE_INSTALLS_PERCENT: tv.setText(appInfo.getActiveInstallsPercentString()); tv.setTextColor(textColor); return; } } break; } throw new IndexOutOfBoundsException("page=" + page + " column=" + column); } @Override public View buildChart(Context context, Chart baseChart, List<?> statsForApp, int page, int column) throws IndexOutOfBoundsException { ValueCallbackHander handler = null; switch (page) { case 0: { switch (column) { case COL_TOTAL_DOWNLAODS: handler = new DevConValueCallbackHander() { @Override public double getValue(Object appInfo) { return ((AppStats) appInfo).getTotalDownloads(); } }; return baseChart.buildLineChart(context, statsForApp.toArray(), handler); case COL_TOTAL_DOWNLAODS_BY_DAY: handler = new DevConValueCallbackHander() { @Override public double getValue(Object appInfo) { return ((AppStats) appInfo).getDailyDownloads(); } }; return baseChart.buildBarChart(context, statsForApp.toArray(), handler, Integer.MIN_VALUE, 0); case COL_ACTIVE_INSTALLS_TOTAL: handler = new DevConValueCallbackHander() { @Override public double getValue(Object appInfo) { return ((AppStats) appInfo).getActiveInstalls(); } }; return baseChart.buildLineChart(context, statsForApp.toArray(), handler); case COL_ACTIVE_INSTALLS_PERCENT: handler = new DevConValueCallbackHander() { @Override public double getValue(Object appInfo) { return ((AppStats) appInfo).getActiveInstallsPercent(); } }; return baseChart.buildLineChart(context, statsForApp.toArray(), handler); } } break; } throw new IndexOutOfBoundsException("page=" + page + " column=" + column); } @Override public String getSubHeadLine(int page, int column) throws IndexOutOfBoundsException { if (column == COL_DATE) { return ""; } switch (page) { case 0: { switch (column) { case COL_TOTAL_DOWNLAODS: return Integer.toString(overallStats.getTotalDownloads()); case COL_TOTAL_DOWNLAODS_BY_DAY: return Integer.toString(overallStats.getDailyDownloads()); case COL_ACTIVE_INSTALLS_PERCENT: return overallStats.getActiveInstallsPercentString() + "%"; case COL_ACTIVE_INSTALLS_TOTAL: Preferences.saveShowChartHint(activity, false); return Integer.toString(overallStats.getActiveInstalls()); } } break; } throw new IndexOutOfBoundsException("page=" + page + " column=" + column); } @Override public AppStats getItem(int position) { return getStats().get(position); } @Override protected boolean isSmothValue(int page, int position) { return page == 0 ? getItem(position).isSmoothingApplied() : false; } }