From 9fb0339dc771054252c1660716c485dffe42dc32 Mon Sep 17 00:00:00 2001 From: Evgenii Kanivets Date: Sun, 16 Sep 2018 09:00:13 +0200 Subject: [PATCH 1/5] #153. Add 'NON susbstitution currency' setting. --- .../activity/SettingsActivity.java | 89 ++++++++++--------- .../controller/CurrencyController.java | 22 +++-- .../controller/PreferenceController.java | 37 ++++---- app/src/main/res/values-ru/strings.xml | 1 + app/src/main/res/values-uk/strings.xml | 1 + app/src/main/res/values-zh/strings.xml | 1 + app/src/main/res/values/strings.xml | 2 + app/src/main/res/xml/preferences.xml | 46 +++++----- 8 files changed, 109 insertions(+), 90 deletions(-) diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/SettingsActivity.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/SettingsActivity.java index d8d8c50..53de442 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/SettingsActivity.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/SettingsActivity.java @@ -22,34 +22,25 @@ import javax.inject.Inject; public class SettingsActivity extends BaseBackActivity { - @SuppressWarnings("unused") - private static final String TAG = "SettingsActivity"; + @SuppressWarnings("unused") private static final String TAG = "SettingsActivity"; - @Override - protected int getContentViewId() { + @Override protected int getContentViewId() { return R.layout.activity_settings; } - @Override - protected void initViews() { + @Override protected void initViews() { super.initViews(); // Display the fragment as the main content. - getFragmentManager().beginTransaction() - .replace(R.id.content, new SettingsFragment()) - .commit(); + getFragmentManager().beginTransaction().replace(R.id.content, new SettingsFragment()).commit(); } public static class SettingsFragment extends PreferenceFragment { - @Inject - AccountController accountController; - @Inject - CurrencyController currencyController; - @Inject - PreferenceController preferenceController; - - @Override - public void onCreate(Bundle savedInstanceState) { + @Inject AccountController accountController; + @Inject CurrencyController currencyController; + @Inject PreferenceController preferenceController; + + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); MtApp.get().getAppComponent().inject(SettingsFragment.this); @@ -59,18 +50,14 @@ public void onCreate(Bundle savedInstanceState) { setupDefaultAccountPref(); setupDefaultCurrencyPref(); + setupNonSubstitutionCurrencyPref(); setupDisplayPrecision(); setupAboutPref(); } - private void setupAboutPref() { - Preference preference = findPreference(getString(R.string.pref_about)); - preference.setSummary(getString(R.string.about_summary, BuildConfig.VERSION_NAME, - Build.VERSION.RELEASE)); - } - private void setupDefaultAccountPref() { - ListPreference defaultAccountPref = (ListPreference) findPreference(getString(R.string.pref_default_account)); + ListPreference defaultAccountPref = + (ListPreference) findPreference(getString(R.string.pref_default_account)); defaultAccountPref.setOnPreferenceChangeListener(preferenceChangeListener); List accountList = accountController.readActiveAccounts(); @@ -87,9 +74,9 @@ private void setupDefaultAccountPref() { } } - @SuppressWarnings("ToArrayCallWithZeroLengthArrayArgument") - private void setupDefaultCurrencyPref() { - ListPreference defaultCurrencyPref = (ListPreference) findPreference(getString(R.string.pref_default_currency)); + @SuppressWarnings("ToArrayCallWithZeroLengthArrayArgument") private void setupDefaultCurrencyPref() { + ListPreference defaultCurrencyPref = + (ListPreference) findPreference(getString(R.string.pref_default_currency)); defaultCurrencyPref.setOnPreferenceChangeListener(preferenceChangeListener); List currencyList = currencyController.readAll(); @@ -101,9 +88,23 @@ private void setupDefaultCurrencyPref() { defaultCurrencyPref.setSummary(defaultCurrency); } - @SuppressWarnings("ToArrayCallWithZeroLengthArrayArgument") - private void setupDisplayPrecision() { - ListPreference displayPrecisionPref = (ListPreference) findPreference(getString(R.string.pref_display_precision)); + @SuppressWarnings("ToArrayCallWithZeroLengthArrayArgument") private void setupNonSubstitutionCurrencyPref() { + ListPreference nonSubstitutionCurrencyPref = + (ListPreference) findPreference(getString(R.string.pref_non_substitution_currency)); + nonSubstitutionCurrencyPref.setOnPreferenceChangeListener(preferenceChangeListener); + + List currencyList = currencyController.readAll(); + nonSubstitutionCurrencyPref.setEntries(currencyList.toArray(new String[0])); + nonSubstitutionCurrencyPref.setEntryValues(currencyList.toArray(new String[0])); + + String nonSubstitutionCurrency = currencyController.readNonSubstitutionCurrency(); + nonSubstitutionCurrencyPref.setDefaultValue(nonSubstitutionCurrency); + nonSubstitutionCurrencyPref.setSummary(nonSubstitutionCurrency); + } + + @SuppressWarnings("ToArrayCallWithZeroLengthArrayArgument") private void setupDisplayPrecision() { + ListPreference displayPrecisionPref = + (ListPreference) findPreference(getString(R.string.pref_display_precision)); displayPrecisionPref.setOnPreferenceChangeListener(preferenceChangeListener); List precisionListValues = new ArrayList<>(); @@ -124,6 +125,11 @@ private void setupDisplayPrecision() { } } + private void setupAboutPref() { + Preference preference = findPreference(getString(R.string.pref_about)); + preference.setSummary(getString(R.string.about_summary, BuildConfig.VERSION_NAME, Build.VERSION.RELEASE)); + } + @SuppressWarnings("ToArrayCallWithZeroLengthArrayArgument") private String[] getEntries(List accountList) { List result = new ArrayList<>(); @@ -146,16 +152,15 @@ private String[] getEntryValues(List accountList) { return result.toArray(new String[0]); } - private Preference.OnPreferenceChangeListener preferenceChangeListener - = new Preference.OnPreferenceChangeListener() { - @Override - public boolean onPreferenceChange(Preference preference, Object newValue) { - // Previously we could set summary to default value, - // but now it's needed to display selected entry - preference.setSummary("%s"); - getActivity().setResult(RESULT_OK); - return true; - } - }; + private Preference.OnPreferenceChangeListener preferenceChangeListener = + new Preference.OnPreferenceChangeListener() { + @Override public boolean onPreferenceChange(Preference preference, Object newValue) { + // Previously we could set summary to default value, + // but now it's needed to display selected entry + preference.setSummary("%s"); + getActivity().setResult(RESULT_OK); + return true; + } + }; } } diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/CurrencyController.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/CurrencyController.java index adbae7a..12ef3f9 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/CurrencyController.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/CurrencyController.java @@ -25,8 +25,7 @@ public class CurrencyController { private AccountController accountController; private PreferenceController preferenceController; - @NonNull - private List currencyList; + @NonNull private List currencyList; public CurrencyController(AccountController accountController, PreferenceController preferenceController) { this.accountController = accountController; @@ -34,13 +33,11 @@ public CurrencyController(AccountController accountController, PreferenceControl currencyList = fetchCurrencies(); } - @NonNull - public List readAll() { + @NonNull public List readAll() { return currencyList; } - @NonNull - public String readDefaultCurrency() { + @NonNull public String readDefaultCurrency() { // First of all read from Prefs String currency = preferenceController.readDefaultCurrency(); @@ -54,8 +51,17 @@ public String readDefaultCurrency() { return currency; } - @NonNull - private List fetchCurrencies() { + @NonNull public String readNonSubstitutionCurrency() { + // First of all read from Prefs + String currency = preferenceController.readNonSubstitutionCurrency(); + + // If don't have default currency, use NON + if (currency == null) currency = DbHelper.DEFAULT_ACCOUNT_CURRENCY; + + return currency; + } + + @NonNull private List fetchCurrencies() { Set toret = new HashSet<>(); Locale[] locs = Locale.getAvailableLocales(); diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/PreferenceController.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/PreferenceController.java index 477e5e9..7cf9676 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/PreferenceController.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/PreferenceController.java @@ -33,8 +33,7 @@ public class PreferenceController { private static final int RATE_PERIOD = 5; - @NonNull - private Context context; + @NonNull private Context context; public PreferenceController(@NonNull Context context) { this.context = context; @@ -113,22 +112,27 @@ public long readDefaultAccountId() { return Long.parseLong(preferences.getString(defaultAccountPref, "-1")); } - @Nullable - public String readDefaultCurrency() { + @Nullable public String readDefaultCurrency() { String defaultCurrencyPref = context.getString(R.string.pref_default_currency); SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); return preferences.getString(defaultCurrencyPref, null); } - @NonNull - public String readDisplayPrecision() { + @NonNull public String readDisplayPrecision() { String displayPrecisionPref = context.getString(R.string.pref_display_precision); SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); return preferences.getString(displayPrecisionPref, FormatController.PRECISION_MATH); } + @Nullable public String readNonSubstitutionCurrency() { + String nonSubstitutionCurrencyPref = context.getString(R.string.pref_non_substitution_currency); + SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); + + return preferences.getString(nonSubstitutionCurrencyPref, null); + } + public long readFirstTs() { return getDefaultPrefs().getLong(KEY_FIRST_TS, -1); } @@ -137,28 +141,23 @@ public long readLastTs() { return getDefaultPrefs().getLong(KEY_LAST_TS, -1); } - @Nullable - public String readPeriodType() { + @Nullable public String readPeriodType() { return getDefaultPrefs().getString(KEY_PERIOD_TYPE, null); } - @Nullable - public String readDropboxAccessToken() { + @Nullable public String readDropboxAccessToken() { return getDefaultPrefs().getString(KEY_DROPBOX_ACCESS_TOKEN, null); } - @NonNull - public Set readFilteredCategories() { + @NonNull public Set readFilteredCategories() { // http://stackoverflow.com/questions/14034803/misbehavior-when-trying-to-store-a-string-set-using-sharedpreferences/14034804#14034804 return new HashSet<>(getDefaultPrefs().getStringSet(KEY_FILTERED_CATEGORIES, new HashSet())); } - @NonNull - public Map readRecordTitleCategoryPairs() { + @NonNull public Map readRecordTitleCategoryPairs() { Map map = new TreeMap<>(); - Set set = getDefaultPrefs().getStringSet(KEY_RECORD_TITLE_CATEGORY_PAIRS, - new HashSet()); + Set set = getDefaultPrefs().getStringSet(KEY_RECORD_TITLE_CATEGORY_PAIRS, new HashSet()); for (String entry : set) { String[] words = entry.split(";"); if (words.length == 2) { @@ -169,13 +168,11 @@ public Map readRecordTitleCategoryPairs() { return map; } - @NonNull - private SharedPreferences getDefaultPrefs() { + @NonNull private SharedPreferences getDefaultPrefs() { return context.getSharedPreferences(context.getPackageName(), Context.MODE_PRIVATE); } - @NonNull - private SharedPreferences.Editor getEditor() { + @NonNull private SharedPreferences.Editor getEditor() { return getDefaultPrefs().edit(); } } diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 1cd0249..4995132 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -56,6 +56,7 @@ Настройки Счет по умолчанию Валюта по умолчанию + Замена валюты NON Итоги Доходы diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index e82b208..d828602 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -56,6 +56,7 @@ Налаштування Рахунок за замовчуванням Валюта за замовчуванням + Замiна валюти NON Підсумки Доходи diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index c3c2d59..a8fc9f1 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -52,6 +52,7 @@ 设置 默认账户 默认货币 + NON 替代貨幣 表格 收入 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 55a87a7..7d479d0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -58,7 +58,9 @@ pref_default_account pref_default_currency %1$s - %2$s + pref_non_substitution_currency Default currency + NON substitution currency Results Incomes diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index 041c89a..cf1ac3a 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -1,26 +1,32 @@ - + - + - + + + + + + + - - - From 18980598054c9bb8fd70cbe8b054e3497207299b Mon Sep 17 00:00:00 2001 From: Evgenii Kanivets Date: Mon, 17 Sep 2018 19:54:56 +0200 Subject: [PATCH 2/5] #153. Substitute NON currency in RecordController. --- .../controller/data/RecordController.java | 13 +++- .../di/module/ControllerModule.java | 75 ++++++------------- 2 files changed, 32 insertions(+), 56 deletions(-) diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/data/RecordController.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/data/RecordController.java index 5bd47d0..e6e3006 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/data/RecordController.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/data/RecordController.java @@ -3,6 +3,7 @@ import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import com.blogspot.e_kanivets.moneytracker.controller.CurrencyController; import com.blogspot.e_kanivets.moneytracker.repo.DbHelper; import com.blogspot.e_kanivets.moneytracker.controller.base.BaseController; import com.blogspot.e_kanivets.moneytracker.entity.data.Account; @@ -23,14 +24,17 @@ * @author Evgenii Kanivets */ public class RecordController extends BaseController { + private final CategoryController categoryController; private final AccountController accountController; + private final CurrencyController currencyController; public RecordController(IRepo recordRepo, CategoryController categoryController, - AccountController accountController) { + AccountController accountController, CurrencyController currencyController) { super(recordRepo); this.categoryController = categoryController; this.accountController = accountController; + this.currencyController = currencyController; } @Override @SuppressWarnings("SimplifiableIfStatement") public Record create(@Nullable Record record) { @@ -104,9 +108,14 @@ record = validateRecord(record); Account account = null; if (record.getAccount() != null) account = accountController.read(record.getAccount().getId()); + String currency = record.getCurrency(); + if (DbHelper.DEFAULT_ACCOUNT_CURRENCY.equals(currency)) { + currency = currencyController.readNonSubstitutionCurrency(); + } + completedRecordList.add( new Record(record.getId(), record.getTime(), record.getType(), record.getTitle(), category, - record.getPrice(), account, record.getCurrency(), record.getDecimals())); + record.getPrice(), account, currency, record.getDecimals())); } return completedRecordList; diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/di/module/ControllerModule.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/di/module/ControllerModule.java index 3ec446f..d65b999 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/di/module/ControllerModule.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/di/module/ControllerModule.java @@ -33,102 +33,69 @@ * * @author Evgenii Kanivets */ -@Module -public class ControllerModule { +@Module public class ControllerModule { private Context context; public ControllerModule(Context context) { this.context = context; } - @Provides - @NonNull - @Singleton - public AccountController providesAccountController(IRepo accountRepo, - PreferenceController preferenceController) { + @Provides @NonNull @Singleton public AccountController providesAccountController(IRepo accountRepo, + PreferenceController preferenceController) { return new AccountController(accountRepo, preferenceController); } - @Provides - @NonNull - @Singleton - public CategoryController providesCategoryController(IRepo categoryRepo, - PreferenceController preferenceController) { + @Provides @NonNull @Singleton public CategoryController providesCategoryController(IRepo categoryRepo, + PreferenceController preferenceController) { return new CategoryController(categoryRepo, preferenceController); } - @Provides - @NonNull - @Singleton + @Provides @NonNull @Singleton public ExchangeRateController providesExchangeRateController(IRepo exchangeRateRepo) { return new ExchangeRateController(exchangeRateRepo); } - @Provides - @NonNull - @Singleton - public RecordController providesRecordController(IRepo recordRepo, - CategoryController categoryController, - AccountController accountController) { - return new RecordController(recordRepo, categoryController, accountController); + @Provides @NonNull @Singleton + public RecordController providesRecordController(IRepo recordRepo, CategoryController categoryController, + AccountController accountController, CurrencyController currencyController) { + return new RecordController(recordRepo, categoryController, accountController, currencyController); } - @Provides - @NonNull - @Singleton - public TransferController providesTransferController(IRepo transferRepo, - AccountController accountController) { + @Provides @NonNull @Singleton public TransferController providesTransferController(IRepo transferRepo, + AccountController accountController) { return new TransferController(transferRepo, accountController); } - @Provides - @NonNull - @Singleton + @Provides @NonNull @Singleton public CurrencyController providesCurrencyController(AccountController accountController, - PreferenceController preferenceController) { + PreferenceController preferenceController) { return new CurrencyController(accountController, preferenceController); } - @Provides - @NonNull - @Singleton - public PreferenceController providesPreferenceController() { + @Provides @NonNull @Singleton public PreferenceController providesPreferenceController() { return new PreferenceController(context); } - @Provides - @NonNull - @Singleton + @Provides @NonNull @Singleton public PeriodController providesPeriodController(PreferenceController preferenceController) { return new PeriodController(preferenceController); } - @Provides - @NonNull - @Singleton + @Provides @NonNull @Singleton public FormatController providesFormatController(PreferenceController preferenceController) { return new FormatController(preferenceController); } - @Provides - @NonNull - @Singleton - public ExportController providesExportController(RecordController recordController, - CategoryController categoryController) { + @Provides @NonNull @Singleton public ExportController providesExportController(RecordController recordController, + CategoryController categoryController) { return new ExportController(recordController, categoryController); } - @Provides - @NonNull - @Singleton - public ImportController providesImportController(RecordController recordController) { + @Provides @NonNull @Singleton public ImportController providesImportController(RecordController recordController) { return new ImportController(recordController); } - @Provides - @NonNull - @Singleton - public BackupController providesBackupController(FormatController formatController) { + @Provides @NonNull @Singleton public BackupController providesBackupController(FormatController formatController) { return new BackupController(formatController, context.getApplicationInfo().dataDir); } } From 80153679476c101f63edde07affd06a975d00cc0 Mon Sep 17 00:00:00 2001 From: Evgenii Kanivets Date: Mon, 17 Sep 2018 20:41:54 +0200 Subject: [PATCH 3/5] #153. Substitute NON currency in AccountController. --- .../activity/SettingsActivity.java | 2 +- .../controller/CurrencyController.java | 10 ---- .../controller/PreferenceController.java | 3 +- .../controller/data/AccountController.java | 60 ++++++++++++++----- .../controller/data/RecordController.java | 10 ++-- .../di/module/ControllerModule.java | 4 +- 6 files changed, 56 insertions(+), 33 deletions(-) diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/SettingsActivity.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/SettingsActivity.java index 53de442..eac0415 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/SettingsActivity.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/SettingsActivity.java @@ -97,7 +97,7 @@ private void setupDefaultAccountPref() { nonSubstitutionCurrencyPref.setEntries(currencyList.toArray(new String[0])); nonSubstitutionCurrencyPref.setEntryValues(currencyList.toArray(new String[0])); - String nonSubstitutionCurrency = currencyController.readNonSubstitutionCurrency(); + String nonSubstitutionCurrency = preferenceController.readNonSubstitutionCurrency(); nonSubstitutionCurrencyPref.setDefaultValue(nonSubstitutionCurrency); nonSubstitutionCurrencyPref.setSummary(nonSubstitutionCurrency); } diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/CurrencyController.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/CurrencyController.java index 12ef3f9..e21f92d 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/CurrencyController.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/CurrencyController.java @@ -51,16 +51,6 @@ public CurrencyController(AccountController accountController, PreferenceControl return currency; } - @NonNull public String readNonSubstitutionCurrency() { - // First of all read from Prefs - String currency = preferenceController.readNonSubstitutionCurrency(); - - // If don't have default currency, use NON - if (currency == null) currency = DbHelper.DEFAULT_ACCOUNT_CURRENCY; - - return currency; - } - @NonNull private List fetchCurrencies() { Set toret = new HashSet<>(); Locale[] locs = Locale.getAvailableLocales(); diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/PreferenceController.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/PreferenceController.java index 7cf9676..16d9d14 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/PreferenceController.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/PreferenceController.java @@ -8,6 +8,7 @@ import com.blogspot.e_kanivets.moneytracker.R; +import com.blogspot.e_kanivets.moneytracker.repo.DbHelper; import java.util.HashSet; import java.util.Map; import java.util.Set; @@ -130,7 +131,7 @@ public long readDefaultAccountId() { String nonSubstitutionCurrencyPref = context.getString(R.string.pref_non_substitution_currency); SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); - return preferences.getString(nonSubstitutionCurrencyPref, null); + return preferences.getString(nonSubstitutionCurrencyPref, DbHelper.DEFAULT_ACCOUNT_CURRENCY); } public long readFirstTs() { diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/data/AccountController.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/data/AccountController.java index 75cf0db..f383cd7 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/data/AccountController.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/data/AccountController.java @@ -8,6 +8,7 @@ import com.blogspot.e_kanivets.moneytracker.entity.data.Account; import com.blogspot.e_kanivets.moneytracker.entity.data.Record; import com.blogspot.e_kanivets.moneytracker.entity.data.Transfer; +import com.blogspot.e_kanivets.moneytracker.repo.DbHelper; import com.blogspot.e_kanivets.moneytracker.repo.base.IRepo; import java.util.ArrayList; @@ -20,8 +21,7 @@ * @author Evgenii Kanivets */ public class AccountController extends BaseController { - @SuppressWarnings("unused") - private static final String TAG = "AccountController"; + @SuppressWarnings("unused") private static final String TAG = "AccountController"; private final PreferenceController preferenceController; @@ -30,8 +30,22 @@ public AccountController(IRepo accountRepo, PreferenceController prefer this.preferenceController = preferenceController; } - @NonNull - public List readActiveAccounts() { + @Nullable @Override public Account read(long id) { + return substituteCurrency(super.read(id)); + } + + @NonNull @Override public List readAll() { + List accountList = super.readAll(); + + List result = new ArrayList<>(); + for (Account account : accountList) { + result.add(substituteCurrency(account)); + } + + return result; + } + + @NonNull public List readActiveAccounts() { List result = new ArrayList<>(); for (Account account : readAll()) { @@ -43,8 +57,7 @@ public List readActiveAccounts() { return result; } - @NonNull - public List readArchivedAccounts() { + @NonNull public List readArchivedAccounts() { List result = new ArrayList<>(); for (Account account : readAll()) { @@ -128,15 +141,18 @@ public boolean transferDone(@Nullable Transfer transfer) { return true; } - @Nullable - public Account readDefaultAccount() { + @Nullable public Account readDefaultAccount() { long defaultAccountId = preferenceController.readDefaultAccountId(); - if (defaultAccountId == -1) return getFirstAccount(); - else { + if (defaultAccountId == -1) { + return getFirstAccount(); + } else { Account account = read(defaultAccountId); - if (account == null) return getFirstAccount(); - else return account; + if (account == null) { + return getFirstAccount(); + } else { + return account; + } } } @@ -162,7 +178,23 @@ public boolean restore(@Nullable Account account) { private Account getFirstAccount() { List accountList = readAll(); - if (accountList.size() == 0) return null; - else return accountList.get(0); + if (accountList.size() == 0) { + return null; + } else { + return accountList.get(0); + } + } + + private Account substituteCurrency(Account account) { + if (account == null) { + return null; + } else { + String currency = account.getCurrency(); + if (DbHelper.DEFAULT_ACCOUNT_CURRENCY.equals(currency)) { + currency = preferenceController.readNonSubstitutionCurrency(); + } + return new Account(account.getId(), account.getTitle(), account.getCurSum(), currency, + account.getDecimals(), account.getGoal(), account.isArchived(), account.getColor()); + } } } \ No newline at end of file diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/data/RecordController.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/data/RecordController.java index e6e3006..c15d524 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/data/RecordController.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/data/RecordController.java @@ -3,7 +3,7 @@ import android.support.annotation.NonNull; import android.support.annotation.Nullable; -import com.blogspot.e_kanivets.moneytracker.controller.CurrencyController; +import com.blogspot.e_kanivets.moneytracker.controller.PreferenceController; import com.blogspot.e_kanivets.moneytracker.repo.DbHelper; import com.blogspot.e_kanivets.moneytracker.controller.base.BaseController; import com.blogspot.e_kanivets.moneytracker.entity.data.Account; @@ -27,14 +27,14 @@ public class RecordController extends BaseController { private final CategoryController categoryController; private final AccountController accountController; - private final CurrencyController currencyController; + private final PreferenceController preferenceController; public RecordController(IRepo recordRepo, CategoryController categoryController, - AccountController accountController, CurrencyController currencyController) { + AccountController accountController, PreferenceController preferenceController) { super(recordRepo); this.categoryController = categoryController; this.accountController = accountController; - this.currencyController = currencyController; + this.preferenceController = preferenceController; } @Override @SuppressWarnings("SimplifiableIfStatement") public Record create(@Nullable Record record) { @@ -110,7 +110,7 @@ record = validateRecord(record); String currency = record.getCurrency(); if (DbHelper.DEFAULT_ACCOUNT_CURRENCY.equals(currency)) { - currency = currencyController.readNonSubstitutionCurrency(); + currency = preferenceController.readNonSubstitutionCurrency(); } completedRecordList.add( diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/di/module/ControllerModule.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/di/module/ControllerModule.java index d65b999..05297ff 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/di/module/ControllerModule.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/di/module/ControllerModule.java @@ -57,8 +57,8 @@ public ExchangeRateController providesExchangeRateController(IRepo @Provides @NonNull @Singleton public RecordController providesRecordController(IRepo recordRepo, CategoryController categoryController, - AccountController accountController, CurrencyController currencyController) { - return new RecordController(recordRepo, categoryController, accountController, currencyController); + AccountController accountController, PreferenceController preferenceController) { + return new RecordController(recordRepo, categoryController, accountController, preferenceController); } @Provides @NonNull @Singleton public TransferController providesTransferController(IRepo transferRepo, From b6924c70625e982e7db5238f571f64b2163559f1 Mon Sep 17 00:00:00 2001 From: Evgenii Kanivets Date: Mon, 17 Sep 2018 20:51:46 +0200 Subject: [PATCH 4/5] #153. Fine tune CurrencyController. --- .../moneytracker/controller/CurrencyController.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/CurrencyController.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/CurrencyController.java index e21f92d..706d2e8 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/CurrencyController.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/CurrencyController.java @@ -63,13 +63,15 @@ public CurrencyController(AccountController accountController, PreferenceControl } } - List currencyList = new ArrayList<>(); + List currencySet = new ArrayList<>(); for (Currency currency : toret) { - currencyList.add(currency.getCurrencyCode()); + currencySet.add(currency.getCurrencyCode()); } - currencyList.add(DbHelper.DEFAULT_ACCOUNT_CURRENCY); - currencyList.add("BYN"); // New belorussian ruble + currencySet.add(DbHelper.DEFAULT_ACCOUNT_CURRENCY); + currencySet.add("BYN"); // New belorussian ruble + + currencyList = new ArrayList<>(currencySet); Collections.sort(currencyList); From 1dd6dd43da8750227cc3b226f8956ae42d0e0673 Mon Sep 17 00:00:00 2001 From: Evgenii Kanivets Date: Mon, 17 Sep 2018 20:55:20 +0200 Subject: [PATCH 5/5] #153. Fix RecordControllerTest. --- .../moneytracker/controller/data/RecordControllerTest.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/src/test/java/com/blogspot/e_kanivets/moneytracker/controller/data/RecordControllerTest.java b/app/src/test/java/com/blogspot/e_kanivets/moneytracker/controller/data/RecordControllerTest.java index 274299f..0e14b27 100644 --- a/app/src/test/java/com/blogspot/e_kanivets/moneytracker/controller/data/RecordControllerTest.java +++ b/app/src/test/java/com/blogspot/e_kanivets/moneytracker/controller/data/RecordControllerTest.java @@ -3,6 +3,7 @@ import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import com.blogspot.e_kanivets.moneytracker.controller.PreferenceController; import com.blogspot.e_kanivets.moneytracker.entity.Period; import com.blogspot.e_kanivets.moneytracker.entity.data.Account; import com.blogspot.e_kanivets.moneytracker.entity.data.Category; @@ -34,6 +35,7 @@ public class RecordControllerTest { private RecordController recordController; private CategoryController categoryMock; private AccountController accountMock; + private PreferenceController preferenceMock; private TestRepo repo; @Before @@ -41,8 +43,9 @@ public void setUp() throws Exception { repo = new TestRepo(); categoryMock = Mockito.mock(CategoryController.class); accountMock = Mockito.mock(AccountController.class); + preferenceMock = Mockito.mock(PreferenceController.class); - recordController = new RecordController(repo, categoryMock, accountMock); + recordController = new RecordController(repo, categoryMock, accountMock, preferenceMock); } @After