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..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 @@ -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 = preferenceController.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..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 @@ -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,7 @@ public String readDefaultCurrency() { return currency; } - @NonNull - private List fetchCurrencies() { + @NonNull private List fetchCurrencies() { Set toret = new HashSet<>(); Locale[] locs = Locale.getAvailableLocales(); @@ -67,13 +63,15 @@ private List fetchCurrencies() { } } - 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); 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..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; @@ -33,8 +34,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 +113,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, DbHelper.DEFAULT_ACCOUNT_CURRENCY); + } + public long readFirstTs() { return getDefaultPrefs().getLong(KEY_FIRST_TS, -1); } @@ -137,28 +142,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 +169,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/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 5bd47d0..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,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.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 PreferenceController preferenceController; public RecordController(IRepo recordRepo, CategoryController categoryController, - AccountController accountController) { + AccountController accountController, PreferenceController preferenceController) { super(recordRepo); this.categoryController = categoryController; this.accountController = accountController; + this.preferenceController = preferenceController; } @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 = preferenceController.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..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 @@ -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, PreferenceController preferenceController) { + return new RecordController(recordRepo, categoryController, accountController, preferenceController); } - @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); } } 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 @@ - + - + - + + + + + + + - - - 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