diff --git a/.travis.yml b/.travis.yml index e8002e2..1337593 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,31 +2,26 @@ language: android jdk: oraclejdk8 android: components: - # Uncomment the lines below if you want to - # use the latest revision of Android SDK Tools - - platform-tools - - tools - # The BuildTools version used by your project - - build-tools-25.0.2 + - build-tools-26.0.2 # The SDK version used to compile your project - - android-25 + - android-21 + - android-26 # Additional components - extra-google-google_play_services - extra-google-m2repository - extra-android-m2repository - - addon-google_apis-google-19 + - addon-google_apis-google-26 # Specify at least one system image, # if you need to run emulator(s) during your tests - - sys-img-armeabi-v7a-android-19 - - sys-img-x86-android-17 + - sys-img-armeabi-v7a-android-21 # Emulator Management: Create, Start and Wait before_script: - - echo no | android create avd --force -n test -t android-19 --abi armeabi-v7a + - echo no | android create avd --force -n test -t android-21 --abi armeabi-v7a - emulator -avd test -no-skin -no-audio -no-window & - android-wait-for-emulator - adb shell input keyevent 82 & diff --git a/app/build.gradle b/app/build.gradle index 411c052..39511b0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -14,24 +14,22 @@ repositories { maven { url 'https://maven.fabric.io/public' } } -apply plugin: 'com.neenbedankt.android-apt' - android { - compileSdkVersion 25 - buildToolsVersion '25.0.2' + compileSdkVersion 26 + buildToolsVersion '26.0.2' defaultConfig { applicationId 'com.blogspot.e_kanivets.moneytracker' minSdkVersion 17 - targetSdkVersion 25 - versionCode 20 - versionName '1.8.3' + targetSdkVersion 26 + versionCode 21 + versionName '1.8.5' } signingConfigs { releaseConfig { - storeFile file('mt_keystore.jks'); - storePassword('moneytracker'); + storeFile file('mt_keystore.jks') + storePassword('moneytracker') keyAlias 'moneytracker' - keyPassword 'moneytracker'; + keyPassword 'moneytracker' } } buildTypes { @@ -64,23 +62,25 @@ dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile('com.crashlytics.sdk.android:crashlytics:2.6.5@aar') { - transitive = true; + transitive = true } - compile 'com.android.support:support-v4:25.1.0' - compile 'com.android.support:appcompat-v7:25.1.0' - compile 'com.android.support:design:25.1.0' - - compile 'com.jakewharton:butterknife:7.0.1' // View annotation bindings + compile 'com.android.support:support-v4:26.1.0' + compile 'com.android.support:appcompat-v7:26.1.0' + compile 'com.android.support:design:26.1.0' + compile 'com.jakewharton:butterknife:8.5.1' // View annotation bindings + annotationProcessor 'com.jakewharton:butterknife-compiler:8.5.1' // ButterKnife compiler compile 'com.google.dagger:dagger:2.0.1' // Dependency injection tool compile 'com.github.PhilJay:MPAndroidChart:v2.2.4' // Charts compile 'com.jakewharton.timber:timber:4.1.2' // Advanced logging tool + compile 'com.android.support.constraint:constraint-layout:1.0.2' + compile 'com.dropbox.core:dropbox-core-sdk:3.0.5' // Dropbox Core API testCompile 'junit:junit:4.12' testCompile 'org.mockito:mockito-core:2.0.43-beta' androidTestCompile 'com.crittercism.dexmaker:dexmaker:1.4' androidTestCompile 'com.crittercism.dexmaker:dexmaker-dx:1.4' androidTestCompile 'com.crittercism.dexmaker:dexmaker-mockito:1.4' - apt 'com.google.dagger:dagger-compiler:2.0.1' + annotationProcessor 'com.google.dagger:dagger-compiler:2.0.1' provided 'org.glassfish:javax.annotation:10.0-b28' } diff --git a/app/libs/dropbox-android-sdk-1.6.3.jar b/app/libs/dropbox-android-sdk-1.6.3.jar deleted file mode 100644 index 1a0ee36..0000000 Binary files a/app/libs/dropbox-android-sdk-1.6.3.jar and /dev/null differ diff --git a/app/libs/json_simple-1.1.jar b/app/libs/json_simple-1.1.jar deleted file mode 100644 index f395f41..0000000 Binary files a/app/libs/json_simple-1.1.jar and /dev/null differ diff --git a/app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/data/AccountRepoTest.java b/app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/data/AccountRepoTest.java index cb2f27e..0a620ad 100644 --- a/app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/data/AccountRepoTest.java +++ b/app/src/androidTest/java/com/blogspot/e_kanivets/moneytracker/repo/data/AccountRepoTest.java @@ -40,13 +40,16 @@ public void testGetTable() throws Exception { } public void testContentValues() throws Exception { - Account account = new Account(-1, "title1", 100, "NON", 30); + Account account = new Account(-1, "title1", 100, "NON", 30, 0, false, 0); ContentValues expected = new ContentValues(); expected.put(DbHelper.TITLE_COLUMN, "title1"); expected.put(DbHelper.CUR_SUM_COLUMN, 100L); expected.put(DbHelper.CURRENCY_COLUMN, "NON"); expected.put(DbHelper.DECIMALS_COLUMN, 30L); + expected.put(DbHelper.GOAL_COLUMN, 0.0); + expected.put(DbHelper.ARCHIVED_COLUMN, false); + expected.put(DbHelper.COLOR_COLUMN, 0); ContentValues actual = repo.contentValues(account); @@ -71,7 +74,7 @@ public void testGetListFromCursor() throws Exception { Mockito.when(mockCursor.getString(4)).thenReturn("NON"); List expected = new ArrayList<>(); - expected.add(new Account(1, "title", 100, "NON", 0)); + expected.add(new Account(1, "title", 100, "NON", 0, 0, false, 0)); assertEquals(expected, repo.getListFromCursor(mockCursor)); diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5e3b6ca..918dcf1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -86,7 +86,12 @@ android:label="@string/title_activity_about" android:screenOrientation="portrait" android:theme="@style/Theme.Default" /> - + + + \ No newline at end of file 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 index 4f250fc..59c0960 100644 --- 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 @@ -6,10 +6,10 @@ import com.blogspot.e_kanivets.moneytracker.R; import com.blogspot.e_kanivets.moneytracker.activity.base.BaseBackActivity; -import butterknife.Bind; +import butterknife.BindView; public class AboutActivity extends BaseBackActivity { - @Bind(R.id.tv_about) + @BindView(R.id.tv_about) TextView tvAbout; @Override diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/ReportActivity.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/ReportActivity.java index f13327b..3332d6a 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/ReportActivity.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/ReportActivity.java @@ -23,7 +23,7 @@ import javax.inject.Inject; -import butterknife.Bind; +import butterknife.BindView; public class ReportActivity extends BaseBackActivity { @SuppressWarnings("unused") @@ -43,9 +43,9 @@ public class ReportActivity extends BaseBackActivity { private ShortSummaryPresenter shortSummaryPresenter; - @Bind(R.id.spinner_currency) + @BindView(R.id.spinner_currency) AppCompatSpinner spinnerCurrency; - @Bind(R.id.exp_list_view) + @BindView(R.id.exp_list_view) ExpandableListView expandableListView; @Override 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 294e218..d8d8c50 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 @@ -73,7 +73,7 @@ private void setupDefaultAccountPref() { ListPreference defaultAccountPref = (ListPreference) findPreference(getString(R.string.pref_default_account)); defaultAccountPref.setOnPreferenceChangeListener(preferenceChangeListener); - List accountList = accountController.readAll(); + List accountList = accountController.readActiveAccounts(); defaultAccountPref.setEntries(getEntries(accountList)); defaultAccountPref.setEntryValues(getEntryValues(accountList)); diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/account/AccountsActivity.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/account/AccountsActivity.java index 15307a0..6f5e624 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/account/AccountsActivity.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/account/AccountsActivity.java @@ -2,11 +2,8 @@ import android.content.Intent; import android.support.v7.app.AppCompatActivity; -import android.view.ContextMenu; import android.view.Menu; import android.view.MenuItem; -import android.view.View; -import android.widget.AdapterView; import android.widget.ListView; import com.blogspot.e_kanivets.moneytracker.R; @@ -18,8 +15,9 @@ import javax.inject.Inject; -import butterknife.Bind; +import butterknife.BindView; import butterknife.OnClick; +import butterknife.OnItemClick; public class AccountsActivity extends BaseBackActivity { @SuppressWarnings("unused") @@ -27,13 +25,14 @@ public class AccountsActivity extends BaseBackActivity { private static final int REQUEST_ADD_ACCOUNT = 1; private static final int REQUEST_TRANSFER = 2; + private static final int REQUEST_EDIT_ACCOUNT = 3; @Inject AccountController accountController; private AccountsSummaryPresenter summaryPresenter; - @Bind(R.id.list_view) + @BindView(R.id.list_view) ListView listView; @Override @@ -77,26 +76,11 @@ public boolean onOptionsItemSelected(MenuItem item) { } } - @Override - public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) { - super.onCreateContextMenu(menu, v, menuInfo); - getMenuInflater().inflate(R.menu.menu_account, menu); - } - - @Override - public boolean onContextItemSelected(MenuItem item) { - AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo(); - - switch (item.getItemId()) { - case R.id.delete: - // Minus one because of list view's header view - accountController.delete(accountController.readAll().get(info.position - 1)); - update(); - setResult(RESULT_OK); - return true; - default: - return super.onContextItemSelected(item); - } + @OnItemClick(R.id.list_view) + public void onAccountClick(int position) { + Intent intent = new Intent(this, EditAccountActivity.class); + intent.putExtra(EditAccountActivity.KEY_ACCOUNT, accountController.readAll().get(position - 1)); + startActivityForResult(intent, REQUEST_EDIT_ACCOUNT); } public void makeTransfer() { @@ -127,6 +111,11 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { setResult(RESULT_OK); break; + case REQUEST_EDIT_ACCOUNT: + update(); + setResult(RESULT_OK); + break; + default: break; } diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/account/AddAccountActivity.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/account/AddAccountActivity.java index be7e969..e885ac2 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/account/AddAccountActivity.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/account/AddAccountActivity.java @@ -20,7 +20,7 @@ import javax.inject.Inject; -import butterknife.Bind; +import butterknife.BindView; public class AddAccountActivity extends BaseBackActivity { @SuppressWarnings("unused") @@ -33,13 +33,13 @@ public class AddAccountActivity extends BaseBackActivity { private IValidator accountValidator; - @Bind(R.id.content) + @BindView(R.id.content) View contentView; - @Bind(R.id.et_title) + @BindView(R.id.et_title) EditText etTitle; - @Bind(R.id.et_init_sum) + @BindView(R.id.et_init_sum) EditText etInitSum; - @Bind(R.id.spinner) + @BindView(R.id.spinner) AppCompatSpinner spinner; @Override @@ -97,7 +97,11 @@ private boolean addAccount() { String title = etTitle.getText().toString().trim(); double initSum = Double.parseDouble(etInitSum.getText().toString().trim()); String currency = (String) spinner.getSelectedItem(); - return accountController.create(new Account(title, initSum, currency)) != null; + double goal = 0; + int color = 0; + + Account account = new Account(-1, title, initSum, currency, goal, false, color); + return accountController.create(account) != null; } else { return false; } diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/account/EditAccountActivity.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/account/EditAccountActivity.java new file mode 100644 index 0000000..2860d54 --- /dev/null +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/account/EditAccountActivity.java @@ -0,0 +1,139 @@ +package com.blogspot.e_kanivets.moneytracker.activity.account; + +import android.app.AlertDialog; +import android.content.DialogInterface; +import android.support.design.widget.TextInputLayout; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.EditText; + +import com.blogspot.e_kanivets.moneytracker.R; +import com.blogspot.e_kanivets.moneytracker.activity.base.BaseBackActivity; +import com.blogspot.e_kanivets.moneytracker.controller.data.AccountController; +import com.blogspot.e_kanivets.moneytracker.entity.data.Account; + +import javax.inject.Inject; + +import butterknife.BindView; +import butterknife.OnClick; + +public class EditAccountActivity extends BaseBackActivity { + + public static final String KEY_ACCOUNT = "key_account"; + + @Inject + AccountController accountController; + + private Account account; + + @BindView(R.id.til_title) + TextInputLayout tilTitle; + @BindView(R.id.et_title) + EditText etTitle; + @BindView(R.id.et_goal) + EditText etGoal; + @BindView(R.id.view_color) + View viewColor; + + @Override + protected int getContentViewId() { + return R.layout.activity_edit_account; + } + + @Override + protected boolean initData() { + getAppComponent().inject(EditAccountActivity.this); + account = getIntent().getParcelableExtra(KEY_ACCOUNT); + return account != null && super.initData(); + } + + @Override + protected void initViews() { + super.initViews(); + + etTitle.setText(account.getTitle()); + etGoal.setText(Double.toString(account.getGoal())); + viewColor.setBackgroundColor(account.getColor()); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + if (account.isArchived()) { + getMenuInflater().inflate(R.menu.menu_archived_account, menu); + } else { + getMenuInflater().inflate(R.menu.menu_account, menu); + } + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.action_archive: + archive(); + return true; + + case R.id.action_restore: + restore(); + return true; + + case R.id.action_delete: + delete(); + return true; + + default: + return super.onOptionsItemSelected(item); + } + } + + @OnClick(R.id.fabDone) + void done() { + String title = etTitle.getText().toString().trim(); + + if (title.isEmpty()) { + tilTitle.setError(getString(R.string.field_cant_be_empty)); + } else { + Account newAccount = new Account(account.getId(), title, account.getCurSum(), + account.getCurrency(), account.getGoal(), account.isArchived(), account.getColor()); + boolean updated = accountController.update(newAccount) != null; + if (updated) { + setResult(RESULT_OK); + finish(); + } + } + } + + private void archive() { + if (account.equals(accountController.readDefaultAccount())) { + showToast(R.string.cant_archive_default_account); + } else { + accountController.archive(account); + setResult(RESULT_OK); + finish(); + } + } + + private void restore() { + accountController.restore(account); + setResult(RESULT_OK); + finish(); + } + + private void delete() { + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setTitle(R.string.delete_account_title); + builder.setMessage(R.string.delete_account_message); + builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + accountController.delete(account); + setResult(RESULT_OK); + finish(); + } + }); + builder.setNegativeButton(android.R.string.cancel, null); + builder.show(); + } + +} diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/account/TransferActivity.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/account/TransferActivity.java index ce3dd17..668fb73 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/account/TransferActivity.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/account/TransferActivity.java @@ -22,7 +22,7 @@ import javax.inject.Inject; -import butterknife.Bind; +import butterknife.BindView; public class TransferActivity extends BaseBackActivity { @SuppressWarnings("unused") @@ -37,15 +37,15 @@ public class TransferActivity extends BaseBackActivity { private List accountList; - @Bind(R.id.content) + @BindView(R.id.content) View contentView; - @Bind(R.id.spinner_from) + @BindView(R.id.spinner_from) AppCompatSpinner spinnerFrom; - @Bind(R.id.spinner_to) + @BindView(R.id.spinner_to) AppCompatSpinner spinnerTo; - @Bind(R.id.et_from_amount) + @BindView(R.id.et_from_amount) EditText etFromAmount; - @Bind(R.id.et_to_amount) + @BindView(R.id.et_to_amount) EditText etToAmount; @Override @@ -57,7 +57,7 @@ protected int getContentViewId() { protected boolean initData() { boolean result = super.initData(); getAppComponent().inject(TransferActivity.this); - accountList = accountController.readAll(); + accountList = accountController.readActiveAccounts(); return result; } diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/base/BaseDrawerActivity.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/base/BaseDrawerActivity.java index 045cf04..b581b2f 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/base/BaseDrawerActivity.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/base/BaseDrawerActivity.java @@ -18,7 +18,7 @@ import com.blogspot.e_kanivets.moneytracker.activity.exchange_rate.ExchangeRatesActivity; import com.blogspot.e_kanivets.moneytracker.util.AnswersProxy; -import butterknife.Bind; +import butterknife.BindView; /** * Base implementation of {@link android.support.v7.app.AppCompatActivity} to encapsulate Navigation @@ -35,9 +35,9 @@ public abstract class BaseDrawerActivity extends BaseActivity private static final int REQUEST_IMPORT_EXPORT = 4; protected static final int REQUEST_BACKUP = 5; - @Bind(R.id.drawer_layout) + @BindView(R.id.drawer_layout) DrawerLayout drawer; - @Bind(R.id.nav_view) + @BindView(R.id.nav_view) protected NavigationView navigationView; protected abstract void update(); diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/charts/ChartsActivity.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/charts/ChartsActivity.java index e64041a..918cb11 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/charts/ChartsActivity.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/charts/ChartsActivity.java @@ -23,7 +23,7 @@ import javax.inject.Inject; -import butterknife.Bind; +import butterknife.BindView; public class ChartsActivity extends BaseBackActivity { @@ -34,9 +34,9 @@ public class ChartsActivity extends BaseBackActivity { @Inject CurrencyController currencyController; - @Bind(R.id.tabs) + @BindView(R.id.tabs) TabLayout tabLayout; - @Bind(R.id.view_pager) + @BindView(R.id.view_pager) ViewPager viewPager; @Override diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/charts/fragment/GraphFragment.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/charts/fragment/GraphFragment.java index bb598f8..b8ef013 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/charts/fragment/GraphFragment.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/charts/fragment/GraphFragment.java @@ -14,7 +14,7 @@ import com.github.mikephil.charting.charts.BarChart; import com.github.mikephil.charting.data.BarData; -import butterknife.Bind; +import butterknife.BindView; import butterknife.ButterKnife; /** @@ -31,7 +31,7 @@ public class GraphFragment extends Fragment { @Nullable private String noDataText; - @Bind(R.id.bar_chart) + @BindView(R.id.bar_chart) BarChart barChart; public GraphFragment() { diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/charts/fragment/SummaryFragment.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/charts/fragment/SummaryFragment.java index 30c57ce..509eab1 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/charts/fragment/SummaryFragment.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/charts/fragment/SummaryFragment.java @@ -12,7 +12,7 @@ import com.blogspot.e_kanivets.moneytracker.adapter.MonthSummaryAdapter; import com.blogspot.e_kanivets.moneytracker.report.chart.IMonthReport; -import butterknife.Bind; +import butterknife.BindView; import butterknife.ButterKnife; /** @@ -26,7 +26,7 @@ public class SummaryFragment extends Fragment { @Nullable private IMonthReport monthReport; - @Bind(R.id.list_view) + @BindView(R.id.list_view) ListView listView; public SummaryFragment() { diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/exchange_rate/AddExchangeRateActivity.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/exchange_rate/AddExchangeRateActivity.java index 926eb36..c24cb85 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/exchange_rate/AddExchangeRateActivity.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/exchange_rate/AddExchangeRateActivity.java @@ -23,7 +23,7 @@ import javax.inject.Inject; -import butterknife.Bind; +import butterknife.BindView; public class AddExchangeRateActivity extends BaseBackActivity { @SuppressWarnings("unused") @@ -44,15 +44,15 @@ public class AddExchangeRateActivity extends BaseBackActivity { @Nullable private ExchangeRatePair exchangeRatePair; - @Bind(R.id.content) + @BindView(R.id.content) View contentView; - @Bind(R.id.spinner_from_currency) + @BindView(R.id.spinner_from_currency) AppCompatSpinner spinnerFromCurrency; - @Bind(R.id.spinner_to_currency) + @BindView(R.id.spinner_to_currency) AppCompatSpinner spinnerToCurrency; - @Bind(R.id.et_buy) + @BindView(R.id.et_buy) EditText etBuy; - @Bind(R.id.et_sell) + @BindView(R.id.et_sell) EditText etSell; @Override diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/exchange_rate/ExchangeRatesActivity.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/exchange_rate/ExchangeRatesActivity.java index 4c2e7bf..3628eaa 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/exchange_rate/ExchangeRatesActivity.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/exchange_rate/ExchangeRatesActivity.java @@ -22,7 +22,7 @@ import javax.inject.Inject; -import butterknife.Bind; +import butterknife.BindView; import butterknife.OnClick; import butterknife.OnItemClick; @@ -37,7 +37,7 @@ public class ExchangeRatesActivity extends BaseBackActivity { private List exchangeRateList; - @Bind(R.id.list_view) + @BindView(R.id.list_view) ListView listView; @Override 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 9d59c04..2eb9d3e 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 @@ -13,33 +13,32 @@ import com.blogspot.e_kanivets.moneytracker.controller.BackupController; import com.blogspot.e_kanivets.moneytracker.controller.PreferenceController; import com.blogspot.e_kanivets.moneytracker.util.AnswersProxy; -import com.dropbox.client2.DropboxAPI; -import com.dropbox.client2.android.AndroidAuthSession; -import com.dropbox.client2.session.AppKeyPair; +import com.dropbox.core.DbxRequestConfig; +import com.dropbox.core.android.Auth; +import com.dropbox.core.v2.DbxClientV2; import java.util.List; import javax.inject.Inject; -import butterknife.Bind; +import butterknife.BindView; import butterknife.OnClick; import butterknife.OnItemClick; import timber.log.Timber; public class BackupActivity extends BaseBackActivity { private static final String APP_KEY = "5lqugcckdy9y6lj"; - private static final String APP_SECRET = "psbu50k9713u68j"; @Inject PreferenceController preferenceController; @Inject BackupController backupController; - private DropboxAPI dbApi; + private DbxClientV2 dbClient; - @Bind(R.id.btn_backup_now) + @BindView(R.id.btn_backup_now) View btnBackupNow; - @Bind(R.id.list_view) + @BindView(R.id.list_view) ListView listView; @Override @@ -51,14 +50,11 @@ protected int getContentViewId() { protected boolean initData() { getAppComponent().inject(BackupActivity.this); - AppKeyPair appKeys = new AppKeyPair(APP_KEY, APP_SECRET); String accessToken = preferenceController.readDropboxAccessToken(); - - AndroidAuthSession session = new AndroidAuthSession(appKeys); - dbApi = new DropboxAPI<>(session); - if (accessToken == null) dbApi.getSession().startOAuth2Authentication(BackupActivity.this); + if (accessToken == null) Auth.startOAuth2Authentication(BackupActivity.this, APP_KEY); else { - dbApi.getSession().setOAuth2AccessToken(accessToken); + DbxRequestConfig config = new DbxRequestConfig("open_money_tracker"); + dbClient = new DbxClientV2(config, accessToken); fetchBackups(); } @@ -75,11 +71,9 @@ protected void initViews() { protected void onResume() { super.onResume(); - if (dbApi.getSession().authenticationSuccessful()) { + if (Auth.getOAuth2Token() != null) { try { - // Required to complete auth, sets the access token on the session - dbApi.getSession().finishAuthentication(); - preferenceController.writeDropboxAccessToken(dbApi.getSession().getOAuth2AccessToken()); + preferenceController.writeDropboxAccessToken(Auth.getOAuth2Token()); btnBackupNow.setEnabled(true); fetchBackups(); } catch (IllegalStateException e) { @@ -92,7 +86,7 @@ protected void onResume() { public void backupNow() { AnswersProxy.get().logButton("Make Backup"); startProgress(getString(R.string.making_backup)); - backupController.makeBackup(dbApi, new BackupController.OnBackupListener() { + backupController.makeBackup(dbClient, new BackupController.OnBackupListener() { @Override public void onBackupSuccess() { AnswersProxy.get().logEvent("Backup success"); @@ -137,7 +131,7 @@ public void onClick(DialogInterface dialog, int which) { private void restoreBackup(final String backupName) { startProgress(getString(R.string.restoring_backup)); - backupController.restoreBackup(dbApi, backupName, new BackupController.OnRestoreBackupListener() { + backupController.restoreBackup(dbClient, backupName, new BackupController.OnRestoreBackupListener() { @Override public void onRestoreSuccess() { AnswersProxy.get().logEvent("Restore Success"); @@ -178,7 +172,7 @@ public void onRestoreFailure(String reason) { private void fetchBackups() { startProgress(getString(R.string.fetching_backups)); - backupController.fetchBackups(dbApi, new BackupController.OnFetchBackupListListener() { + backupController.fetchBackups(dbClient, new BackupController.OnFetchBackupListListener() { @Override public void onBackupsFetched(@NonNull List backupList) { if (isFinishing()) return; @@ -193,7 +187,7 @@ public void onBackupsFetched(@NonNull List backupList) { private void logout() { preferenceController.writeDropboxAccessToken(null); - dbApi.getSession().startOAuth2Authentication(BackupActivity.this); + Auth.startOAuth2Authentication(BackupActivity.this, APP_KEY); btnBackupNow.setEnabled(false); } } 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 e80c1a9..0549f63 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 @@ -24,7 +24,7 @@ import javax.inject.Inject; -import butterknife.Bind; +import butterknife.BindView; import butterknife.OnClick; import timber.log.Timber; @@ -36,7 +36,7 @@ public class ImportExportActivity extends BaseBackActivity { @Inject ExportController exportController; - @Bind(R.id.et_import_data) + @BindView(R.id.et_import_data) EditText etImportData; @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 4cf77a3..1e04b51 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 @@ -45,7 +45,7 @@ import javax.inject.Inject; -import butterknife.Bind; +import butterknife.BindView; import butterknife.OnClick; /** @@ -84,19 +84,19 @@ public class AddRecordActivity extends BaseBackActivity { private AddRecordUiDecorator uiDecorator; private CategoryAutoCompleter autoCompleter; - @Bind(R.id.content) + @BindView(R.id.content) View contentView; - @Bind(R.id.tv_date) + @BindView(R.id.tv_date) TextView tvDate; - @Bind(R.id.tv_time) + @BindView(R.id.tv_time) TextView tvTime; - @Bind(R.id.et_title) + @BindView(R.id.et_title) EditText etTitle; - @Bind(R.id.et_category) + @BindView(R.id.et_category) AutoCompleteTextView etCategory; - @Bind(R.id.et_price) + @BindView(R.id.et_price) EditText etPrice; - @Bind(R.id.spinner_account) + @BindView(R.id.spinner_account) AppCompatSpinner spinnerAccount; @Override @@ -114,7 +114,7 @@ protected boolean initData() { record = getIntent().getParcelableExtra(KEY_RECORD); mode = (Mode) getIntent().getSerializableExtra(KEY_MODE); type = getIntent().getIntExtra(KEY_TYPE, -1); - accountList = accountController.readAll(); + accountList = accountController.readActiveAccounts(); if (mode == Mode.MODE_EDIT && record != null) timestamp = record.getTime(); else timestamp = new Date().getTime(); diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/record/MainActivity.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/record/MainActivity.java index 14aec7e..57dc083 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/record/MainActivity.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/record/MainActivity.java @@ -28,13 +28,12 @@ import com.blogspot.e_kanivets.moneytracker.ui.presenter.ShortSummaryPresenter; import com.blogspot.e_kanivets.moneytracker.util.AnswersProxy; -import java.util.ArrayList; import java.util.Collections; import java.util.List; import javax.inject.Inject; -import butterknife.Bind; +import butterknife.BindView; import butterknife.OnClick; import butterknife.OnItemClick; @@ -64,9 +63,9 @@ public class MainActivity extends BaseDrawerActivity { private ShortSummaryPresenter summaryPresenter; - @Bind(R.id.list_view) + @BindView(R.id.list_view) ListView listView; - @Bind(R.id.spinner_period) + @BindView(R.id.spinner_period) PeriodSpinner spinner; TextView tvDefaultAccountTitle; @@ -101,7 +100,7 @@ protected void initViews() { if (preferenceController.checkRateDialog()) showAppRateDialog(); - registerForContextMenu(listView); + //registerForContextMenu(listView); View summaryView = summaryPresenter.create(true); listView.addHeaderView(summaryView); diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/adapter/AccountAdapter.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/adapter/AccountAdapter.java index 3e5d827..c6afbb2 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/adapter/AccountAdapter.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/adapter/AccountAdapter.java @@ -17,7 +17,7 @@ import javax.inject.Inject; -import butterknife.Bind; +import butterknife.BindView; import butterknife.ButterKnife; /** @@ -37,6 +37,7 @@ public class AccountAdapter extends BaseAdapter { private int whiteGreen; private int red; private int green; + private int grey; @SuppressWarnings("deprecation") public AccountAdapter(Context context, List accounts) { @@ -49,6 +50,7 @@ public AccountAdapter(Context context, List accounts) { whiteGreen = context.getResources().getColor(R.color.white_green); red = context.getResources().getColor(R.color.red); green = context.getResources().getColor(R.color.green); + grey = context.getResources().getColor(R.color.grey_inactive); } @Override @@ -82,7 +84,11 @@ public View getView(final int position, View convertView, ViewGroup parent) { Account account = accounts.get(position); - convertView.setBackgroundColor(account.getFullSum() >= 0.0 ? whiteGreen : whiteRed); + if (account.isArchived()) { + convertView.setBackgroundColor(grey); + } else { + convertView.setBackgroundColor(account.getFullSum() >= 0.0 ? whiteGreen : whiteRed); + } viewHolder.tvCurSum.setTextColor(account.getFullSum() >= 0.0 ? green : red); viewHolder.tvCurrency.setTextColor(account.getFullSum() >= 0.0 ? green : red); @@ -95,11 +101,11 @@ public View getView(final int position, View convertView, ViewGroup parent) { } public static class ViewHolder { - @Bind(R.id.tv_title) + @BindView(R.id.tv_title) TextView tvTitle; - @Bind(R.id.tv_cur_sum) + @BindView(R.id.tv_cur_sum) TextView tvCurSum; - @Bind(R.id.tv_currency) + @BindView(R.id.tv_currency) TextView tvCurrency; public ViewHolder(View view) { 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 234c1bc..d0b0e11 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 @@ -15,7 +15,7 @@ import java.util.ArrayList; import java.util.List; -import butterknife.Bind; +import butterknife.BindView; import butterknife.ButterKnife; /** @@ -98,9 +98,9 @@ protected void publishResults(CharSequence constraint, FilterResults results) { } public static class ViewHolder { - @Bind(R.id.tv_category) + @BindView(R.id.tv_category) TextView tvCategory; - @Bind(R.id.iv_cancel) + @BindView(R.id.iv_cancel) View ivCancel; public ViewHolder(View view) { diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/adapter/ExchangeRateAdapter.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/adapter/ExchangeRateAdapter.java index 97be2aa..ff1ef4d 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/adapter/ExchangeRateAdapter.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/adapter/ExchangeRateAdapter.java @@ -17,7 +17,7 @@ import javax.inject.Inject; -import butterknife.Bind; +import butterknife.BindView; import butterknife.ButterKnife; /** @@ -79,13 +79,13 @@ public View getView(final int position, View convertView, ViewGroup parent) { } public static class ViewHolder { - @Bind(R.id.tv_from_currency) + @BindView(R.id.tv_from_currency) TextView tvFromCurrency; - @Bind(R.id.tv_to_currency) + @BindView(R.id.tv_to_currency) TextView tvToCurrency; - @Bind(R.id.tv_amount_buy) + @BindView(R.id.tv_amount_buy) TextView tvAmountBuy; - @Bind(R.id.tv_amount_sell) + @BindView(R.id.tv_amount_sell) TextView tvAmountSell; public ViewHolder(View view) { diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/adapter/ExpandableListReportAdapter.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/adapter/ExpandableListReportAdapter.java index 4018db3..2961e15 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/adapter/ExpandableListReportAdapter.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/adapter/ExpandableListReportAdapter.java @@ -17,7 +17,7 @@ import javax.inject.Inject; -import butterknife.Bind; +import butterknife.BindView; import butterknife.ButterKnife; /** @@ -95,9 +95,9 @@ private void customizeView(View view, Map values, boolean groupV } public static class ViewHolder { - @Bind(R.id.tv_category) + @BindView(R.id.tv_category) TextView tvCategory; - @Bind(R.id.tv_total) + @BindView(R.id.tv_total) TextView tvTotal; public ViewHolder(View view) { diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/adapter/MonthSummaryAdapter.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/adapter/MonthSummaryAdapter.java index 553b0f7..a156d05 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/adapter/MonthSummaryAdapter.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/adapter/MonthSummaryAdapter.java @@ -18,7 +18,7 @@ import javax.inject.Inject; -import butterknife.Bind; +import butterknife.BindView; import butterknife.ButterKnife; /** @@ -99,11 +99,11 @@ public View getView(int position, View convertView, ViewGroup parent) { } public static class ViewHolder { - @Bind(R.id.tv_month) + @BindView(R.id.tv_month) TextView tvMonth; - @Bind(R.id.tv_total_income) + @BindView(R.id.tv_total_income) TextView tvTotalIncome; - @Bind(R.id.tv_total_expense) + @BindView(R.id.tv_total_expense) TextView tvTotalExpense; public ViewHolder(View view) { diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/adapter/RecordAdapter.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/adapter/RecordAdapter.java index 95d684e..5c8a31e 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/adapter/RecordAdapter.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/adapter/RecordAdapter.java @@ -17,7 +17,7 @@ import javax.inject.Inject; -import butterknife.Bind; +import butterknife.BindView; import butterknife.ButterKnife; /** @@ -96,17 +96,17 @@ public View getView(final int position, View convertView, ViewGroup parent) { } public static class ViewHolder { - @Bind(R.id.container) + @BindView(R.id.container) View container; - @Bind(R.id.tv_date_and_time) + @BindView(R.id.tv_date_and_time) TextView tvDateAndTime; - @Bind(R.id.tv_price) + @BindView(R.id.tv_price) TextView tvPrice; - @Bind(R.id.tv_title) + @BindView(R.id.tv_title) TextView tvTitle; - @Bind(R.id.tv_category) + @BindView(R.id.tv_category) TextView tvCategory; - @Bind(R.id.tv_currency) + @BindView(R.id.tv_currency) TextView tvCurrency; public ViewHolder(View view) { diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/BackupController.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/BackupController.java index 9d0bddd..9364329 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/BackupController.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/BackupController.java @@ -4,10 +4,10 @@ import android.support.annotation.NonNull; import android.support.annotation.Nullable; -import com.dropbox.client2.DropboxAPI; -import com.dropbox.client2.android.AndroidAuthSession; -import com.dropbox.client2.exception.DropboxException; -import com.dropbox.client2.exception.DropboxUnlinkedException; +import com.dropbox.core.DbxException; +import com.dropbox.core.v2.DbxClientV2; +import com.dropbox.core.v2.files.FileMetadata; +import com.dropbox.core.v2.files.Metadata; import java.io.File; import java.io.FileInputStream; @@ -33,19 +33,19 @@ public BackupController(FormatController formatController, String filesDir) { this.filesDir = filesDir; } - public void makeBackup(@NonNull DropboxAPI dbApi, + public void makeBackup(@NonNull DbxClientV2 dbClient, @Nullable OnBackupListener listener) { FileInputStream fileInputStream = readAppDb(); long fileLength = readAppDbFileLength(); if (fileInputStream == null) return; - DropboxBackupAsyncTask asyncTask = new DropboxBackupAsyncTask(dbApi, + DropboxBackupAsyncTask asyncTask = new DropboxBackupAsyncTask(dbClient, formatController.formatDateAndTime(System.currentTimeMillis()), fileInputStream, fileLength, listener); asyncTask.execute(); } - public void restoreBackup(@NonNull DropboxAPI dbApi, @NonNull String backupName, + public void restoreBackup(@NonNull DbxClientV2 dbClient, @NonNull String backupName, @Nullable final OnRestoreBackupListener listener) { final File file = new File(getRestoreFileName()); FileOutputStream outputStream = null; @@ -59,7 +59,7 @@ public void restoreBackup(@NonNull DropboxAPI dbApi, @NonNul if (listener != null) listener.onRestoreFailure(null); } else { final FileOutputStream finalOutputStream = outputStream; - DropboxRestoreBackupAsyncTask asyncTask = new DropboxRestoreBackupAsyncTask(dbApi, + DropboxRestoreBackupAsyncTask asyncTask = new DropboxRestoreBackupAsyncTask(dbClient, backupName, outputStream, new OnRestoreBackupListener() { @Override public void onRestoreSuccess() { @@ -88,9 +88,9 @@ public void onRestoreFailure(String reason) { } } - public void fetchBackups(@NonNull DropboxAPI dbApi, + public void fetchBackups(@NonNull DbxClientV2 dbClient, @Nullable OnFetchBackupListListener listener) { - DropboxFetchBackupListAsyncTask asyncTask = new DropboxFetchBackupListAsyncTask(dbApi, listener); + DropboxFetchBackupListAsyncTask asyncTask = new DropboxFetchBackupListAsyncTask(dbClient, listener); asyncTask.execute(); } @@ -125,8 +125,8 @@ private String getRestoreFileName() { return getAppDbFileName() + ".restore"; } - private class DropboxBackupAsyncTask extends AsyncTask { - private DropboxAPI dbApi; + private static class DropboxBackupAsyncTask extends AsyncTask { + private DbxClientV2 dbClient; private String fileName; private FileInputStream fileInputStream; private long fileLength; @@ -134,10 +134,10 @@ private class DropboxBackupAsyncTask extends AsyncTask { @Nullable private OnBackupListener listener; - public DropboxBackupAsyncTask(DropboxAPI dbApi, String fileName, + public DropboxBackupAsyncTask(@NonNull DbxClientV2 dbClient, String fileName, FileInputStream fileInputStream, long fileLength, @Nullable OnBackupListener listener) { - this.dbApi = dbApi; + this.dbClient = dbClient; this.fileName = fileName; this.fileInputStream = fileInputStream; this.fileLength = fileLength; @@ -146,17 +146,17 @@ public DropboxBackupAsyncTask(DropboxAPI dbApi, String fileN @Override protected String doInBackground(Void... params) { - DropboxAPI.Entry response = null; + FileMetadata info = null; + try { - response = dbApi.putFile(fileName, fileInputStream, fileLength, null, null); - } catch (DropboxUnlinkedException e) { + info = dbClient.files().upload("/" + fileName).uploadAndFinish(fileInputStream); + } catch (DbxException e) { e.printStackTrace(); - return OnBackupListener.ERROR_AUTHENTICATION; - } catch (DropboxException e) { + } catch (IOException e) { e.printStackTrace(); } - if (response == null) return null; + if (info == null) return null; else return OnBackupListener.SUCCESS; } @@ -170,32 +170,31 @@ protected void onPostExecute(String result) { } } - private class DropboxFetchBackupListAsyncTask extends AsyncTask, List> { - private DropboxAPI dbApi; + private static class DropboxFetchBackupListAsyncTask extends AsyncTask, List> { + private DbxClientV2 dbClient; @Nullable private OnFetchBackupListListener listener; - public DropboxFetchBackupListAsyncTask(DropboxAPI dbApi, + public DropboxFetchBackupListAsyncTask(DbxClientV2 dbClient, @Nullable OnFetchBackupListListener listener) { - this.dbApi = dbApi; + this.dbClient = dbClient; this.listener = listener; } @Override protected List doInBackground(Void... params) { - List entryList = new ArrayList<>(); + List entryList = new ArrayList<>(); List backupList = new ArrayList<>(); try { - DropboxAPI.Entry entry = dbApi.metadata("/", -1, null, true, null); - entryList = entry.contents; - } catch (DropboxException e) { + entryList = dbClient.files().listFolder("").getEntries(); + } catch (DbxException e) { e.printStackTrace(); } - for (DropboxAPI.Entry entry : entryList) { - backupList.add(entry.fileName()); + for (Metadata entry : entryList) { + backupList.add(entry.getName()); } return backupList; @@ -211,18 +210,18 @@ protected void onPostExecute(List backupList) { } } - private class DropboxRestoreBackupAsyncTask extends AsyncTask { - private DropboxAPI dbApi; + private static class DropboxRestoreBackupAsyncTask extends AsyncTask { + private DbxClientV2 dbClient; private String backupName; private FileOutputStream outputStream; @Nullable private OnRestoreBackupListener listener; - public DropboxRestoreBackupAsyncTask(DropboxAPI dbApi, String backupName, + public DropboxRestoreBackupAsyncTask(DbxClientV2 dbClient, String backupName, FileOutputStream outputStream, @Nullable OnRestoreBackupListener listener) { - this.dbApi = dbApi; + this.dbClient = dbClient; this.backupName = backupName; this.outputStream = outputStream; this.listener = listener; @@ -230,13 +229,10 @@ public DropboxRestoreBackupAsyncTask(DropboxAPI dbApi, Strin @Override protected String doInBackground(Void... params) { - DropboxAPI.DropboxFileInfo info = null; + FileMetadata info = null; try { - info = dbApi.getFile(backupName, null, outputStream, null); - } catch (DropboxUnlinkedException e) { - e.printStackTrace(); - return OnRestoreBackupListener.ERROR_AUTHENTICATION; - } catch (DropboxException e) { + info = dbClient.files().download("/" + backupName).download(outputStream); + } catch (DbxException | IOException e) { e.printStackTrace(); } 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 1fe5206..75cf0db 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 @@ -1,5 +1,6 @@ package com.blogspot.e_kanivets.moneytracker.controller.data; +import android.support.annotation.NonNull; import android.support.annotation.Nullable; import com.blogspot.e_kanivets.moneytracker.controller.PreferenceController; @@ -9,6 +10,7 @@ import com.blogspot.e_kanivets.moneytracker.entity.data.Transfer; import com.blogspot.e_kanivets.moneytracker.repo.base.IRepo; +import java.util.ArrayList; import java.util.List; /** @@ -28,6 +30,32 @@ public AccountController(IRepo accountRepo, PreferenceController prefer this.preferenceController = preferenceController; } + @NonNull + public List readActiveAccounts() { + List result = new ArrayList<>(); + + for (Account account : readAll()) { + if (!account.isArchived()) { + result.add(account); + } + } + + return result; + } + + @NonNull + public List readArchivedAccounts() { + List result = new ArrayList<>(); + + for (Account account : readAll()) { + if (!account.isArchived()) { + result.add(account); + } + } + + return result; + } + public boolean recordAdded(@Nullable Record record) { if (record == null || record.getAccount() == null) return false; @@ -112,6 +140,26 @@ public Account readDefaultAccount() { } } + public boolean archive(@Nullable Account account) { + if (account == null) { + return false; + } else { + account.archive(); + update(account); + return true; + } + } + + public boolean restore(@Nullable Account account) { + if (account == null) { + return false; + } else { + account.restore(); + update(account); + return true; + } + } + private Account getFirstAccount() { List accountList = readAll(); if (accountList.size() == 0) return null; diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/external/ImportController.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/external/ImportController.java index f0737e4..d21bb0d 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/external/ImportController.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/external/ImportController.java @@ -55,7 +55,7 @@ public List importRecordsFromCsv(@Nullable String csv) { else type = Record.TYPE_INCOME; Category category = new Category(categoryName); - Account account = new Account(-1, "MOCK", -1, currency, 0); + Account account = new Account(-1, "MOCK", -1, currency, 0, -1, false, 0); Record record = new Record(time, type, title, category, Math.abs(price), account, currency); Record createdRecord = recordController.create(record); diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/di/AppComponent.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/di/AppComponent.java index 8396fe0..6d31fa5 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/di/AppComponent.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/di/AppComponent.java @@ -1,5 +1,6 @@ package com.blogspot.e_kanivets.moneytracker.di; +import com.blogspot.e_kanivets.moneytracker.activity.account.EditAccountActivity; import com.blogspot.e_kanivets.moneytracker.activity.charts.ChartsActivity; import com.blogspot.e_kanivets.moneytracker.activity.external.BackupActivity; import com.blogspot.e_kanivets.moneytracker.activity.external.ImportExportActivity; @@ -78,4 +79,6 @@ public interface AppComponent { void inject(ExchangeRateAdapter exchangeRateAdapter); void inject(MonthSummaryAdapter monthSummaryAdapter); + + void inject(EditAccountActivity editAccountActivity); } diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/entity/data/Account.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/entity/data/Account.java index 4b6d7b4..fb782c3 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/entity/data/Account.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/entity/data/Account.java @@ -16,21 +16,32 @@ public class Account extends BaseEntity implements Parcelable { private long curSum; private final String currency; private long decimals; + private double goal; + private boolean archived; + private int color; - public Account(long id, String title, long curSum, String currency, long decimals) { + public Account(long id, String title, long curSum, String currency, long decimals, double goal, + boolean archived, int color) { this.id = id; this.title = title; this.curSum = curSum; this.currency = currency; this.decimals = decimals; + this.goal = goal; + this.archived = archived; + this.color = color; } - public Account(String title, double curSum, String currency) { - this.id = -1; + public Account(long id, String title, double curSum, String currency, double goal, + boolean archived, int color) { + this.id = id; this.title = title; this.currency = currency; this.curSum = getLong(curSum); this.decimals = getDecimal(curSum); + this.goal = goal; + this.archived = archived; + this.color = color; } protected Account(Parcel in) { @@ -39,6 +50,9 @@ protected Account(Parcel in) { curSum = in.readLong(); currency = in.readString(); decimals = in.readLong(); + goal = in.readDouble(); + archived = in.readByte() != 0; + color = in.readInt(); } public static final Creator CREATOR = new Creator() { @@ -73,6 +87,18 @@ public String getCurrency() { return currency; } + public double getGoal() { + return goal; + } + + public boolean isArchived() { + return archived; + } + + public int getColor() { + return color; + } + public void put(double amount) { double sum = curSum + decimals / 100.0; sum += amount; @@ -87,6 +113,14 @@ public void take(double amount) { decimals = getDecimal(sum); } + public void archive() { + archived = true; + } + + public void restore() { + archived = false; + } + @SuppressWarnings("SimplifiableIfStatement") @Override public boolean equals(Object o) { @@ -96,7 +130,10 @@ public boolean equals(Object o) { && equals(this.title, account.getTitle()) && this.curSum == account.getCurSum() && equals(this.currency, account.getCurrency()) - && this.decimals == account.decimals; + && this.decimals == account.decimals + && this.goal == account.goal + && this.archived == account.archived + && this.color == account.color; } else return false; } @@ -109,7 +146,10 @@ public String toString() { sb.append("title = ").append(title).append(", "); sb.append("curSum = ").append(curSum).append(", "); sb.append("currency = ").append(currency).append(", "); - sb.append("decimals = ").append(decimals); + sb.append("decimals = ").append(decimals).append(", "); + sb.append("goal = ").append(goal).append(", "); + sb.append("archived = ").append(archived).append(", "); + sb.append("color = ").append(color); sb.append("}"); return sb.toString(); @@ -127,5 +167,8 @@ public void writeToParcel(Parcel dest, int flags) { dest.writeLong(curSum); dest.writeString(currency); dest.writeLong(decimals); + dest.writeDouble(goal); + dest.writeByte((byte) (archived ? 1 : 0)); + dest.writeInt(color); } } diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/entity/data/Record.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/entity/data/Record.java index 03b29e1..47e8d09 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/entity/data/Record.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/entity/data/Record.java @@ -32,7 +32,7 @@ public Record(long id, long time, int type, String title, long categoryId, long this.title = title; this.category = new Category(categoryId, null); this.price = price; - this.account = new Account(accountId, null, -1, null, 0); + this.account = new Account(accountId, null, -1, null, 0, -1, false, -1); this.currency = currency; this.decimals = decimals; } diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/DbHelper.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/DbHelper.java index 09df2b5..8c6a38a 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/DbHelper.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/DbHelper.java @@ -15,7 +15,7 @@ public class DbHelper extends SQLiteOpenHelper { /* DB_VERSION = 1 */ public static final String DB_NAME = "database"; - public static final int DB_VERSION = 4; + public static final int DB_VERSION = 5; public static final String TABLE_RECORDS = "records"; public static final String TABLE_CATEGORIES = "categories"; @@ -54,6 +54,11 @@ public class DbHelper extends SQLiteOpenHelper { public static final String DECIMALS_FROM_COLUMN = "decimals_from"; public static final String DECIMALS_TO_COLUMN = "decimals_to"; + /* DB_VERSION = 5 */ + public static final String GOAL_COLUMN = "goal"; + public static final String ARCHIVED_COLUMN = "archived"; + public static final String COLOR_COLUMN = "color"; + public DbHelper(Context context) { super(context, DB_NAME, null, DB_VERSION); } @@ -63,7 +68,8 @@ public void onCreate(SQLiteDatabase db) { //createDbVersion1(db); //createDbVersion2(db); //createDbVersion3(db); - createDbVersion4(db); + //createDbVersion4(db); + createDbVersion5(db); } @Override @@ -133,6 +139,25 @@ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.setTransactionSuccessful(); db.endTransaction(); } + + if (oldVersion < 5) { + db.beginTransaction(); + + /* Add goal column to the accounts table */ + db.execSQL("ALTER TABLE " + TABLE_ACCOUNTS + " ADD COLUMN " + + GOAL_COLUMN + " REAL;"); + + /* Add archived flag column to the accounts table */ + db.execSQL("ALTER TABLE " + TABLE_ACCOUNTS + " ADD COLUMN " + + ARCHIVED_COLUMN + " INTEGER;"); + + /* Add color column to the accounts table */ + db.execSQL("ALTER TABLE " + TABLE_ACCOUNTS + " ADD COLUMN " + + COLOR_COLUMN + " INTEGER;"); + + db.setTransactionSuccessful(); + db.endTransaction(); + } } @SuppressWarnings("unused") @@ -258,6 +283,48 @@ private void createDbVersion4(SQLiteDatabase db) { insertDefaultAccount(db); } + private void createDbVersion5(SQLiteDatabase db) { + db.execSQL("CREATE TABLE " + TABLE_RECORDS + "(" + + ID_COLUMN + " INTEGER PRIMARY KEY AUTOINCREMENT," + + TIME_COLUMN + " INTEGER," + + TYPE_COLUMN + " INTEGER," + + TITLE_COLUMN + " TEXT," + + CATEGORY_ID_COLUMN + " INTEGER," + + PRICE_COLUMN + " INTEGER," + + ACCOUNT_ID_COLUMN + " INTEGER," + + CURRENCY_COLUMN + " TEXT," + + DECIMALS_COLUMN + " INTEGER);"); + + db.execSQL("CREATE TABLE " + TABLE_CATEGORIES + "(" + + ID_COLUMN + " INTEGER PRIMARY KEY AUTOINCREMENT," + + NAME_COLUMN + " TEXT" + ");"); + + db.execSQL("CREATE TABLE " + TABLE_ACCOUNTS + "(" + + ID_COLUMN + " INTEGER PRIMARY KEY AUTOINCREMENT," + + CREATED_AT_COLUMN + " INTEGER," + + TITLE_COLUMN + " TEXT," + + CUR_SUM_COLUMN + " INTEGER," + + CURRENCY_COLUMN + " TEXT," + + DECIMALS_COLUMN + " INTEGER," + + GOAL_COLUMN + " REAL," + + ARCHIVED_COLUMN + " INTEGER," + + COLOR_COLUMN + " INTEGER);"); + + db.execSQL("CREATE TABLE " + TABLE_TRANSFERS + "(" + + ID_COLUMN + " INTEGER PRIMARY KEY AUTOINCREMENT," + + TIME_COLUMN + " INTEGER," + + FROM_ACCOUNT_ID_COLUMN + " INTEGER," + + TO_ACCOUNT_ID_COLUMN + " INTEGER," + + FROM_AMOUNT_COLUMN + " INTEGER," + + TO_AMOUNT_COLUMN + " INTEGER," + + DECIMALS_FROM_COLUMN + " INTEGER," + + DECIMALS_TO_COLUMN + " INTEGER);"); + + createRatesTable(db); + + insertDefaultAccount(db); + } + private void createRatesTable(SQLiteDatabase db) { db.execSQL("CREATE TABLE " + TABLE_RATES + "(" + ID_COLUMN + " INTEGER PRIMARY KEY AUTOINCREMENT," diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/data/AccountRepo.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/data/AccountRepo.java index 9200d1a..d657525 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/data/AccountRepo.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/repo/data/AccountRepo.java @@ -43,6 +43,9 @@ protected ContentValues contentValues(@Nullable Account account) { contentValues.put(DbHelper.CUR_SUM_COLUMN, account.getCurSum()); contentValues.put(DbHelper.CURRENCY_COLUMN, account.getCurrency()); contentValues.put(DbHelper.DECIMALS_COLUMN, account.getDecimals()); + contentValues.put(DbHelper.GOAL_COLUMN, account.getGoal()); + contentValues.put(DbHelper.ARCHIVED_COLUMN, account.isArchived()); + contentValues.put(DbHelper.COLOR_COLUMN, account.getColor()); return contentValues; } @@ -60,6 +63,9 @@ protected List getListFromCursor(@Nullable Cursor cursor) { int curSumColIndex = cursor.getColumnIndex(DbHelper.CUR_SUM_COLUMN); int currencyColIndex = cursor.getColumnIndex(DbHelper.CURRENCY_COLUMN); int decimalsColIndex = cursor.getColumnIndex(DbHelper.DECIMALS_COLUMN); + int goalColIndex = cursor.getColumnIndex(DbHelper.GOAL_COLUMN); + int archivedIndex = cursor.getColumnIndex(DbHelper.ARCHIVED_COLUMN); + int colorIndex = cursor.getColumnIndex(DbHelper.COLOR_COLUMN); do { // Read a account from DB @@ -67,7 +73,10 @@ protected List getListFromCursor(@Nullable Cursor cursor) { cursor.getString(titleColIndex), cursor.getLong(curSumColIndex), cursor.getString(currencyColIndex), - cursor.getLong(decimalsColIndex)); + cursor.getLong(decimalsColIndex), + cursor.getDouble(goalColIndex), + cursor.getInt(archivedIndex) != 0, + cursor.getInt(colorIndex)); accountList.add(account); } while (cursor.moveToNext()); @@ -75,4 +84,4 @@ protected List getListFromCursor(@Nullable Cursor cursor) { return accountList; } -} \ No newline at end of file +} diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/ui/ChangeDateDialog.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/ui/ChangeDateDialog.java index d963355..eb11fb0 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/ui/ChangeDateDialog.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/ui/ChangeDateDialog.java @@ -10,7 +10,7 @@ import java.util.Calendar; import java.util.Date; -import butterknife.Bind; +import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; @@ -24,7 +24,7 @@ public class ChangeDateDialog extends AlertDialog{ private Date date; private OnDateChangedListener listener; - @Bind(R.id.datePicker) + @BindView(R.id.datePicker) DatePicker datePicker; public ChangeDateDialog(Context context, Date date, OnDateChangedListener listener) { diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/ui/presenter/AccountsSummaryPresenter.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/ui/presenter/AccountsSummaryPresenter.java index d628b55..858cb31 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/ui/presenter/AccountsSummaryPresenter.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/ui/presenter/AccountsSummaryPresenter.java @@ -22,7 +22,7 @@ import javax.inject.Inject; -import butterknife.Bind; +import butterknife.BindView; import butterknife.ButterKnife; /** @@ -116,11 +116,11 @@ public void update() { } public static class ViewHolder { - @Bind(R.id.spinner_currency) + @BindView(R.id.spinner_currency) AppCompatSpinner spinnerCurrency; - @Bind(R.id.tv_total) + @BindView(R.id.tv_total) TextView tvTotal; - @Bind(R.id.tv_currency) + @BindView(R.id.tv_currency) TextView tvCurrency; public ViewHolder(View view) { diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/ui/presenter/ShortSummaryPresenter.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/ui/presenter/ShortSummaryPresenter.java index f6af61c..85213e1 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/ui/presenter/ShortSummaryPresenter.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/ui/presenter/ShortSummaryPresenter.java @@ -15,7 +15,7 @@ import javax.inject.Inject; -import butterknife.Bind; +import butterknife.BindView; import butterknife.ButterKnife; /** @@ -81,13 +81,13 @@ public void update(IRecordReport report, String currency, List ratesNeed } public static class ViewHolder { - @Bind(R.id.tv_period) + @BindView(R.id.tv_period) TextView tvPeriod; - @Bind(R.id.tv_total_income) + @BindView(R.id.tv_total_income) TextView tvTotalIncome; - @Bind(R.id.tv_total_expense) + @BindView(R.id.tv_total_expense) TextView tvTotalExpense; - @Bind(R.id.tv_total) + @BindView(R.id.tv_total) TextView tvTotal; public ViewHolder(View view) { diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/util/validator/AccountValidator.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/util/validator/AccountValidator.java index 0402299..0d095ed 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/util/validator/AccountValidator.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/util/validator/AccountValidator.java @@ -10,7 +10,7 @@ import com.blogspot.e_kanivets.moneytracker.R; import com.blogspot.e_kanivets.moneytracker.entity.data.Account; -import butterknife.Bind; +import butterknife.BindView; import butterknife.ButterKnife; /** @@ -25,15 +25,15 @@ public class AccountValidator implements IValidator { @NonNull private final Context context; - @Bind(R.id.til_title) + @BindView(R.id.til_title) TextInputLayout tilTitle; - @Bind(R.id.et_title) + @BindView(R.id.et_title) EditText etTitle; - @Bind(R.id.til_init_sum) + @BindView(R.id.til_init_sum) TextInputLayout tilInitSum; - @Bind(R.id.et_init_sum) + @BindView(R.id.et_init_sum) EditText etInitSum; - @Bind(R.id.spinner) + @BindView(R.id.spinner) AppCompatSpinner spinner; public AccountValidator(@NonNull Context context, @NonNull View view) { diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/util/validator/ExchangeRatePairValidator.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/util/validator/ExchangeRatePairValidator.java index c7c99af..d9db7dc 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/util/validator/ExchangeRatePairValidator.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/util/validator/ExchangeRatePairValidator.java @@ -11,7 +11,7 @@ import com.blogspot.e_kanivets.moneytracker.R; import com.blogspot.e_kanivets.moneytracker.entity.ExchangeRatePair; -import butterknife.Bind; +import butterknife.BindView; import butterknife.ButterKnife; /** @@ -27,17 +27,17 @@ public class ExchangeRatePairValidator implements IValidator { @NonNull private final Context context; - @Bind(R.id.spinner_from_currency) + @BindView(R.id.spinner_from_currency) AppCompatSpinner spinnerFromCurrency; - @Bind(R.id.spinner_to_currency) + @BindView(R.id.spinner_to_currency) AppCompatSpinner spinnerToCurrency; - @Bind(R.id.til_buy) + @BindView(R.id.til_buy) TextInputLayout tilBuy; - @Bind(R.id.et_buy) + @BindView(R.id.et_buy) EditText etBuy; - @Bind(R.id.til_sell) + @BindView(R.id.til_sell) TextInputLayout tilSell; - @Bind(R.id.et_sell) + @BindView(R.id.et_sell) EditText etSell; public ExchangeRatePairValidator(@NonNull Context context, @NonNull View view) { diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/util/validator/RecordValidator.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/util/validator/RecordValidator.java index c04a6e3..3a842a9 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/util/validator/RecordValidator.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/util/validator/RecordValidator.java @@ -11,7 +11,7 @@ import com.blogspot.e_kanivets.moneytracker.R; import com.blogspot.e_kanivets.moneytracker.entity.data.Record; -import butterknife.Bind; +import butterknife.BindView; import butterknife.ButterKnife; /** @@ -26,19 +26,19 @@ public class RecordValidator implements IValidator { @NonNull private final Context context; - @Bind(R.id.til_title) + @BindView(R.id.til_title) TextInputLayout tilTitle; - @Bind(R.id.et_title) + @BindView(R.id.et_title) EditText etTitle; - @Bind(R.id.til_category) + @BindView(R.id.til_category) TextInputLayout tilCategory; - @Bind(R.id.et_category) + @BindView(R.id.et_category) EditText etCategory; - @Bind(R.id.til_price) + @BindView(R.id.til_price) TextInputLayout tilPrice; - @Bind(R.id.et_price) + @BindView(R.id.et_price) EditText etPrice; - @Bind(R.id.spinner_account) + @BindView(R.id.spinner_account) AppCompatSpinner spinnerAccount; public RecordValidator(@NonNull Context context, @NonNull View view) { diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/util/validator/TransferValidator.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/util/validator/TransferValidator.java index 4bfa153..ea01edf 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/util/validator/TransferValidator.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/util/validator/TransferValidator.java @@ -11,7 +11,7 @@ import com.blogspot.e_kanivets.moneytracker.R; import com.blogspot.e_kanivets.moneytracker.entity.data.Transfer; -import butterknife.Bind; +import butterknife.BindView; import butterknife.ButterKnife; /** @@ -27,17 +27,17 @@ public class TransferValidator implements IValidator { @NonNull private final Context context; - @Bind(R.id.spinner_from) + @BindView(R.id.spinner_from) AppCompatSpinner spinnerFrom; - @Bind(R.id.spinner_to) + @BindView(R.id.spinner_to) AppCompatSpinner spinnerTo; - @Bind(R.id.til_from_amount) + @BindView(R.id.til_from_amount) TextInputLayout tilFromAmount; - @Bind(R.id.et_from_amount) + @BindView(R.id.et_from_amount) EditText etFromAmount; - @Bind(R.id.til_to_amount) + @BindView(R.id.til_to_amount) TextInputLayout tilToAmount; - @Bind(R.id.et_to_amount) + @BindView(R.id.et_to_amount) EditText etToAmount; public TransferValidator(@NonNull Context context, @NonNull View view) { diff --git a/app/src/main/res/drawable/ic_archive.xml b/app/src/main/res/drawable/ic_archive.xml new file mode 100644 index 0000000..5d57493 --- /dev/null +++ b/app/src/main/res/drawable/ic_archive.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_restore.xml b/app/src/main/res/drawable/ic_restore.xml new file mode 100644 index 0000000..41ad517 --- /dev/null +++ b/app/src/main/res/drawable/ic_restore.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/activity_edit_account.xml b/app/src/main/res/layout/activity_edit_account.xml new file mode 100644 index 0000000..2d7da6c --- /dev/null +++ b/app/src/main/res/layout/activity_edit_account.xml @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/menu/menu_account.xml b/app/src/main/res/menu/menu_account.xml index 48feed5..bd5e9df 100644 --- a/app/src/main/res/menu/menu_account.xml +++ b/app/src/main/res/menu/menu_account.xml @@ -1,6 +1,11 @@ - + + + android:id="@+id/action_archive" + android:icon="@drawable/ic_archive" + android:title="@string/archive" + app:showAsAction="ifRoom" /> + \ No newline at end of file diff --git a/app/src/main/res/menu/menu_archived_account.xml b/app/src/main/res/menu/menu_archived_account.xml new file mode 100644 index 0000000..2e411c5 --- /dev/null +++ b/app/src/main/res/menu/menu_archived_account.xml @@ -0,0 +1,16 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 0104498..f6aaa2c 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -1,6 +1,7 @@ #ffffff + #E0E0E0 #f1f8e9 #8bc34a diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b7287f6..dad4aa4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -123,7 +123,13 @@ Can\'t create a record in future. At least one account is needed. - - Hello blank fragment + Edit Account + Color + Goal + Restore + Archive + You can\'t archive a default account. + Delete account + Are you sure about deleting this account? It can\'t be restored after. diff --git a/app/src/test/java/com/blogspot/e_kanivets/moneytracker/controller/CurrencyControllerTest.java b/app/src/test/java/com/blogspot/e_kanivets/moneytracker/controller/CurrencyControllerTest.java index fc6ae90..ff13b04 100644 --- a/app/src/test/java/com/blogspot/e_kanivets/moneytracker/controller/CurrencyControllerTest.java +++ b/app/src/test/java/com/blogspot/e_kanivets/moneytracker/controller/CurrencyControllerTest.java @@ -26,7 +26,7 @@ public void testReadDefaultCurrency() throws Exception { Mockito.when(accountMock.readDefaultAccount()).thenReturn(null); assertEquals("NON", currencyController.readDefaultCurrency()); - Account account = new Account(1, "a1", 100, "ACM", 0); + Account account = new Account(1, "a1", 100, "ACM", 0, 0, false, 0); Mockito.when(prefsMock.readDefaultCurrency()).thenReturn(null); Mockito.when(accountMock.readDefaultAccount()).thenReturn(account); assertEquals(account.getCurrency(), currencyController.readDefaultCurrency()); diff --git a/app/src/test/java/com/blogspot/e_kanivets/moneytracker/controller/data/AccountControllerTest.java b/app/src/test/java/com/blogspot/e_kanivets/moneytracker/controller/data/AccountControllerTest.java index 5556aa7..6a38f35 100644 --- a/app/src/test/java/com/blogspot/e_kanivets/moneytracker/controller/data/AccountControllerTest.java +++ b/app/src/test/java/com/blogspot/e_kanivets/moneytracker/controller/data/AccountControllerTest.java @@ -52,7 +52,7 @@ public void tearDown() throws Exception { @Test public void testRecordAdded() throws Exception { Category category = new Category(1, "c1"); - Account account = new Account(1, "a1", 100, "NON", 0); + Account account = new Account(1, "a1", 100, "NON", 0, 0, false, 0); repo.create(account); Record income = new Record(1, 1, Record.TYPE_INCOME, "income", category, 10, account, @@ -78,7 +78,7 @@ public void testRecordAdded() throws Exception { @Test public void testRecordDeleted() throws Exception { Category category = new Category(1, "c1"); - Account account = new Account(1, "a1", 100, "NON", 0); + Account account = new Account(1, "a1", 100, "NON", 0, 0, false, 0); repo.create(account); Record income = new Record(1, 1, Record.TYPE_INCOME, "income", category, 10, account, @@ -104,7 +104,7 @@ public void testRecordDeleted() throws Exception { @Test public void testRecordUpdated() throws Exception { Category category = new Category(1, "c1"); - Account account = new Account(1, "a1", 100, "NON", 0); + Account account = new Account(1, "a1", 100, "NON", 0, 0, false, 0); repo.create(account); Record incomeOld = new Record(1, 1, Record.TYPE_INCOME, "income", category, 10, account, @@ -139,8 +139,8 @@ public void testRecordUpdated() throws Exception { @Test public void testTransferDone() throws Exception { - Account account1 = new Account(1, "a1", 100, "NON", 0); - Account account2 = new Account(2, "a2", 0, "NON", 0); + Account account1 = new Account(1, "a1", 100, "NON", 0, 0, false, 0); + Account account2 = new Account(2, "a2", 0, "NON", 0, 0, false, 0); repo.create(account1); repo.create(account2); @@ -174,11 +174,11 @@ public void testTransferDone() throws Exception { public void testReadDefaultAccount() throws Exception { assertNull(accountController.readDefaultAccount()); - Account account1 = new Account(1, "a1", 100, "NON", 0); + Account account1 = new Account(1, "a1", 100, "NON", 0, 0, false, 0); repo.create(account1); assertEquals(account1, accountController.readDefaultAccount()); - Account account2 = new Account(2, "a2", 0, "NON", 0); + Account account2 = new Account(2, "a2", 0, "NON", 0, 0, false, 0); repo.create(account2); assertEquals(account1, accountController.readDefaultAccount()); 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 d9a4020..274299f 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 @@ -60,7 +60,7 @@ public void testCreate() throws Exception { Mockito.verify(accountMock, Mockito.times(0)).recordAdded(null); Category category = new Category(1, "c1"); - Account account = new Account(1, "a1", 100, "NON", 0); + Account account = new Account(1, "a1", 100, "NON", 0, 0, false, 0); Record record = new Record(1, 1, Record.TYPE_INCOME, "r1", category, 10, account, "NON"); Mockito.when(categoryMock.readOrCreate(category.getName())).thenReturn(category); @@ -78,7 +78,7 @@ public void testUpdate() throws Exception { Mockito.verify(accountMock, Mockito.times(0)).recordAdded(null); Category category = new Category(1, "c1"); - Account account = new Account(1, "a1", 100, "NON", 0); + Account account = new Account(1, "a1", 100, "NON", 0, 0, false, 0); Record record = new Record(1, 1, Record.TYPE_INCOME, "r1", category, 10, account, "NON"); Mockito.when(categoryMock.readOrCreate(category.getName())).thenReturn(category); @@ -95,7 +95,7 @@ public void testDelete() throws Exception { Mockito.verify(accountMock, Mockito.times(0)).recordDeleted(null); Category category = new Category(1, "c1"); - Account account = new Account(1, "a1", 100, "NON", 0); + Account account = new Account(1, "a1", 100, "NON", 0, 0, false, 0); Record record = new Record(1, 1, Record.TYPE_INCOME, "r1", category, 10, account, "NON"); assertFalse(recordController.delete(record)); @@ -112,7 +112,7 @@ public void testRead() throws Exception { assertNull(recordController.read(-1)); Category category = new Category(1, "c1"); - Account account = new Account(1, "a1", 100, "NON", 0); + Account account = new Account(1, "a1", 100, "NON", 0, 0, false, 0); Record recordNotFull = new Record(1, 1, Record.TYPE_INCOME, "r1", category.getId(), 10, account.getId(), "NON", 0); Record record = new Record(1, 1, Record.TYPE_INCOME, "r1", category, 10, account, "NON"); diff --git a/app/src/test/java/com/blogspot/e_kanivets/moneytracker/report/ReportTest.java b/app/src/test/java/com/blogspot/e_kanivets/moneytracker/report/ReportTest.java index 75116de..42deb1a 100644 --- a/app/src/test/java/com/blogspot/e_kanivets/moneytracker/report/ReportTest.java +++ b/app/src/test/java/com/blogspot/e_kanivets/moneytracker/report/ReportTest.java @@ -175,8 +175,8 @@ public void testGetSummary() throws Exception { List recordList = new ArrayList<>(); Category category = new Category(1, "category"); - Account account1 = new Account(1, "account1", 100, "UAH", 0); - Account account2 = new Account(2, "account2", 100, "USD", 0); + Account account1 = new Account(1, "account1", 100, "UAH", 0, 0, false, 0); + Account account2 = new Account(2, "account2", 100, "USD", 0, 0, false, 0); Record record1 = new Record(1, 0, Record.TYPE_INCOME, "1", category, 10, account2, "USD"); recordList.add(record1); @@ -220,8 +220,8 @@ private List getRecordList() { List recordList = new ArrayList<>(); Category category = new Category(1, "category"); - Account account1 = new Account(1, "account1", 100, "UAH", 0); - Account account2 = new Account(2, "account2", 100, "USD", 0); + Account account1 = new Account(1, "account1", 100, "UAH", 0, 0, false, 0); + Account account2 = new Account(2, "account2", 100, "USD", 0, 0, false, 0); Record record1 = new Record(1, 0, Record.TYPE_INCOME, "1", category, 10, account2, "USD"); recordList.add(record1); diff --git a/build.gradle b/build.gradle index 67cbb59..1535c90 100644 --- a/build.gradle +++ b/build.gradle @@ -1,9 +1,10 @@ buildscript { repositories { + google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.3' + classpath 'com.android.tools.build:gradle:3.0.1' classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4' classpath 'com.getkeepsafe.dexcount:dexcount-gradle-plugin:0.6.2' } @@ -11,8 +12,11 @@ buildscript { allprojects { repositories { + google() + jcenter() mavenCentral() maven { url 'https://oss.sonatype.org/content/repositories/snapshots/' } maven { url "https://jitpack.io" } + maven { url "https://maven.google.com" } } } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 50930a9..a9609a0 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Thu Jul 27 13:57:32 EEST 2017 +#Wed Nov 29 19:03:06 EET 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip