package com.code44.finance.data.db;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Color;
import android.text.TextUtils;
import com.code44.finance.R;
import com.code44.finance.common.model.TransactionType;
import com.code44.finance.common.utils.Preconditions;
import com.code44.finance.data.model.Category;
import com.code44.finance.data.model.Currency;
import java.util.HashSet;
import java.util.Locale;
import java.util.Set;
import java.util.UUID;
public final class DBDefaults {
private final Context context;
private final SQLiteDatabase database;
public DBDefaults(Context context, SQLiteDatabase database) {
Preconditions.notNull(context, "Context cannot be null.");
Preconditions.notNull(database, "Database cannot be null.");
this.context = context;
this.database = database;
}
public void addDefaults() {
addCurrencies();
addCategories();
}
private void addCurrencies() {
final Set<String> currencyCodes = new HashSet<>();
final String mainCurrencyCode = getMainCurrencyCode();
currencyCodes.add(mainCurrencyCode);
// Popular currencies
currencyCodes.add("USD");
currencyCodes.add("EUR");
currencyCodes.add("GBP");
currencyCodes.add("CNY");
currencyCodes.add("INR");
currencyCodes.add("RUB");
currencyCodes.add("JPY");
// Create currencies
for (String code : currencyCodes) {
java.util.Currency javaCurrency = getCurrencyFromCode(code);
if (javaCurrency != null) {
Currency currency = new Currency();
currency.setId(UUID.randomUUID().toString());
currency.setCode(code);
currency.setSymbol(javaCurrency.getSymbol());
currency.setDecimalCount(javaCurrency.getDefaultFractionDigits());
currency.setDefault(code.equals(mainCurrencyCode));
database.insert(Tables.Currencies.TABLE_NAME, null, currency.asValues());
}
}
}
private void addCategories() {
insertCategories(context.getResources().getStringArray(R.array.expense_categories), context.getResources().getStringArray(R.array.expense_categories_colors), TransactionType.Expense);
insertCategories(context.getResources().getStringArray(R.array.income_categories), context.getResources().getStringArray(R.array.income_categories_colors), TransactionType.Income);
}
private String getMainCurrencyCode() {
String code = null;
try {
code = java.util.Currency.getInstance(Locale.getDefault()).getCurrencyCode();
} catch (Exception ignored) {
}
if (TextUtils.isEmpty(code)) {
code = "USD";
}
return code;
}
private java.util.Currency getCurrencyFromCode(String code) {
try {
return java.util.Currency.getInstance(code);
} catch (Exception ignored) {
return null;
}
}
private void insertCategories(String[] titles, String[] colors, TransactionType type) {
int order = 0;
for (String title : titles) {
final Category category = new Category();
category.setId(UUID.randomUUID().toString());
category.setTransactionType(type);
category.setTitle(title);
category.setColor(Color.parseColor(colors[order % colors.length]));
category.setSortOrder(order++);
database.insert(Tables.Categories.TABLE_NAME, null, category.asValues());
}
}
}