diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 151b6ab..0b5070f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -81,6 +81,12 @@ android:label="@string/backup_data" android:screenOrientation="portrait" android:theme="@style/Theme.Default" /> + + + diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/AboutActivity.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/AboutActivity.java new file mode 100644 index 0000000..4f250fc --- /dev/null +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/AboutActivity.java @@ -0,0 +1,25 @@ +package com.blogspot.e_kanivets.moneytracker.activity; + +import android.text.method.LinkMovementMethod; +import android.widget.TextView; + +import com.blogspot.e_kanivets.moneytracker.R; +import com.blogspot.e_kanivets.moneytracker.activity.base.BaseBackActivity; + +import butterknife.Bind; + +public class AboutActivity extends BaseBackActivity { + @Bind(R.id.tv_about) + TextView tvAbout; + + @Override + protected int getContentViewId() { + return R.layout.activity_about; + } + + @Override + protected void initViews() { + super.initViews(); + tvAbout.setMovementMethod(LinkMovementMethod.getInstance()); + } +} 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 7316a13..294e218 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 @@ -1,10 +1,12 @@ package com.blogspot.e_kanivets.moneytracker.activity; +import android.os.Build; import android.os.Bundle; import android.preference.ListPreference; import android.preference.Preference; import android.preference.PreferenceFragment; +import com.blogspot.e_kanivets.moneytracker.BuildConfig; import com.blogspot.e_kanivets.moneytracker.MtApp; import com.blogspot.e_kanivets.moneytracker.R; import com.blogspot.e_kanivets.moneytracker.activity.base.BaseBackActivity; @@ -58,6 +60,13 @@ public void onCreate(Bundle savedInstanceState) { setupDefaultAccountPref(); setupDefaultCurrencyPref(); 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() { diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/base/BaseActivity.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/base/BaseActivity.java index ce00ecf..208e505 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/base/BaseActivity.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/base/BaseActivity.java @@ -68,14 +68,16 @@ protected void showToast(@StringRes int messageId) { Toast.makeText(BaseActivity.this, messageId, Toast.LENGTH_SHORT).show(); } - public void startProgress() { - if (getProgressBar() == null) return; - getProgressBar().show(); + public void startProgress(@Nullable String message) { + ProgressDialog progressDialog = getProgressDialog(); + if (progressDialog == null) return; + if (message != null) progressDialog.setMessage(message); + progressDialog.show(); } public void stopProgress() { - if (getProgressBar() == null) return; - getProgressBar().dismiss(); + if (getProgressDialog() == null) return; + getProgressDialog().dismiss(); } public void showAlert(@Nullable String title, @Nullable String message) { @@ -90,7 +92,7 @@ public void showAlert(@Nullable String title, @Nullable String message) { dialog.show(); } - private ProgressDialog getProgressBar() { + private ProgressDialog getProgressDialog() { if (progressDialog == null) progressDialog = new ProgressDialog(this); return progressDialog; } diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/external/BackupActivity.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/external/BackupActivity.java index 5a44458..71250ba 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/external/BackupActivity.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/external/BackupActivity.java @@ -89,7 +89,7 @@ protected void onResume() { @OnClick(R.id.btn_backup_now) public void backupNow() { - startProgress(); + startProgress(getString(R.string.making_backup)); backupController.makeBackup(dbApi, new BackupController.OnBackupListener() { @Override public void onBackupSuccess() { @@ -131,7 +131,7 @@ public void onClick(DialogInterface dialog, int which) { } private void restoreBackup(final String backupName) { - startProgress(); + startProgress(getString(R.string.restoring_backup)); backupController.restoreBackup(dbApi, backupName, new BackupController.OnRestoreBackupListener() { @Override public void onRestoreSuccess() { @@ -170,7 +170,7 @@ public void onRestoreFailure(String reason) { } private void fetchBackups() { - startProgress(); + startProgress(getString(R.string.fetching_backups)); backupController.fetchBackups(dbApi, new BackupController.OnFetchBackupListListener() { @Override public void onBackupsFetched(@NonNull List backupList) { diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/external/ImportExportActivity.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/external/ImportExportActivity.java index 4026285..2d4dba4 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/external/ImportExportActivity.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/external/ImportExportActivity.java @@ -80,7 +80,7 @@ public void importRecords() { @Override protected void onPreExecute() { super.onPreExecute(); - startProgress(); + startProgress(getString(R.string.importing_records)); } @Override diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/record/AddRecordActivity.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/record/AddRecordActivity.java index 21a3713..0267658 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/record/AddRecordActivity.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/record/AddRecordActivity.java @@ -132,7 +132,8 @@ protected void initViews() { if (getSupportActionBar() != null) { switch (type) { case Record.TYPE_EXPENSE: - getSupportActionBar().setTitle(R.string.title_add_expense); + if (mode == Mode.MODE_ADD) getSupportActionBar().setTitle(R.string.title_add_expense); + else getSupportActionBar().setTitle(R.string.title_edit_expense); getSupportActionBar().setBackgroundDrawable( new ColorDrawable(getResources().getColor(R.color.red_light))); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { @@ -144,7 +145,8 @@ protected void initViews() { break; case Record.TYPE_INCOME: - getSupportActionBar().setTitle(R.string.title_add_income); + if (mode == Mode.MODE_ADD) getSupportActionBar().setTitle(R.string.title_add_income); + else getSupportActionBar().setTitle(R.string.title_edit_income); getSupportActionBar().setBackgroundDrawable( new ColorDrawable(getResources().getColor(R.color.green_light))); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/adapter/CategoryAutoCompleteAdapter.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/adapter/CategoryAutoCompleteAdapter.java index 22103b7..234c1bc 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/adapter/CategoryAutoCompleteAdapter.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/adapter/CategoryAutoCompleteAdapter.java @@ -1,15 +1,23 @@ package com.blogspot.e_kanivets.moneytracker.adapter; import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.Filter; import android.widget.Filterable; +import android.widget.TextView; +import com.blogspot.e_kanivets.moneytracker.R; import com.blogspot.e_kanivets.moneytracker.util.CategoryAutoCompleter; import java.util.ArrayList; import java.util.List; +import butterknife.Bind; +import butterknife.ButterKnife; + /** * Custom adapter to autocomplete categories. * Created on 3/18/16. @@ -25,6 +33,31 @@ public CategoryAutoCompleteAdapter(Context context, int resource, CategoryAutoCo this.autoCompleter = autoCompleter; } + @Override + public View getView(int position, View convertView, ViewGroup parent) { + ViewHolder viewHolder; + + if (convertView == null) { + convertView = LayoutInflater.from(getContext()).inflate(R.layout.view_category_item, parent, false); + viewHolder = new ViewHolder(convertView); + convertView.setTag(viewHolder); + } else viewHolder = (ViewHolder) convertView.getTag(); + + final String category = resultList.get(position); + + viewHolder.tvCategory.setText(category); + viewHolder.ivCancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + autoCompleter.removeFromAutoComplete(category); + resultList.remove(category); + notifyDataSetChanged(); + } + }); + + return convertView; + } + @Override public int getCount() { return resultList.size(); @@ -63,4 +96,15 @@ protected void publishResults(CharSequence constraint, FilterResults results) { } }; } + + public static class ViewHolder { + @Bind(R.id.tv_category) + TextView tvCategory; + @Bind(R.id.iv_cancel) + View ivCancel; + + public ViewHolder(View view) { + ButterKnife.bind(this, view); + } + } } 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 a3130f3..682f788 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,9 @@ import com.blogspot.e_kanivets.moneytracker.R; +import java.util.HashSet; +import java.util.Set; + /** * Controller class to encapsulate Shared Preferences handling logic. * Not deal with {@link com.blogspot.e_kanivets.moneytracker.repo.base.IRepo} instances as others. @@ -22,6 +25,7 @@ public class PreferenceController { private static final String KEY_LAST_TS = "key_last_ts"; private static final String KEY_PERIOD_TYPE = "key_period_type"; private static final String KEY_DROPBOX_ACCESS_TOKEN = "key_dropbox_access_token"; + private static final String KEY_FILTERED_CATEGORIES = "key_filtered_categories"; private static final int RATE_PERIOD = 5; @@ -34,7 +38,7 @@ public PreferenceController(@NonNull Context context) { public void addLaunchCount() { SharedPreferences preferences = getDefaultPrefs(); - SharedPreferences.Editor editor = preferences.edit(); + SharedPreferences.Editor editor = getEditor(); editor.putInt(LAUNCH_COUNT, preferences.getInt(LAUNCH_COUNT, 0) + 1); editor.apply(); } @@ -50,16 +54,13 @@ public boolean checkRateDialog() { } public void appRated() { - SharedPreferences preferences = getDefaultPrefs(); - SharedPreferences.Editor editor = preferences.edit(); + SharedPreferences.Editor editor = getEditor(); editor.putBoolean(APP_RATED, true); editor.apply(); } public void writeFirstTs(long firstTs) { - SharedPreferences preferences = getDefaultPrefs(); - SharedPreferences.Editor editor = preferences.edit(); - + SharedPreferences.Editor editor = getEditor(); editor.putLong(KEY_FIRST_TS, firstTs); editor.apply(); } @@ -73,21 +74,23 @@ public void writeLastTs(long lastTs) { } public void writePeriodType(String periodType) { - SharedPreferences preferences = getDefaultPrefs(); - SharedPreferences.Editor editor = preferences.edit(); - + SharedPreferences.Editor editor = getEditor(); editor.putString(KEY_PERIOD_TYPE, periodType); editor.apply(); } public void writeDropboxAccessToken(String accessToken) { - SharedPreferences preferences = getDefaultPrefs(); - SharedPreferences.Editor editor = preferences.edit(); - + SharedPreferences.Editor editor = getEditor(); editor.putString(KEY_DROPBOX_ACCESS_TOKEN, accessToken); editor.apply(); } + public void writeFilteredCategories(@Nullable Set categorySet) { + SharedPreferences.Editor editor = getEditor(); + editor.putStringSet(KEY_FILTERED_CATEGORIES, categorySet); + editor.apply(); + } + public long readDefaultAccountId() { String defaultAccountPref = context.getString(R.string.pref_default_account); SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context); @@ -129,7 +132,19 @@ public String readDropboxAccessToken() { return getDefaultPrefs().getString(KEY_DROPBOX_ACCESS_TOKEN, null); } + @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 private SharedPreferences getDefaultPrefs() { return context.getSharedPreferences(context.getPackageName(), Context.MODE_PRIVATE); } + + @NonNull + private SharedPreferences.Editor getEditor() { + return getDefaultPrefs().edit(); + } } diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/data/CategoryController.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/data/CategoryController.java index e95ed12..dd8bbca 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/data/CategoryController.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/data/CategoryController.java @@ -3,12 +3,15 @@ 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.Category; import com.blogspot.e_kanivets.moneytracker.repo.base.IRepo; +import java.util.ArrayList; import java.util.List; +import java.util.Set; /** * Controller class to encapsulate category handling logic. @@ -20,13 +23,23 @@ public class CategoryController extends BaseController { @SuppressWarnings("unused") private static final String TAG = "CategoryController"; - public CategoryController(@NonNull IRepo categoryRepo) { + @NonNull + private final PreferenceController preferenceController; + @NonNull + private Set filteredCategories; + + public CategoryController(@NonNull IRepo categoryRepo, + @NonNull PreferenceController preferenceController) { super(categoryRepo); + this.preferenceController = preferenceController; + filteredCategories = preferenceController.readFilteredCategories(); } public Category readOrCreate(@Nullable String categoryName) { if (categoryName == null || categoryName.trim().isEmpty()) return null; + enableCategory(categoryName); + String condition = DbHelper.NAME_COLUMN + "=?"; String[] args = {categoryName}; List categoryList = repo.readWithCondition(condition, args); @@ -34,4 +47,31 @@ public Category readOrCreate(@Nullable String categoryName) { if (categoryList.size() >= 1) return categoryList.get(0); else return repo.create(new Category(categoryName)); } -} \ No newline at end of file + + @NonNull + public List readFiltered() { + List filteredList = new ArrayList<>(); + + for (Category category : readAll()) { + if (!filteredCategories.contains(category.getName())) filteredList.add(category); + } + + return filteredList; + } + + /** + * @param category to disable when request filtered list. + */ + public void disableCategory(@Nullable String category) { + filteredCategories.add(category); + preferenceController.writeFilteredCategories(filteredCategories); + } + + /** + * @param category to enable when request filtered list. + */ + public void enableCategory(@Nullable String category) { + filteredCategories.remove(category); + preferenceController.writeFilteredCategories(filteredCategories); + } +} 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 d54f1be..af86465 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 @@ -52,8 +52,9 @@ public AccountController providesAccountController(IRepo accountRepo, @Provides @NonNull @Singleton - public CategoryController providesCategoryController(IRepo categoryRepo) { - return new CategoryController(categoryRepo); + public CategoryController providesCategoryController(IRepo categoryRepo, + PreferenceController preferenceController) { + return new CategoryController(categoryRepo, preferenceController); } @Provides diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/report/record/RecordReportConverter.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/report/record/RecordReportConverter.java index 07ad91a..3f302f7 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/report/record/RecordReportConverter.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/report/record/RecordReportConverter.java @@ -65,7 +65,7 @@ public List>> getChildData() { List> childDataItem = new ArrayList<>(); for (SummaryRecord summaryRecord : categoryRecord.getSummaryRecordList()) { Map m = new HashMap<>(); - m.put(TITLE_PARAM_NAME, summaryRecord.getTitle()); + m.put(TITLE_PARAM_NAME, getTitle(summaryRecord)); m.put(PRICE_PARAM_NAME, Double.toString(summaryRecord.getAmount())); childDataItem.add(m); @@ -91,4 +91,10 @@ public String[] getChildFrom() { public int[] getChildTo() { return new int[]{R.id.tv_category, R.id.tv_total}; } -} \ No newline at end of file + + private String getTitle(@NonNull SummaryRecord record) { + int count = record.getRecordList().size(); + if (count <= 1) return record.getTitle(); + else return record.getTitle() + " (" + count + ")"; + } +} diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/util/CategoryAutoCompleter.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/util/CategoryAutoCompleter.java index d1a7d87..86ea779 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/util/CategoryAutoCompleter.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/util/CategoryAutoCompleter.java @@ -14,11 +14,13 @@ */ public class CategoryAutoCompleter { private List categoryList; + private CategoryController categoryController; public CategoryAutoCompleter(CategoryController categoryController) { + this.categoryController = categoryController; categoryList = new ArrayList<>(); - for (Category category : categoryController.readAll()) { + for (Category category : categoryController.readFiltered()) { categoryList.add(category.getName()); } } @@ -32,4 +34,9 @@ public List completeByPart(String part) { return resultList; } + + public void removeFromAutoComplete(String category) { + categoryList.remove(category); + categoryController.disableCategory(category); + } } diff --git a/app/src/main/res/drawable/ic_cancel.xml b/app/src/main/res/drawable/ic_cancel.xml new file mode 100644 index 0000000..e247f84 --- /dev/null +++ b/app/src/main/res/drawable/ic_cancel.xml @@ -0,0 +1,13 @@ + + + diff --git a/app/src/main/res/layout/activity_about.xml b/app/src/main/res/layout/activity_about.xml new file mode 100644 index 0000000..0984b68 --- /dev/null +++ b/app/src/main/res/layout/activity_about.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/view_category_item.xml b/app/src/main/res/layout/view_category_item.xml index 88e399c..cb6c6b2 100644 --- a/app/src/main/res/layout/view_category_item.xml +++ b/app/src/main/res/layout/view_category_item.xml @@ -1,7 +1,28 @@ - \ No newline at end of file + android:gravity="center_vertical" + android:orientation="horizontal" + android:paddingEnd="@dimen/half_margin" + android:paddingStart="@dimen/normal_margin" + tools:ignore="UseCompoundDrawables"> + + + + + + diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index cc21d49..1a74995 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -93,4 +93,16 @@ Предупреждение Вы действительно хотите удалить все текущие данные и восстановить бэкап %1$s? Пожалуйста, сделайте бэкап текущих данных. Сделать бэкап + + Редактировать доход + Редактировать расход + + Импортирование записей… + Создание бэкапа… + Восстановление бэкапа… + Загрузка бэкапов… + + Версия %1$s (Android %2$s) + О приложении + Open Money Tracker (OMT) это приложения для ведения личных финансов. Вы легко можете управлять доходами и расходами. Также доступны счета и курсы обмена.\n\nДля того чтобы помочь сделать OMT лучше, пишите о багах на форуме 4PDA; идеи новых функций также приветствуются. Ищите ответы или начинайте обсуждение на форуме.\n\nOMT это проект с открытым исходным кодом, так что каждый может помочь с его разработкой. Не-разработчики также могут помочь. Например, вы можете помочь с переводом, предоставить скриншоты или написать статью в блоге о OMT.\n\nOMT выпущен под GNU-GPL v3 лицензией и исходный код доступен на GitHub.\n\nПрофиль разработчика на LinkedIn. diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 85be812..430d366 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -93,4 +93,16 @@ Попередження Ви дійсно хочете видалити усі поточні дані і відновити бекап %1$s? Будь ласка, зробіть бекап поточних даних. Зробити бекап + + Редагувати дохід + Редагувати витрату + + Імпорт записів… + Створення бекапу… + Відновлення бекапу… + Завантаження бекапів… + + Версія %1$s (Android %2$s) + Про додаток + Open Money Tracker (OMT) це додаток для обліку персональних фінансів. Ви можете з легкістю керувати доходами та витратами. Також доступні рахунки та курси обміну.\n\nДля того щоб допомогти нам зробити OMT краще, пишіть про баги на форумі 4PDA; ідеї нових функцій також підтримуються. Знайдіть відповіді або розпочніть бесіду на форумі.\n\nOMT це додаток з відкритим сирцевим кодом, тож будь-хто може стати учасником. Не-розробники також можуть допомогти. Наприклад, Ви можете допомогти з перекладом OMT, надати знімки екранів або написати у блозі про OMT.\n\nOMT випущено під GNU-GPL v3 ліцензією і сирцевий код доступний на GitHub.\n\nПрофiль розробника на LinkedIn. diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6b6b9be..ced045d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -101,5 +101,18 @@ Warning Do you really want to erase all current data and restore backup file %1$s? Be sure to backup current data. Backup now + + Edit income + Edit expense + + Importing records… + Making backup… + Restoring backup… + Fetching backups… + + pref_about + Version %1$s (Android %2$s) + About + Open Money Tracker (OMT) is an accounting application. You can manage your incomes and expenses in easy way. Accounts and currency exchange rates are also available.\n\nTo help us make OMT better, please report bugs to the 4PDA forum; new feature ideas are very welcome too. Find answers or start a discussion on forum.\n\nOMT is open source software, so everyone is encouraged to become a contributor. Non-developers can also help. For instance, you can help translate OMT, provide screenshots or blog about OMT.\n\nOMT is released under the GNU-GPL v3 license and source code is available on GitHub.\n\nDeveloper profile on LinkedIn. diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index 1f68ed7..041c89a 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -14,4 +14,13 @@ android:key="@string/pref_display_precision" android:summary="%s" android:title="@string/display_precision" /> - \ No newline at end of file + + + + + diff --git a/app/src/test/java/com/blogspot/e_kanivets/moneytracker/controller/data/CategoryControllerTest.java b/app/src/test/java/com/blogspot/e_kanivets/moneytracker/controller/data/CategoryControllerTest.java index 057d1bd..c961f01 100644 --- a/app/src/test/java/com/blogspot/e_kanivets/moneytracker/controller/data/CategoryControllerTest.java +++ b/app/src/test/java/com/blogspot/e_kanivets/moneytracker/controller/data/CategoryControllerTest.java @@ -3,10 +3,13 @@ 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.data.Category; import com.blogspot.e_kanivets.moneytracker.repo.base.IRepo; +import org.junit.Before; import org.junit.Test; +import org.mockito.Mockito; import java.util.ArrayList; import java.util.List; @@ -20,10 +23,16 @@ * @author Evgenii Kanivets */ public class CategoryControllerTest { + private PreferenceController mockPrefs; + + @Before + public void setUp() throws Exception { + mockPrefs = Mockito.mock(PreferenceController.class); + } @Test public void testReadOrCreate() throws Exception { - CategoryController categoryController = new CategoryController(emptyRepo); + CategoryController categoryController = new CategoryController(emptyRepo, mockPrefs); assertNull(categoryController.readOrCreate(null)); assertNull(categoryController.readOrCreate("")); @@ -34,7 +43,7 @@ public void testReadOrCreate() throws Exception { result = categoryController.readOrCreate("category 1"); assertEquals("category 1", result.getName()); - categoryController = new CategoryController(repo); + categoryController = new CategoryController(repo, mockPrefs); result = categoryController.readOrCreate("category 1"); assertEquals("category 1", result.getName());