From f1952f50bbd409271905a00b1063a3f8395ff52c Mon Sep 17 00:00:00 2001 From: Evgenii Kanivets Date: Tue, 26 Jan 2016 18:36:51 +0200 Subject: [PATCH 01/16] [30m]. Refactor AppUtils. --- app/src/main/AndroidManifest.xml | 2 +- .../activity/NavDrawerActivity.java | 4 +- .../fragment/RecordsFragment.java | 10 +-- .../e_kanivets/moneytracker/model/Record.java | 4 +- .../e_kanivets/moneytracker/model/Report.java | 10 +-- .../moneytracker/ui/AppRateDialog.java | 11 ++- .../moneytracker/util/AppUtils.java | 89 ------------------- .../moneytracker/util/Constants.java | 29 +++--- .../e_kanivets/moneytracker/util/MTApp.java | 6 +- .../moneytracker/util/PrefUtils.java | 52 +++++++++++ 10 files changed, 88 insertions(+), 129 deletions(-) delete mode 100644 app/src/main/java/com/blogspot/e_kanivets/moneytracker/util/AppUtils.java create mode 100644 app/src/main/java/com/blogspot/e_kanivets/moneytracker/util/PrefUtils.java diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bb5a922..de17b09 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -8,7 +8,7 @@ parent, View view, int position, long break; } - AppUtils.writeUsedPeriod(getActivity(), position); + PrefUtils.writeUsedPeriod(position); update(); @@ -250,9 +250,7 @@ public void onGlobalLayout() { if (isFirst) { isFirst = false; listView.setSelection(listView.getCount() - 1); - if (AppUtils.checkRateDialog(getActivity())) { - showAppRateDialog(); - } + if (PrefUtils.checkRateDialog()) showAppRateDialog(); } } }); @@ -274,7 +272,7 @@ private void initActionBar() { Spinner spinner = (Spinner) customNav.findViewById(R.id.spinner_period); spinner.setAdapter(new ArrayAdapter<>(getActivity(), android.R.layout.simple_list_item_1, getResources().getStringArray(R.array.array_periods))); - spinner.setSelection(AppUtils.readUsedPeriod(getActivity())); + spinner.setSelection(PrefUtils.readUsedPeriod()); spinner.setOnItemSelectedListener(this); if (actionBar != null) { diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/model/Record.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/model/Record.java index 80a2c39..d92817f 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/model/Record.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/model/Record.java @@ -2,7 +2,7 @@ import com.blogspot.e_kanivets.moneytracker.controller.CategoryController; import com.blogspot.e_kanivets.moneytracker.helper.DbHelper; -import com.blogspot.e_kanivets.moneytracker.util.MTApp; +import com.blogspot.e_kanivets.moneytracker.util.MtApp; import java.io.Serializable; @@ -30,7 +30,7 @@ public Record(int id, long time, int type, String title, int categoryId, int pri this.price = price; this.accountId = accountId; - category = new CategoryController(new DbHelper(MTApp.get())).getCategoryById(categoryId); + category = new CategoryController(new DbHelper(MtApp.get())).getCategoryById(categoryId); } public int getId() { diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/model/Report.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/model/Report.java index 76845d7..c9942a8 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/model/Report.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/model/Report.java @@ -3,11 +3,9 @@ import android.util.Pair; import com.blogspot.e_kanivets.moneytracker.R; -import com.blogspot.e_kanivets.moneytracker.util.MTApp; +import com.blogspot.e_kanivets.moneytracker.util.MtApp; import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -110,11 +108,11 @@ private void fillSummaryReportList(int totalIncome, int totalExpense) { //Add summary row to list summaryReportList = new ArrayList>(); summaryReportList.add(new Pair( - MTApp.get().getResources().getString(R.string.total_incomes) + " :", totalIncome)); + MtApp.get().getResources().getString(R.string.total_incomes) + " :", totalIncome)); summaryReportList.add(new Pair( - MTApp.get().getResources().getString(R.string.total_expenses) + " :", totalExpense)); + MtApp.get().getResources().getString(R.string.total_expenses) + " :", totalExpense)); summaryReportList.add(new Pair( - MTApp.get().getResources().getString(R.string.total) + " :", totalExpense + totalIncome)); + MtApp.get().getResources().getString(R.string.total) + " :", totalExpense + totalIncome)); } private void fillRecordList(HashMap recordMap) { diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/ui/AppRateDialog.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/ui/AppRateDialog.java index 0c7ec74..1dd6f93 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/ui/AppRateDialog.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/ui/AppRateDialog.java @@ -9,11 +9,10 @@ import android.widget.Button; import com.blogspot.e_kanivets.moneytracker.R; -import com.blogspot.e_kanivets.moneytracker.util.AppUtils; +import com.blogspot.e_kanivets.moneytracker.util.PrefUtils; import com.blogspot.e_kanivets.moneytracker.util.Constants; public class AppRateDialog extends AlertDialog { - private Context context; public AppRateDialog(Context context) { @@ -36,8 +35,8 @@ protected void onCreate(Bundle savedInstanceState) { @Override public void onClick(View view) { context.startActivity(new Intent(Intent.ACTION_VIEW, - Uri.parse(Constants.GP_MARKET + Constants.APP_NAME))); - AppUtils.appRated(context); + Uri.parse(Constants.GP_MARKET + context.getPackageName()))); + PrefUtils.appRated(); dismiss(); } }); @@ -52,7 +51,7 @@ public void onClick(View view) { thanksButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - AppUtils.appRated(context); + PrefUtils.appRated(); dismiss(); } }); @@ -66,4 +65,4 @@ public void dismiss() { e.printStackTrace(); } } -} +} \ No newline at end of file diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/util/AppUtils.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/util/AppUtils.java deleted file mode 100644 index e579e7b..0000000 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/util/AppUtils.java +++ /dev/null @@ -1,89 +0,0 @@ -package com.blogspot.e_kanivets.moneytracker.util; - -import android.content.Context; -import android.content.SharedPreferences; -import android.graphics.Rect; -import android.util.DisplayMetrics; -import android.util.Log; -import android.view.View; - -/** - * Util class for application - * Created by eugene on 02/09/14. - */ -public class AppUtils { - - public static int scaleValue(Context context, int value) { - DisplayMetrics metrics = context.getResources().getDisplayMetrics(); - return (int)(value * (metrics.densityDpi / 320.0)); - } - - /* Dealing with SharedPreferences section */ - - public static void addLaunchCount(Context context) { - SharedPreferences preferences = context.getSharedPreferences(Constants.APP_NAME, Context.MODE_PRIVATE); - SharedPreferences.Editor editor = preferences.edit(); - editor.putInt(Constants.LAUNCH_COUNT, preferences.getInt(Constants.LAUNCH_COUNT, 0) + 1); - editor.apply(); - } - - public static boolean checkRateDialog(Context context) { - SharedPreferences preferences = context.getSharedPreferences(Constants.APP_NAME, Context.MODE_PRIVATE); - - boolean appRated = preferences.getBoolean(Constants.APP_RATED, false); - if(appRated) return false; - - int launchCount = preferences.getInt(Constants.LAUNCH_COUNT, 0); - if(launchCount % Constants.RATE_PERIOD == 0) { - return true; - } - else { - return false; - } - } - - public static void appRated(Context context) { - SharedPreferences preferences = context.getSharedPreferences(Constants.APP_NAME, Context.MODE_PRIVATE); - SharedPreferences.Editor editor = preferences.edit(); - editor.putBoolean(Constants.APP_RATED, true); - editor.apply(); - } - - public static void addContribution(Context context) { - SharedPreferences preferences = context.getSharedPreferences(Constants.APP_NAME, Context.MODE_PRIVATE); - SharedPreferences.Editor editor = preferences.edit(); - editor.putInt(Constants.CONTRIBUTION, preferences.getInt(Constants.CONTRIBUTION, 0) + 1); - editor.apply(); - } - - public static int getContribution(Context context) { - SharedPreferences preferences = context.getSharedPreferences(Constants.APP_NAME, Context.MODE_PRIVATE); - return preferences.getInt(Constants.CONTRIBUTION, 0); - } - - public static int readUsedPeriod(Context context) { - SharedPreferences preferences = context.getSharedPreferences(Constants.APP_NAME, Context.MODE_PRIVATE); - return preferences.getInt(Constants.KEY_USED_PERIOD, Constants.DEFAULT_USED_PERIOD); - } - - public static void writeUsedPeriod(Context context, int usedPeriod) { - SharedPreferences preferences = context.getSharedPreferences(Constants.APP_NAME, Context.MODE_PRIVATE); - SharedPreferences.Editor editor = preferences.edit(); - editor.putInt(Constants.KEY_USED_PERIOD, usedPeriod); - editor.apply(); - } - - public static boolean isKeyboardShown(View rootView) { - /* 128dp = 32dp * 4, minimum button height 32dp and generic 4 rows soft keyboard */ - final int SOFT_KEYBOARD_HEIGHT_DP_THRESHOLD = 128; - - Rect r = new Rect(); - rootView.getWindowVisibleDisplayFrame(r); - DisplayMetrics dm = rootView.getResources().getDisplayMetrics(); - /* heightDiff = rootView height - status bar height (r.top) - visible frame height (r.bottom - r.top) */ - int heightDiff = rootView.getBottom() - r.bottom; - /* Threshold size: dp to pixels, multiply with display density */ - - return heightDiff > SOFT_KEYBOARD_HEIGHT_DP_THRESHOLD * dm.density; - } -} diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/util/Constants.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/util/Constants.java index 39222eb..8fa18bb 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/util/Constants.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/util/Constants.java @@ -2,21 +2,22 @@ /** * Constants class. It's better to change it to interface. - * Created by eugene on 29/08/14. + * Created on 29/08/14. + * + * @author Evgenii Kanivets */ -public class Constants { - public static final String APP_NAME = "com.blogspot.e_kanivets.moneytracker"; - public static final String GP_MARKET = "market://details?id="; - public static final String APP_RATED = "app_rated"; - public static final String LAUNCH_COUNT = "launch_count"; - public static final int RATE_PERIOD = 5; - public static final String CONTRIBUTION = "contribution"; - public static final String KEY_USED_PERIOD = "key_used_period"; +public interface Constants { + String GP_MARKET = "market://details?id="; + String APP_RATED = "app_rated"; + String LAUNCH_COUNT = "launch_count"; + int RATE_PERIOD = 5; + String CONTRIBUTION = "contribution"; + String KEY_USED_PERIOD = "key_used_period"; - public static final int DEFAULT_USED_PERIOD = 1; + int DEFAULT_USED_PERIOD = 1; - public static final String TITLE_PARAM_NAME = "title"; - public static final String PRICE_PARAM_NAME = "price"; + String TITLE_PARAM_NAME = "title"; + String PRICE_PARAM_NAME = "price"; - public static final String DEFAULT_EXPORT_FILE_NAME = "money_tracker.csv"; -} + String DEFAULT_EXPORT_FILE_NAME = "money_tracker.csv"; +} \ No newline at end of file diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/util/MTApp.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/util/MTApp.java index 89d862e..6278242 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/util/MTApp.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/util/MTApp.java @@ -8,11 +8,11 @@ * * @author Evgenii Kanivets */ -public class MTApp extends Application { +public class MtApp extends Application { - private static MTApp mtApp; + private static MtApp mtApp; - public static MTApp get() { + public static MtApp get() { return mtApp; } diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/util/PrefUtils.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/util/PrefUtils.java new file mode 100644 index 0000000..ceac329 --- /dev/null +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/util/PrefUtils.java @@ -0,0 +1,52 @@ +package com.blogspot.e_kanivets.moneytracker.util; + +import android.content.Context; +import android.content.SharedPreferences; + +/** + * Util class for application. + * Created on 02/09/14. + * + * @author Evgenii Kanivets + */ +public class PrefUtils { + public static void addLaunchCount() { + SharedPreferences preferences = getDefaultPrefs(); + SharedPreferences.Editor editor = preferences.edit(); + editor.putInt(Constants.LAUNCH_COUNT, preferences.getInt(Constants.LAUNCH_COUNT, 0) + 1); + editor.apply(); + } + + public static boolean checkRateDialog() { + SharedPreferences preferences = getDefaultPrefs(); + + boolean appRated = preferences.getBoolean(Constants.APP_RATED, false); + if (appRated) return false; + + int launchCount = preferences.getInt(Constants.LAUNCH_COUNT, 0); + return launchCount % Constants.RATE_PERIOD == 0; + } + + public static void appRated() { + SharedPreferences preferences = getDefaultPrefs(); + SharedPreferences.Editor editor = preferences.edit(); + editor.putBoolean(Constants.APP_RATED, true); + editor.apply(); + } + + public static int readUsedPeriod() { + SharedPreferences preferences = getDefaultPrefs(); + return preferences.getInt(Constants.KEY_USED_PERIOD, Constants.DEFAULT_USED_PERIOD); + } + + public static void writeUsedPeriod(int usedPeriod) { + SharedPreferences preferences = getDefaultPrefs(); + SharedPreferences.Editor editor = preferences.edit(); + editor.putInt(Constants.KEY_USED_PERIOD, usedPeriod); + editor.apply(); + } + + private static SharedPreferences getDefaultPrefs() { + return MtApp.get().getSharedPreferences(MtApp.get().getPackageName(), Context.MODE_PRIVATE); + } +} \ No newline at end of file From 5af69fbc81cb0cfd9810291c14f6c26129bb23aa Mon Sep 17 00:00:00 2001 From: Evgenii Kanivets Date: Tue, 26 Jan 2016 18:52:57 +0200 Subject: [PATCH 02/16] #4[30m]. Add ButterKnife dependency. Create BaseActivity. Refactor AddAccountActivity. --- app/build.gradle | 1 + .../activity/AddAccountActivity.java | 35 ++++++--------- .../moneytracker/activity/BaseActivity.java | 45 +++++++++++++++++++ 3 files changed, 60 insertions(+), 21 deletions(-) create mode 100644 app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/BaseActivity.java diff --git a/app/build.gradle b/app/build.gradle index b1ff3e6..0d887ea 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -49,6 +49,7 @@ dependencies { compile 'com.android.support:appcompat-v7:23.0.0' compile 'junit:junit:4.12' compile 'org.mockito:mockito-core:2.0.2-beta' + compile 'com.jakewharton:butterknife:7.0.1' compile 'com.google.dagger:dagger:2.0.1' apt 'com.google.dagger:dagger-compiler:2.0.1' diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/AddAccountActivity.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/AddAccountActivity.java index fecbdca..c8ea7f3 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/AddAccountActivity.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/AddAccountActivity.java @@ -1,7 +1,5 @@ package com.blogspot.e_kanivets.moneytracker.activity; -import android.os.Bundle; -import android.support.v7.app.AppCompatActivity; import android.view.Menu; import android.view.MenuItem; import android.widget.EditText; @@ -10,20 +8,20 @@ import com.blogspot.e_kanivets.moneytracker.controller.AccountController; import com.blogspot.e_kanivets.moneytracker.helper.DbHelper; -public class AddAccountActivity extends AppCompatActivity { +import butterknife.Bind; + +public class AddAccountActivity extends BaseActivity { @SuppressWarnings("unused") private static final String TAG = "AddAccountActivity"; - private EditText etTitle; - private EditText etInitSum; + @Bind(R.id.et_title) + EditText etTitle; + @Bind(R.id.et_init_sum) + EditText etInitSum; @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_add_account); - - initViews(); - initActionBar(); + protected int getContentViewId() { + return R.layout.activity_add_account; } @Override @@ -36,10 +34,7 @@ public boolean onCreateOptionsMenu(Menu menu) { public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_done: - String title = etTitle.getText().toString(); - int initSum = Integer.parseInt(etInitSum.getText().toString()); - - new AccountController(new DbHelper(AddAccountActivity.this)).addAccount(title, initSum); + addAccount(); setResult(RESULT_OK); finish(); @@ -54,12 +49,10 @@ public boolean onOptionsItemSelected(MenuItem item) { } } - private void initViews() { - etTitle = (EditText) findViewById(R.id.et_title); - etInitSum = (EditText) findViewById(R.id.et_init_sum); - } + private void addAccount() { + String title = etTitle.getText().toString().trim(); + int initSum = Integer.parseInt(etInitSum.getText().toString().trim()); - private void initActionBar() { - if (getSupportActionBar() != null) getSupportActionBar().setCustomView(null); + new AccountController(new DbHelper(AddAccountActivity.this)).addAccount(title, initSum); } } \ No newline at end of file diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/BaseActivity.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/BaseActivity.java new file mode 100644 index 0000000..4f32c6b --- /dev/null +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/BaseActivity.java @@ -0,0 +1,45 @@ +package com.blogspot.e_kanivets.moneytracker.activity; + +import android.os.Bundle; +import android.support.annotation.LayoutRes; +import android.support.annotation.Nullable; +import android.support.annotation.StringRes; +import android.support.v7.app.AppCompatActivity; +import android.widget.Toast; + +import butterknife.ButterKnife; + +/** + * Base implementation of {@link android.support.v7.app.AppCompatActivity} to describe some common + * methods. + * Created on 1/26/16. + * + * @author Evgenii Kanivets + */ +public abstract class BaseActivity extends AppCompatActivity { + @SuppressWarnings("unused") + private static final String TAG = "BaseActivity"; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(getContentViewId()); + + initViews(); + } + + @LayoutRes + protected abstract int getContentViewId(); + + protected void initViews() { + ButterKnife.bind(BaseActivity.this); + } + + protected void showToast(String message) { + Toast.makeText(BaseActivity.this, message, Toast.LENGTH_SHORT).show(); + } + + protected void showToast(@StringRes int messageId) { + Toast.makeText(BaseActivity.this, messageId, Toast.LENGTH_SHORT).show(); + } +} \ No newline at end of file From f725ac93ee7a79e215b296518aa0995952dddbad Mon Sep 17 00:00:00 2001 From: Evgenii Kanivets Date: Tue, 26 Jan 2016 19:13:54 +0200 Subject: [PATCH 03/16] #4[30m]. Refactor AddExpenseActivity. --- .../activity/AddExpenseActivity.java | 144 +++++++++--------- .../moneytracker/activity/BaseActivity.java | 7 +- 2 files changed, 79 insertions(+), 72 deletions(-) diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/AddExpenseActivity.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/AddExpenseActivity.java index ebc0140..ac9aa68 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/AddExpenseActivity.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/AddExpenseActivity.java @@ -1,14 +1,11 @@ package com.blogspot.e_kanivets.moneytracker.activity; -import android.os.Bundle; -import android.support.v7.app.ActionBar; -import android.support.v7.app.AppCompatActivity; +import android.annotation.SuppressLint; import android.view.Menu; import android.view.MenuItem; import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.Spinner; -import android.widget.Toast; import com.blogspot.e_kanivets.moneytracker.R; import com.blogspot.e_kanivets.moneytracker.controller.AccountController; @@ -21,7 +18,9 @@ import java.util.Date; import java.util.List; -public class AddExpenseActivity extends AppCompatActivity { +import butterknife.Bind; + +public class AddExpenseActivity extends BaseActivity { @SuppressWarnings("unused") private static final String TAG = "AddExpenseActivity"; @@ -31,81 +30,40 @@ public class AddExpenseActivity extends AppCompatActivity { private Record record; private Mode mode; - private EditText etTitle; - private EditText etCategory; - private EditText etPrice; - private Spinner spinnerAccount; + @Bind(R.id.et_title) + EditText etTitle; + @Bind(R.id.et_category) + EditText etCategory; + @Bind(R.id.et_price) + EditText etPrice; + @Bind(R.id.spinner_account) + Spinner spinnerAccount; private RecordController recordController; private AccountController accountController; @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_add_record); - - recordController = new RecordController(new DbHelper(AddExpenseActivity.this)); - accountController = new AccountController(new DbHelper(AddExpenseActivity.this)); - - if (getIntent() != null) { - record = (Record) getIntent().getSerializableExtra(KEY_RECORD); - mode = (Mode) getIntent().getSerializableExtra(KEY_MODE); - } - - initViews(); - initActionBar(); + protected int getContentViewId() { + return R.layout.activity_add_record; } @Override - public boolean onCreateOptionsMenu(Menu menu) { - // Inflate the menu; this adds items to the action bar if it is present. - getMenuInflater().inflate(R.menu.menu_add_record, menu); - return true; - } + protected boolean initData() { + super.initData(); - @Override - public boolean onOptionsItemSelected(MenuItem item) { - switch (item.getItemId()) { - case R.id.action_done: - String title = etTitle.getText().toString(); - String category = etCategory.getText().toString(); - - //Check if price is valid - //noinspection UnusedAssignment - int price = 0; - try { - price = Integer.parseInt(etPrice.getText().toString()); - if (price >= 0 && price <= 1000000000) { - Account account = accountController.getAccounts().get(spinnerAccount.getSelectedItemPosition()); - - if (mode == Mode.MODE_ADD) recordController.addRecord(new Date().getTime(), - 1, title, category, price, account.getId(), -price); - if (mode == Mode.MODE_EDIT) - recordController.updateRecordById(record.getId(), - title, category, price, account.getId(), -(price - record.getPrice())); - } else throw new NumberFormatException(); - } catch (NumberFormatException e) { - Toast.makeText(AddExpenseActivity.this, getResources().getString(R.string.wrong_number_text), - Toast.LENGTH_SHORT).show(); - } + recordController = new RecordController(new DbHelper(AddExpenseActivity.this)); + accountController = new AccountController(new DbHelper(AddExpenseActivity.this)); - setResult(RESULT_OK); - finish(); - return true; + record = (Record) getIntent().getSerializableExtra(KEY_RECORD); + mode = (Mode) getIntent().getSerializableExtra(KEY_MODE); - case R.id.action_close: - finish(); - return true; - - default: - return super.onOptionsItemSelected(item); - } + return mode != null && (!mode.equals(Mode.MODE_EDIT) || record != null); } - private void initViews() { - etTitle = (EditText) findViewById(R.id.et_title); - etCategory = (EditText) findViewById(R.id.et_category); - etPrice = (EditText) findViewById(R.id.et_price); + @SuppressLint("SetTextI18n") + @Override + protected void initViews() { + super.initViews(); List accountList = accountController.getAccounts(); @@ -133,11 +91,55 @@ private void initViews() { } } - private void initActionBar() { - ActionBar actionBar = getSupportActionBar(); - if (actionBar != null) { - actionBar.setCustomView(null); + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.menu_add_record, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.action_done: + if (doExpense()) { + setResult(RESULT_OK); + finish(); + } else showToast(R.string.wrong_number_text); + return true; + + case R.id.action_close: + finish(); + return true; + + default: + return super.onOptionsItemSelected(item); + } + } + + private boolean doExpense() { + String title = etTitle.getText().toString().trim(); + String category = etCategory.getText().toString().trim(); + + //Check if price is valid + //noinspection UnusedAssignment + int price = -1; + try { + price = Integer.parseInt(etPrice.getText().toString()); + } catch (NumberFormatException e) { + e.printStackTrace(); } + + if (price >= 0 && price <= 1000000000) { + Account account = accountController.getAccounts().get(spinnerAccount.getSelectedItemPosition()); + + if (mode == Mode.MODE_ADD) recordController.addRecord(new Date().getTime(), + 1, title, category, price, account.getId(), -price); + if (mode == Mode.MODE_EDIT) + recordController.updateRecordById(record.getId(), + title, category, price, account.getId(), -(price - record.getPrice())); + } else return false; + + return true; } public enum Mode {MODE_ADD, MODE_EDIT} diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/BaseActivity.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/BaseActivity.java index 4f32c6b..c104549 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/BaseActivity.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/BaseActivity.java @@ -25,12 +25,17 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(getContentViewId()); - initViews(); + if (initData()) initViews(); + else finish(); } @LayoutRes protected abstract int getContentViewId(); + protected boolean initData() { + return true; + } + protected void initViews() { ButterKnife.bind(BaseActivity.this); } From 5b84668644c1e50ebecef329af174ed2a22b9e36 Mon Sep 17 00:00:00 2001 From: Evgenii Kanivets Date: Tue, 26 Jan 2016 19:32:33 +0200 Subject: [PATCH 04/16] #4[30m]. Refactor AddIncomeActivity. --- .../activity/AddAccountActivity.java | 1 + .../activity/AddExpenseActivity.java | 140 +---------------- .../activity/AddIncomeActivity.java | 137 +--------------- .../activity/base/AddRecordBaseActivity.java | 147 ++++++++++++++++++ .../activity/{ => base}/BaseActivity.java | 2 +- 5 files changed, 164 insertions(+), 263 deletions(-) create mode 100644 app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/base/AddRecordBaseActivity.java rename app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/{ => base}/BaseActivity.java (95%) diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/AddAccountActivity.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/AddAccountActivity.java index c8ea7f3..f9820a9 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/AddAccountActivity.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/AddAccountActivity.java @@ -5,6 +5,7 @@ import android.widget.EditText; import com.blogspot.e_kanivets.moneytracker.R; +import com.blogspot.e_kanivets.moneytracker.activity.base.BaseActivity; import com.blogspot.e_kanivets.moneytracker.controller.AccountController; import com.blogspot.e_kanivets.moneytracker.helper.DbHelper; diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/AddExpenseActivity.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/AddExpenseActivity.java index ac9aa68..674310d 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/AddExpenseActivity.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/AddExpenseActivity.java @@ -1,146 +1,22 @@ package com.blogspot.e_kanivets.moneytracker.activity; -import android.annotation.SuppressLint; -import android.view.Menu; -import android.view.MenuItem; -import android.widget.ArrayAdapter; -import android.widget.EditText; -import android.widget.Spinner; - -import com.blogspot.e_kanivets.moneytracker.R; -import com.blogspot.e_kanivets.moneytracker.controller.AccountController; -import com.blogspot.e_kanivets.moneytracker.controller.RecordController; -import com.blogspot.e_kanivets.moneytracker.helper.DbHelper; +import com.blogspot.e_kanivets.moneytracker.activity.base.AddRecordBaseActivity; import com.blogspot.e_kanivets.moneytracker.model.Account; -import com.blogspot.e_kanivets.moneytracker.model.Record; -import java.util.ArrayList; import java.util.Date; -import java.util.List; - -import butterknife.Bind; -public class AddExpenseActivity extends BaseActivity { +public class AddExpenseActivity extends AddRecordBaseActivity { @SuppressWarnings("unused") private static final String TAG = "AddExpenseActivity"; - public static final String KEY_RECORD = "key_record"; - public static final String KEY_MODE = "key_mode"; - - private Record record; - private Mode mode; - - @Bind(R.id.et_title) - EditText etTitle; - @Bind(R.id.et_category) - EditText etCategory; - @Bind(R.id.et_price) - EditText etPrice; - @Bind(R.id.spinner_account) - Spinner spinnerAccount; - - private RecordController recordController; - private AccountController accountController; - - @Override - protected int getContentViewId() { - return R.layout.activity_add_record; - } - @Override - protected boolean initData() { - super.initData(); - - recordController = new RecordController(new DbHelper(AddExpenseActivity.this)); - accountController = new AccountController(new DbHelper(AddExpenseActivity.this)); - - record = (Record) getIntent().getSerializableExtra(KEY_RECORD); - mode = (Mode) getIntent().getSerializableExtra(KEY_MODE); - - return mode != null && (!mode.equals(Mode.MODE_EDIT) || record != null); - } - - @SuppressLint("SetTextI18n") - @Override - protected void initViews() { - super.initViews(); - - List accountList = accountController.getAccounts(); - - List accounts = new ArrayList<>(); - for (Account account : accountList) { - accounts.add(account.getTitle()); - } - - spinnerAccount = (Spinner) findViewById(R.id.spinner_account); - spinnerAccount.setAdapter(new ArrayAdapter<>(AddExpenseActivity.this, - android.R.layout.simple_list_item_1, accounts)); + protected boolean doRecord(String title, String category, int price, Account account) { + if (mode == Mode.MODE_ADD) recordController.addRecord(new Date().getTime(), + 1, title, category, price, account.getId(), -price); + else if (mode == Mode.MODE_EDIT) + recordController.updateRecordById(record.getId(), + title, category, price, account.getId(), -(price - record.getPrice())); - //Add texts to dialog if it's edit dialog - if (mode == Mode.MODE_EDIT) { - etTitle.setText(record.getTitle()); - etCategory.setText(record.getCategory()); - etPrice.setText(Integer.toString(record.getPrice())); - - for (int i = 0; i < accountList.size(); i++) { - Account account = accountList.get(i); - if (account.getId() == record.getAccountId()) { - spinnerAccount.setSelection(i); - } - } - } - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - getMenuInflater().inflate(R.menu.menu_add_record, menu); return true; } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - switch (item.getItemId()) { - case R.id.action_done: - if (doExpense()) { - setResult(RESULT_OK); - finish(); - } else showToast(R.string.wrong_number_text); - return true; - - case R.id.action_close: - finish(); - return true; - - default: - return super.onOptionsItemSelected(item); - } - } - - private boolean doExpense() { - String title = etTitle.getText().toString().trim(); - String category = etCategory.getText().toString().trim(); - - //Check if price is valid - //noinspection UnusedAssignment - int price = -1; - try { - price = Integer.parseInt(etPrice.getText().toString()); - } catch (NumberFormatException e) { - e.printStackTrace(); - } - - if (price >= 0 && price <= 1000000000) { - Account account = accountController.getAccounts().get(spinnerAccount.getSelectedItemPosition()); - - if (mode == Mode.MODE_ADD) recordController.addRecord(new Date().getTime(), - 1, title, category, price, account.getId(), -price); - if (mode == Mode.MODE_EDIT) - recordController.updateRecordById(record.getId(), - title, category, price, account.getId(), -(price - record.getPrice())); - } else return false; - - return true; - } - - public enum Mode {MODE_ADD, MODE_EDIT} } \ No newline at end of file diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/AddIncomeActivity.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/AddIncomeActivity.java index efefa05..ef80fb8 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/AddIncomeActivity.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/AddIncomeActivity.java @@ -1,144 +1,21 @@ package com.blogspot.e_kanivets.moneytracker.activity; -import android.os.Bundle; -import android.support.v7.app.ActionBar; -import android.support.v7.app.AppCompatActivity; -import android.view.Menu; -import android.view.MenuItem; -import android.widget.ArrayAdapter; -import android.widget.EditText; -import android.widget.Spinner; -import android.widget.Toast; - -import com.blogspot.e_kanivets.moneytracker.R; -import com.blogspot.e_kanivets.moneytracker.controller.AccountController; -import com.blogspot.e_kanivets.moneytracker.controller.RecordController; -import com.blogspot.e_kanivets.moneytracker.helper.DbHelper; +import com.blogspot.e_kanivets.moneytracker.activity.base.AddRecordBaseActivity; import com.blogspot.e_kanivets.moneytracker.model.Account; -import com.blogspot.e_kanivets.moneytracker.model.Record; - -import java.util.ArrayList; import java.util.Date; -import java.util.List; -public class AddIncomeActivity extends AppCompatActivity { +public class AddIncomeActivity extends AddRecordBaseActivity { @SuppressWarnings("unused") private static final String TAG = "AddIncomeActivity"; - private static final String KEY_RECORD = "key_record"; - private static final String KEY_MODE = "key_mode"; - - private Record record; - private Mode mode; - - private EditText etTitle; - private EditText etCategory; - private EditText etPrice; - private Spinner spinnerAccount; - - private RecordController recordController; - private AccountController accountController; @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_add_record); - - recordController = new RecordController(new DbHelper(AddIncomeActivity.this)); - accountController = new AccountController(new DbHelper(AddIncomeActivity.this)); + protected boolean doRecord(String title, String category, int price, Account account) { + if (mode == Mode.MODE_ADD) recordController.addRecord(new Date().getTime(), + 0, title, category, price, account.getId(), price); + else if (mode == Mode.MODE_EDIT) recordController.updateRecordById(record.getId(), + title, category, price, account.getId(), price - record.getPrice()); - if (getIntent() != null) { - record = (Record) getIntent().getSerializableExtra(KEY_RECORD); - mode = (Mode) getIntent().getSerializableExtra(KEY_MODE); - } - - initViews(); - initActionBar(); - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - // Inflate the menu; this adds items to the action bar if it is present. - getMenuInflater().inflate(R.menu.menu_add_record, menu); return true; } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - switch (item.getItemId()) { - case R.id.action_done: - String title = etTitle.getText().toString(); - String category = etCategory.getText().toString(); - - //Check if price is valid - //noinspection UnusedAssignment - int price = 0; - try { - price = Integer.parseInt(etPrice.getText().toString()); - if (price >= 0 && price <= 1000000000) { - Account account = accountController.getAccounts().get(spinnerAccount.getSelectedItemPosition()); - - if (mode == Mode.MODE_ADD) recordController.addRecord(new Date().getTime(), - 0, title, category, price, account.getId(), price); - if (mode == Mode.MODE_EDIT) recordController.updateRecordById(record.getId(), - title, category, price, account.getId(), price - record.getPrice()); - } else throw new NumberFormatException(); - } catch (NumberFormatException e) { - Toast.makeText(AddIncomeActivity.this, getResources().getString(R.string.wrong_number_text), - Toast.LENGTH_SHORT).show(); - } - - setResult(RESULT_OK); - finish(); - - return true; - - case R.id.action_close: - finish(); - return true; - - default: - return super.onOptionsItemSelected(item); - } - } - - private void initViews() { - etTitle = (EditText) findViewById(R.id.et_title); - etCategory = (EditText) findViewById(R.id.et_category); - etPrice = (EditText) findViewById(R.id.et_price); - - List accountList = accountController.getAccounts(); - - List accounts = new ArrayList<>(); - for (Account account : accountList) { - accounts.add(account.getTitle()); - } - - spinnerAccount = (Spinner) findViewById(R.id.spinner_account); - spinnerAccount.setAdapter(new ArrayAdapter<>(AddIncomeActivity.this, - android.R.layout.simple_list_item_1, accounts)); - - //Add texts to dialog if it's edit dialog - if (mode == Mode.MODE_EDIT) { - etTitle.setText(record.getTitle()); - etCategory.setText(record.getCategory()); - etPrice.setText(Integer.toString(record.getPrice())); - - for (int i = 0; i < accountList.size(); i++) { - Account account = accountList.get(i); - if (account.getId() == record.getAccountId()) { - spinnerAccount.setSelection(i); - } - } - } - } - - private void initActionBar() { - ActionBar actionBar = getSupportActionBar(); - if (actionBar != null) { - actionBar.setCustomView(null); - } - } - - public enum Mode {MODE_ADD, MODE_EDIT} } \ No newline at end of file diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/base/AddRecordBaseActivity.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/base/AddRecordBaseActivity.java new file mode 100644 index 0000000..364c7a6 --- /dev/null +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/base/AddRecordBaseActivity.java @@ -0,0 +1,147 @@ +package com.blogspot.e_kanivets.moneytracker.activity.base; + +import android.annotation.SuppressLint; +import android.view.Menu; +import android.view.MenuItem; +import android.widget.ArrayAdapter; +import android.widget.EditText; +import android.widget.Spinner; + +import com.blogspot.e_kanivets.moneytracker.R; +import com.blogspot.e_kanivets.moneytracker.controller.AccountController; +import com.blogspot.e_kanivets.moneytracker.controller.RecordController; +import com.blogspot.e_kanivets.moneytracker.helper.DbHelper; +import com.blogspot.e_kanivets.moneytracker.model.Account; +import com.blogspot.e_kanivets.moneytracker.model.Record; + +import java.util.ArrayList; +import java.util.List; + +import butterknife.Bind; + +/** + * Base implementation of {@link android.support.v7.app.AppCompatActivity} to describe some common + * methods which connected with income's/expense's handling. + * Created on 1/26/16. + * + * @author Evgenii Kanivets + */ +public abstract class AddRecordBaseActivity extends BaseActivity { + @SuppressWarnings("unused") + private static final String TAG = "AddRecordBaseActivity"; + + public static final String KEY_RECORD = "key_record"; + public static final String KEY_MODE = "key_mode"; + + protected Record record; + protected Mode mode; + + @Bind(R.id.et_title) + EditText etTitle; + @Bind(R.id.et_category) + EditText etCategory; + @Bind(R.id.et_price) + EditText etPrice; + @Bind(R.id.spinner_account) + Spinner spinnerAccount; + + protected RecordController recordController; + protected AccountController accountController; + + @Override + protected int getContentViewId() { + return R.layout.activity_add_record; + } + + @Override + protected boolean initData() { + super.initData(); + + recordController = new RecordController(new DbHelper(AddRecordBaseActivity.this)); + accountController = new AccountController(new DbHelper(AddRecordBaseActivity.this)); + + record = (Record) getIntent().getSerializableExtra(KEY_RECORD); + mode = (Mode) getIntent().getSerializableExtra(KEY_MODE); + + return mode != null && (!mode.equals(Mode.MODE_EDIT) || record != null); + } + + @SuppressLint("SetTextI18n") + @Override + protected void initViews() { + super.initViews(); + + List accountList = accountController.getAccounts(); + + List accounts = new ArrayList<>(); + for (Account account : accountList) { + accounts.add(account.getTitle()); + } + + spinnerAccount = (Spinner) findViewById(R.id.spinner_account); + spinnerAccount.setAdapter(new ArrayAdapter<>(AddRecordBaseActivity.this, + android.R.layout.simple_list_item_1, accounts)); + + //Add texts to dialog if it's edit dialog + if (mode == Mode.MODE_EDIT) { + etTitle.setText(record.getTitle()); + etCategory.setText(record.getCategory()); + etPrice.setText(Integer.toString(record.getPrice())); + + for (int i = 0; i < accountList.size(); i++) { + Account account = accountList.get(i); + if (account.getId() == record.getAccountId()) { + spinnerAccount.setSelection(i); + } + } + } + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.menu_add_record, menu); + return true; + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.action_done: + if (prepareRecord()) { + setResult(RESULT_OK); + finish(); + } else showToast(R.string.wrong_number_text); + return true; + + case R.id.action_close: + finish(); + return true; + + default: + return super.onOptionsItemSelected(item); + } + } + + protected abstract boolean doRecord(String title, String category, int price, Account account); + + private boolean prepareRecord() { + String title = etTitle.getText().toString().trim(); + String category = etCategory.getText().toString().trim(); + + //Check if price is valid + //noinspection UnusedAssignment + int price = -1; + try { + price = Integer.parseInt(etPrice.getText().toString()); + } catch (NumberFormatException e) { + e.printStackTrace(); + } + + if (price >= 0 && price <= 1000000000) { + Account account = accountController.getAccounts().get(spinnerAccount.getSelectedItemPosition()); + return doRecord(title, category, price, account); + } else return false; + } + + public enum Mode {MODE_ADD, MODE_EDIT} +} \ No newline at end of file diff --git a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/BaseActivity.java b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/base/BaseActivity.java similarity index 95% rename from app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/BaseActivity.java rename to app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/base/BaseActivity.java index c104549..ebda756 100644 --- a/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/BaseActivity.java +++ b/app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/base/BaseActivity.java @@ -1,4 +1,4 @@ -package com.blogspot.e_kanivets.moneytracker.activity; +package com.blogspot.e_kanivets.moneytracker.activity.base; import android.os.Bundle; import android.support.annotation.LayoutRes; From 7ac618b4b1ebc87581f972b50e285c0e470e45f5 Mon Sep 17 00:00:00 2001 From: Evgenii Kanivets Date: Tue, 26 Jan 2016 19:47:08 +0200 Subject: [PATCH 05/16] #4[30m]. Refactor NavDrawerActivity and ReportActivity. --- app/src/main/AndroidManifest.xml | 1 + .../activity/NavDrawerActivity.java | 23 +++++--- .../moneytracker/activity/ReportActivity.java | 56 +++++++++---------- app/src/main/res/layout/activity_report.xml | 32 ++--------- 4 files changed, 46 insertions(+), 66 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index de17b09..8773afa 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -15,6 +15,7 @@ android:theme="@style/Theme.Default"> m; /* Fill the group list */ - groupData = new ArrayList>(); + groupData = new ArrayList<>(); for (Pair item : report.getReportList()) { /* Fill up attribute names for each group */ - m = new HashMap(); + m = new HashMap<>(); m.put(Constants.TITLE_PARAM_NAME, item.first); m.put(Constants.PRICE_PARAM_NAME, Integer.toString(item.second)); @@ -113,10 +111,10 @@ private void initExpandableListView() { int groupTo[] = new int[]{R.id.tv_category, R.id.tv_total}; /* Create list for childDataItems */ - childData = new ArrayList>>(); + childData = new ArrayList<>(); for (Map group : groupData) { - childDataItem = new ArrayList>(); + childDataItem = new ArrayList<>(); /* Fill up attribute names for each child item */ for (Record record : report.getSummaryRecordList()) { if (record.getCategory().equals(group.get(Constants.TITLE_PARAM_NAME))) { @@ -125,7 +123,7 @@ private void initExpandableListView() { price *= -1; } - m = new HashMap(); + m = new HashMap<>(); m.put(Constants.TITLE_PARAM_NAME, record.getTitle()); m.put(Constants.PRICE_PARAM_NAME, Integer.toString(price)); @@ -144,7 +142,7 @@ private void initExpandableListView() { expandableListView.addFooterView(getSummaryReportView(report.getSummaryReportList())); expandableListView.setAdapter(new ExpandableListReportAdapter( - activity, + ReportActivity.this, groupData, R.layout.view_report_item_exp, groupFrom, @@ -159,7 +157,7 @@ private void initExpandableListView() { private View getSummaryReportView(List> summaryReportList) { ViewGroup viewGroup = (ViewGroup) getLayoutInflater().inflate(R.layout.view_summary_report, null); - ReportItemAdapter adapter = new ReportItemAdapter(activity, summaryReportList); + ReportItemAdapter adapter = new ReportItemAdapter(ReportActivity.this, summaryReportList); for (int i = 0; i < adapter.getCount(); i++) { viewGroup.addView(adapter.getView(i, null, null)); diff --git a/app/src/main/res/layout/activity_report.xml b/app/src/main/res/layout/activity_report.xml index 279ce4d..43b1e7c 100644 --- a/app/src/main/res/layout/activity_report.xml +++ b/app/src/main/res/layout/activity_report.xml @@ -1,46 +1,22 @@ - - - - - -