package com.boardgamegeek.sorter;
import android.content.Context;
import android.database.Cursor;
import android.support.annotation.NonNull;
import android.text.TextUtils;
import com.boardgamegeek.util.CursorUtils;
import com.boardgamegeek.util.PresentationUtils;
public abstract class MoneySorter extends CollectionSorter {
public static final String MISSING_DATA = "-";
public MoneySorter(Context context) {
super(context);
}
@Override
protected String getSortColumn() {
return getCurrencyColumnName() + " DESC, " + getAmountColumnName();
}
@Override
protected boolean isSortDescending() {
return true;
}
@NonNull
protected abstract String getAmountColumnName();
@NonNull
protected abstract String getCurrencyColumnName();
@Override
public String[] getColumns() {
return new String[] { getCurrencyColumnName(), getAmountColumnName() };
}
@NonNull
@Override
public String getDisplayInfo(@NonNull Cursor cursor) {
double amount = CursorUtils.getDouble(cursor, getAmountColumnName());
String currency = getString(cursor, getCurrencyColumnName());
String info = PresentationUtils.describeMoney(currency, amount);
return getInfoOrMissingInfo(info);
}
@Override
public String getHeaderText(@NonNull Cursor cursor) {
double amount = round(CursorUtils.getDouble(cursor, getAmountColumnName()));
String currency = getString(cursor, getCurrencyColumnName());
String info = PresentationUtils.describeMoneyWithoutDecimals(currency, amount);
return getInfoOrMissingInfo(info);
}
@NonNull
private String getInfoOrMissingInfo(String info) {
if (TextUtils.isEmpty(info)) {
return MISSING_DATA;
}
return info;
}
private double round(double value) {
return ((int) (Math.ceil(value + 9) / 10)) * 10;
}
}