package com.github.andlyticsproject;
import java.math.BigDecimal;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Currency;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import android.annotation.SuppressLint;
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.AdmobStats;
@SuppressLint("SimpleDateFormat")
public class AdmobListAdapter extends ChartListAdapter<AdmobStats> {
private static final int COL_DATE = 0;
private static final int COL_REVENUE = 1;
private static final int COL_EPC = 2;
private static final int COL_REQUESTS = 3;
private static final int COL_CLICKS = 4;
private static final int COL_FILL_RATE = 5;
private static final int COL_ECPM = 1;
private static final int COL_IMPRESSIONS = 2;
private static final int COL_CTR = 3;
private static final int COL_HOUSEAD_CLICKS = 4;
public AdmobListAdapter(Activity activity) {
super(activity);
this.stats = new ArrayList<AdmobStats>();
}
@Override
public AdmobStats getItem(int position) {
return stats.get(position);
}
@Override
public void notifyDataSetChanged() {
this.dateFormat = new SimpleDateFormat(Preferences.getDateFormatStringShort(activity));
super.notifyDataSetChanged();
}
@Override
public int getNumPages() {
return 2;
}
@Override
public int getNumCharts(int page) throws IndexOutOfBoundsException {
switch (page) {
case 0:
return 6;
case 1:
return 5;
default:
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_REVENUE:
return activity.getString(R.string.admob__revenue);
case COL_EPC:
return activity.getString(R.string.admob__epc);
case COL_REQUESTS:
return activity.getString(R.string.admob__requests);
case COL_CLICKS:
return activity.getString(R.string.admob__clicks);
case COL_FILL_RATE:
return activity.getString(R.string.admob__fill_rate);
}
}
case 1: {
switch (column) {
case COL_ECPM:
return activity.getString(R.string.admob__eCPM);
case COL_IMPRESSIONS:
return activity.getString(R.string.admob__impressions);
case COL_CTR:
return activity.getString(R.string.admob__CTR);
case COL_HOUSEAD_CLICKS:
return activity.getString(R.string.admob__house_ad_clicks);
}
}
}
throw new IndexOutOfBoundsException("page=" + page + " column=" + column);
}
@Override
public void updateChartValue(int position, int page, int column, TextView tv)
throws IndexOutOfBoundsException {
AdmobStats admob = getItem(position);
if (column == COL_DATE) {
tv.setText(dateFormat.format(admob.getDate()));
return;
}
switch (page) {
case 0: {
switch (column) {
case COL_REVENUE:
tv.setText(getNumberFormat(admob.getCurrencyCode()).format(admob.getRevenue()));
return;
case COL_EPC:
// tv.setText(admob.getEpcCents());
// tv.setText(getNumberFormat(admob.getCurrencyCode()).format(admob.getEpc()));
tv.setText(getNumberFormat(admob.getCurrencyCode()).format(
admob.getCpcRevenue()));
return;
case COL_REQUESTS:
tv.setText(admob.getRequests() + "");
return;
case COL_CLICKS:
tv.setText(admob.getClicks() + "");
return;
case COL_FILL_RATE:
BigDecimal fillrate = new BigDecimal(admob.getFillRate() * 100);
fillrate = fillrate.setScale(2, BigDecimal.ROUND_HALF_EVEN);
tv.setText(fillrate.toPlainString() + "%");
return;
}
}
case 1: {
switch (column) {
case COL_ECPM:
tv.setText(getNumberFormat(admob.getCurrencyCode()).format(admob.getEcpm()));
return;
case COL_IMPRESSIONS:
tv.setText(admob.getImpressions() + "");
return;
case COL_CTR:
BigDecimal ctr = new BigDecimal(admob.getCtr() * 100);
ctr = ctr.setScale(2, BigDecimal.ROUND_HALF_EVEN);
tv.setText(ctr.toPlainString() + "%");
return;
case COL_HOUSEAD_CLICKS:
tv.setText(admob.getHouseAdClicks() + "");
return;
}
}
}
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_REVENUE:
handler = new AdmobValueCallbackHander() {
@Override
public double getValue(Object appInfo) {
return ((AdmobStats) appInfo).getRevenue();
}
};
return baseChart.buildLineChart(context, statsForApp.toArray(), handler);
case COL_EPC:
handler = new AdmobValueCallbackHander() {
@Override
public double getValue(Object appInfo) {
return ((AdmobStats) appInfo).getEpc();
}
};
return baseChart.buildLineChart(context, statsForApp.toArray(), handler);
case COL_REQUESTS:
handler = new AdmobValueCallbackHander() {
@Override
public double getValue(Object appInfo) {
return ((AdmobStats) appInfo).getRequests();
}
};
return baseChart.buildLineChart(context, statsForApp.toArray(), handler);
case COL_CLICKS:
handler = new AdmobValueCallbackHander() {
@Override
public double getValue(Object appInfo) {
return ((AdmobStats) appInfo).getClicks();
}
};
return baseChart.buildLineChart(context, statsForApp.toArray(), handler);
case COL_FILL_RATE:
handler = new AdmobValueCallbackHander() {
@Override
public double getValue(Object appInfo) {
return ((AdmobStats) appInfo).getFillRate();
}
};
return baseChart.buildLineChart(context, statsForApp.toArray(), handler);
}
}
case 1: {
switch (column) {
case COL_ECPM:
handler = new AdmobValueCallbackHander() {
@Override
public double getValue(Object appInfo) {
return ((AdmobStats) appInfo).getEcpm();
}
};
return baseChart.buildLineChart(context, statsForApp.toArray(), handler);
case COL_IMPRESSIONS:
handler = new AdmobValueCallbackHander() {
@Override
public double getValue(Object appInfo) {
return ((AdmobStats) appInfo).getImpressions();
}
};
return baseChart.buildLineChart(context, statsForApp.toArray(), handler);
case COL_CTR:
handler = new AdmobValueCallbackHander() {
@Override
public double getValue(Object appInfo) {
return ((AdmobStats) appInfo).getCtr();
}
};
return baseChart.buildLineChart(context, statsForApp.toArray(), handler);
case COL_HOUSEAD_CLICKS:
handler = new AdmobValueCallbackHander() {
@Override
public double getValue(Object appInfo) {
return ((AdmobStats) appInfo).getHouseAdClicks();
}
};
return baseChart.buildLineChart(context, statsForApp.toArray(), handler);
}
}
}
throw new IndexOutOfBoundsException("page=" + page + " column=" + column);
}
public abstract class AdmobValueCallbackHander implements ValueCallbackHander {
@Override
public Date getDate(Object appInfo) {
return ((AdmobStats) appInfo).getDate();
}
@Override
public boolean isHeilightValue(Object current, Object previouse) {
return false;
}
}
@Override
public String getSubHeadLine(int page, int column) throws IndexOutOfBoundsException {
if (column == COL_DATE) {
return "";
}
String currencyCode = stats.isEmpty() ? "USD" : stats.get(0).getCurrencyCode();
switch (page) {
case 0: {
switch (column) {
case COL_REVENUE:
return (overallStats != null) ? getNumberFormat(currencyCode).format(
overallStats.getRevenue()) : "";
case COL_EPC:
return (overallStats != null) ? getNumberFormat(currencyCode).format(
overallStats.getEpc()) : "";
case COL_REQUESTS:
return (overallStats != null) ? overallStats.getRequests() + "" : "";
case COL_CLICKS:
return (overallStats != null) ? overallStats.getClicks() + "" : "";
case COL_FILL_RATE:
return (overallStats != null) ? (new BigDecimal(overallStats.getFillRate() * 100))
.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "%" : "";
}
}
break;
case 1: {
switch (column) {
case COL_ECPM:
return (overallStats != null) ? getNumberFormat(currencyCode).format(
overallStats.getEcpm()) : "";
case COL_IMPRESSIONS:
return (overallStats != null) ? overallStats.getImpressions() + "" : "";
case COL_CTR:
return (overallStats != null) ? (new BigDecimal(overallStats.getCtr() * 100))
.setScale(2, BigDecimal.ROUND_HALF_UP).toPlainString() + "%" : "";
case COL_HOUSEAD_CLICKS:
return (overallStats != null) ? overallStats.getHouseAdClicks() + "" : "";
}
}
break;
}
throw new IndexOutOfBoundsException("page=" + page + " column=" + column);
}
@Override
protected boolean isSmothValue(int page, int position) {
return false;
}
@Override
protected boolean useSmothColumn(int page) {
return false;
}
private NumberFormat US_NUMBER_FORMAT = NumberFormat.getCurrencyInstance(Locale.US);
private Map<String, NumberFormat> currencyFormats = new HashMap<String, NumberFormat>();
private NumberFormat getNumberFormat(String currencyCode) {
if (currencyCode == null) {
return US_NUMBER_FORMAT;
}
NumberFormat numberFormat = currencyFormats.get(currencyCode);
if (numberFormat == null) {
numberFormat = NumberFormat.getCurrencyInstance();
numberFormat.setCurrency(Currency.getInstance(currencyCode));
currencyFormats.put(currencyCode, numberFormat);
}
return numberFormat;
}
}