Skip to content

Commit

Permalink
Improve formatting of money amounts
Browse files Browse the repository at this point in the history
Sort currencies alphabetically in settings
Fixes codinguser#40
  • Loading branch information
codinguser committed Nov 16, 2015
1 parent 9ab4e04 commit c533d27
Show file tree
Hide file tree
Showing 42 changed files with 73 additions and 6,259 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Color;
import android.preference.PreferenceManager;
import android.support.annotation.NonNull;
import android.util.Log;

import com.crashlytics.android.Crashlytics;
Expand Down Expand Up @@ -226,7 +227,7 @@ public static String getDefaultCurrencyCode(){
* @param currencyCode ISO 4217 currency code
* @see #getDefaultCurrencyCode()
*/
public static void setDefaultCurrencyCode(String currencyCode){
public static void setDefaultCurrencyCode(@NonNull String currencyCode){
PreferenceManager.getDefaultSharedPreferences(getAppContext()).edit()
.putString(getAppContext().getString(R.string.key_default_currency), currencyCode)
.apply();
Expand Down
8 changes: 4 additions & 4 deletions app/src/main/java/org/gnucash/android/model/Money.java
Original file line number Diff line number Diff line change
Expand Up @@ -279,8 +279,7 @@ public String asString(){
* @return String containing formatted Money representation
*/
public String formattedString(Locale locale){
/*
//todo: enable this code for 2.1 release. Test better too

NumberFormat currencyFormat = NumberFormat.getCurrencyInstance(locale);
Currency currency = Currency.getInstance(mCommodity.getCurrencyCode());

Expand All @@ -299,13 +298,14 @@ public String formattedString(Locale locale){
currencyFormat.setMaximumFractionDigits(mCommodity.getSmallestFractionDigits());

return currencyFormat.format(asDouble());
*/

/*
// old currency formatting code
NumberFormat formatter = NumberFormat.getInstance(locale);
formatter.setMinimumFractionDigits(mCommodity.getSmallestFractionDigits());
formatter.setMaximumFractionDigits(mCommodity.getSmallestFractionDigits());
Currency currency = Currency.getInstance(mCommodity.getCurrencyCode());
return formatter.format(asDouble()) + " " + currency.getSymbol(locale);
*/
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -328,7 +328,6 @@ public void onClick(View view) {
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);

Cursor cursor = CommoditiesDbAdapter.getInstance().fetchAllRecords();
CommoditiesCursorAdapter commoditiesAdapter = new CommoditiesCursorAdapter(
getActivity(), android.R.layout.simple_spinner_item);
commoditiesAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -491,6 +491,7 @@ public static void createDefaultAccounts(final String currencyCode, final Activi
@Override
public void onTaskComplete() {
AccountsDbAdapter.getInstance().updateAllAccounts(DatabaseSchema.AccountEntry.COLUMN_CURRENCY, currencyCode);
GnuCashApplication.setDefaultCurrencyCode(currencyCode);
}
};
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,16 +20,24 @@
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.database.Cursor;
import android.os.Bundle;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceFragment;
import android.support.v7.app.ActionBar;

import org.gnucash.android.R;
import org.gnucash.android.app.GnuCashApplication;
import org.gnucash.android.db.CommoditiesDbAdapter;
import org.gnucash.android.db.DatabaseSchema;
import org.gnucash.android.model.Commodity;
import org.gnucash.android.model.Money;
import org.gnucash.android.ui.account.AccountsActivity;

import java.util.ArrayList;
import java.util.List;

/**
* Account settings fragment inside the Settings activity
*
Expand All @@ -39,7 +47,10 @@
@TargetApi(11)
public class AccountPreferencesFragment extends PreferenceFragment {

private Activity activity;
private Activity mActivity;

List<CharSequence> mCurrencyEntries = new ArrayList<>();
List<CharSequence> mCurrencyEntryValues = new ArrayList<>();

@Override
public void onCreate(Bundle savedInstanceState) {
Expand All @@ -51,7 +62,16 @@ public void onCreate(Bundle savedInstanceState) {
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setTitle(R.string.title_account_preferences);

activity = getActivity();
mActivity = getActivity();

Cursor cursor = CommoditiesDbAdapter.getInstance().fetchAllRecords(DatabaseSchema.CommodityEntry.COLUMN_MNEMONIC + " ASC");
while(cursor.moveToNext()){
String code = cursor.getString(cursor.getColumnIndexOrThrow(DatabaseSchema.CommodityEntry.COLUMN_MNEMONIC));
String name = cursor.getString(cursor.getColumnIndexOrThrow(DatabaseSchema.CommodityEntry.COLUMN_FULLNAME));
mCurrencyEntries.add(code + " - " + name);
mCurrencyEntryValues.add(code);
}
cursor.close();
}

@Override
Expand All @@ -60,8 +80,14 @@ public void onResume() {

String defaultCurrency = GnuCashApplication.getDefaultCurrencyCode();
Preference pref = findPreference(getString(R.string.key_default_currency));
pref.setSummary(defaultCurrency);
pref.setOnPreferenceChangeListener((SettingsActivity)getActivity());
String currencyName = CommoditiesDbAdapter.getInstance().getCommodity(defaultCurrency).getFullname();
pref.setSummary(currencyName);
pref.setOnPreferenceChangeListener((SettingsActivity) getActivity());

CharSequence[] entries = new CharSequence[mCurrencyEntries.size()];
CharSequence[] entryValues = new CharSequence[mCurrencyEntryValues.size()];
((ListPreference) pref).setEntries(mCurrencyEntries.toArray(entries));
((ListPreference) pref).setEntryValues(mCurrencyEntryValues.toArray(entryValues));

Preference preference = findPreference(getString(R.string.key_import_accounts));
preference.setOnPreferenceClickListener((SettingsActivity)getActivity());
Expand All @@ -86,7 +112,7 @@ public boolean onPreferenceClick(Preference preference) {
.setPositiveButton(R.string.btn_create_accounts, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
AccountsActivity.createDefaultAccounts(Money.DEFAULT_CURRENCY_CODE, activity);
AccountsActivity.createDefaultAccounts(Money.DEFAULT_CURRENCY_CODE, mActivity);
}
})
.setNegativeButton(R.string.btn_cancel, new DialogInterface.OnClickListener() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,11 @@
import android.content.Intent;
import android.content.IntentSender;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.os.Build;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.PreferenceManager;
Expand All @@ -51,6 +53,7 @@
import org.gnucash.android.R;
import org.gnucash.android.app.GnuCashApplication;
import org.gnucash.android.db.AccountsDbAdapter;
import org.gnucash.android.db.CommoditiesDbAdapter;
import org.gnucash.android.db.DatabaseSchema;
import org.gnucash.android.db.TransactionsDbAdapter;
import org.gnucash.android.export.Exporter;
Expand Down Expand Up @@ -248,7 +251,8 @@ public boolean onOptionsItemSelected(MenuItem item) {
public boolean onPreferenceChange(Preference preference, Object newValue) {
if (preference.getKey().equals(getString(R.string.key_default_currency))){
GnuCashApplication.setDefaultCurrencyCode(newValue.toString());
preference.setSummary(newValue.toString());
String fullname = CommoditiesDbAdapter.getInstance().getCommodity(newValue.toString()).getFullname();
preference.setSummary(fullname);
} else if (preference.getKey().equals(getString(R.string.key_enable_passcode))) {
if ((Boolean) newValue) {
startActivityForResult(new Intent(this, PasscodePreferenceActivity.class),
Expand All @@ -274,6 +278,10 @@ protected boolean isValidFragment(String fragmentName) {
|| AboutPreferenceFragment.class.getName().equals(fragmentName);
}

/**
* Hide all imbalance accounts when double-entry mode is disabled
* @param useDoubleEntry flag if double entry is enabled or not
*/
public void setImbalanceAccountsHidden(boolean useDoubleEntry) {
String isHidden = useDoubleEntry ? "0" : "1";
AccountsDbAdapter accountsDbAdapter = AccountsDbAdapter.getInstance();
Expand All @@ -286,11 +294,34 @@ public void setImbalanceAccountsHidden(boolean useDoubleEntry) {
}
}

/**
* Load the commodities from the database and set the options on the list preference
* Also sets this activity as a listener for preference changes
*/
private void setDefaultCurrencyListener() {
CommoditiesDbAdapter commoditiesDbAdapter = CommoditiesDbAdapter.getInstance();
List<CharSequence> currencyEntries = new ArrayList<>((int)commoditiesDbAdapter.getRecordsCount());
List<CharSequence> currencyEntryValues = new ArrayList<>((int)commoditiesDbAdapter.getRecordsCount());
Cursor cursor = commoditiesDbAdapter.fetchAllRecords(DatabaseSchema.CommodityEntry.COLUMN_MNEMONIC + " ASC");
while(cursor.moveToNext()){
String code = cursor.getString(cursor.getColumnIndexOrThrow(DatabaseSchema.CommodityEntry.COLUMN_MNEMONIC));
String name = cursor.getString(cursor.getColumnIndexOrThrow(DatabaseSchema.CommodityEntry.COLUMN_FULLNAME));

currencyEntries.add(code + " - " + name);
currencyEntryValues.add(code);
}
cursor.close();

CharSequence[] entries = new CharSequence[currencyEntries.size()];
CharSequence[] entryValues = new CharSequence[currencyEntryValues.size()];

@SuppressWarnings("deprecation")
Preference pref = findPreference(getString(R.string.key_default_currency));
pref.setSummary(GnuCashApplication.getDefaultCurrencyCode());
pref.setOnPreferenceChangeListener(this);

((ListPreference) pref).setEntries(currencyEntries.toArray(entries));
((ListPreference) pref).setEntryValues(currencyEntryValues.toArray(entryValues));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -154,10 +154,9 @@ public void onClick(View view) {
}
}

GnuCashApplication.setDefaultCurrencyCode(mCurrencyCode);
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(FirstRunWizardActivity.this);
SharedPreferences.Editor preferenceEditor = preferences.edit();
preferenceEditor.putString(getString(R.string.key_default_currency), mCurrencyCode);


if (feedbackOption.equals(getString(R.string.wizard_option_auto_send_crash_reports))){
preferenceEditor.putBoolean(getString(R.string.key_enable_crashlytics), true);
Expand Down
Loading

0 comments on commit c533d27

Please sign in to comment.