Skip to content
This repository was archived by the owner on Jun 27, 2020. It is now read-only.

Commit 0bfa224

Browse files
author
Evgenii Kanivets
committed
#2[30m]. Move period logic to separate class.
1 parent 19b0730 commit 0bfa224

File tree

7 files changed

+163
-107
lines changed

7 files changed

+163
-107
lines changed

app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/ReportActivity.java

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
import com.blogspot.e_kanivets.moneytracker.controller.RecordController;
1717
import com.blogspot.e_kanivets.moneytracker.helper.DbHelper;
1818
import com.blogspot.e_kanivets.moneytracker.helper.MtHelper;
19+
import com.blogspot.e_kanivets.moneytracker.helper.PeriodHelper;
20+
import com.blogspot.e_kanivets.moneytracker.model.Period;
1921
import com.blogspot.e_kanivets.moneytracker.model.Record;
2022
import com.blogspot.e_kanivets.moneytracker.model.Report;
2123
import com.blogspot.e_kanivets.moneytracker.util.Constants;
@@ -25,12 +27,11 @@
2527
import java.util.List;
2628
import java.util.Map;
2729

28-
/**
29-
* Created by eugene on 11/09/14.
30-
*/
3130
public class ReportActivity extends Activity {
31+
@SuppressWarnings("unused")
32+
private static final String TAG = "ReportActivity";
3233

33-
private static final String TAG = ReportActivity.class.getSimpleName();
34+
public static final String KEY_PERIOD = "key_period";
3435

3536
private Activity activity;
3637
private Report report;
@@ -39,6 +40,7 @@ public class ReportActivity extends Activity {
3940
private ExpandableListView expandableListView;
4041

4142
private RecordController recordController;
43+
private Period period;
4244

4345
@Override
4446
protected void onCreate(Bundle savedInstanceState) {
@@ -49,8 +51,14 @@ protected void onCreate(Bundle savedInstanceState) {
4951
recordController = new RecordController(new DbHelper(ReportActivity.this),
5052
MtHelper.getInstance());
5153

54+
period = getIntent().getParcelableExtra(KEY_PERIOD);
55+
if (period == null) {
56+
finish();
57+
return;
58+
}
59+
5260
activity = this;
53-
report = new Report(recordController.getRecords());
61+
report = new Report(recordController.getRecords(period));
5462

5563
initViews();
5664
}
@@ -60,7 +68,7 @@ private void initViews() {
6068
expandableListView = (ExpandableListView) findViewById(R.id.expandableListView);
6169

6270
listView.setAdapter(new ReportItemAdapter(activity,
63-
new Report(recordController.getRecords()).getReportList()));
71+
new Report(recordController.getRecords(period)).getReportList()));
6472

6573
/* Scroll list to bottom only once at start */
6674
listView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package com.blogspot.e_kanivets.moneytracker.controller;
2+
3+
import com.blogspot.e_kanivets.moneytracker.model.Period;
4+
5+
import java.text.SimpleDateFormat;
6+
import java.util.Calendar;
7+
import java.util.Date;
8+
9+
/**
10+
* Controller class to encapsulate period logic.
11+
* Created on 1/26/16.
12+
*
13+
* @author Evgenii Kanivets
14+
*/
15+
public class PeriodController {
16+
private Period period;
17+
18+
public PeriodController() {
19+
period = initPeriod();
20+
}
21+
22+
public Period getPeriod() {
23+
return period;
24+
}
25+
26+
public void setPeriod(Period period) {
27+
this.period = period;
28+
}
29+
30+
private Period initPeriod() {
31+
// get today and clear time of day
32+
Calendar cal = Calendar.getInstance();
33+
cal.set(Calendar.HOUR_OF_DAY, 0); // ! clear would not reset the hour of day !
34+
cal.clear(Calendar.MINUTE);
35+
cal.clear(Calendar.SECOND);
36+
cal.clear(Calendar.MILLISECOND);
37+
38+
// set first day of week
39+
cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek());
40+
41+
Date first = cal.getTime();
42+
43+
cal.set(Calendar.HOUR_OF_DAY, 0); // ! clear would not reset the hour of day !
44+
cal.clear(Calendar.MINUTE);
45+
cal.clear(Calendar.SECOND);
46+
cal.clear(Calendar.MILLISECOND);
47+
48+
// set first day of week
49+
cal.set(Calendar.DAY_OF_WEEK, cal.getFirstDayOfWeek() + 6);
50+
cal.set(Calendar.HOUR_OF_DAY, 23);
51+
cal.set(Calendar.MINUTE, 59);
52+
cal.set(Calendar.SECOND, 59);
53+
54+
Date last = cal.getTime();
55+
56+
return new Period(first, last);
57+
}
58+
59+
public String getFirstDay() {
60+
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
61+
return dateFormat.format(getPeriod().getFirst());
62+
}
63+
64+
public String getLastDay() {
65+
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
66+
return dateFormat.format(getPeriod().getLast());
67+
}
68+
}

app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/RecordController.java

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66

77
import com.blogspot.e_kanivets.moneytracker.helper.DbHelper;
88
import com.blogspot.e_kanivets.moneytracker.helper.MtHelper;
9+
import com.blogspot.e_kanivets.moneytracker.model.Period;
910
import com.blogspot.e_kanivets.moneytracker.model.Record;
1011

1112
import java.util.ArrayList;
@@ -30,14 +31,14 @@ public RecordController(DbHelper dbHelper, MtHelper mtHelper) {
3031
categoryController = new CategoryController(dbHelper, mtHelper);
3132
}
3233

33-
public List<Record> getRecords() {
34+
public List<Record> getRecords(Period period) {
3435
List<Record> recordList = new ArrayList<>();
3536

3637
SQLiteDatabase db = dbHelper.getReadableDatabase();
3738

38-
//Form args to select only needed records according to period
39-
String[] args = new String[]{Long.toString(mtHelper.getPeriod().getFirst().getTime()),
40-
Long.toString(mtHelper.getPeriod().getLast().getTime())};
39+
// Form args to select only needed records according to period
40+
String[] args = new String[]{Long.toString(period.getFirst().getTime()),
41+
Long.toString(period.getLast().getTime())};
4142

4243
//Read records table from db
4344
Cursor cursor = db.query(DbHelper.TABLE_RECORDS, null, "time BETWEEN ? AND ?", args, null, null, null);
@@ -120,21 +121,16 @@ public void updateRecordById(int id, String title, String category, int price, i
120121
mtHelper.update();
121122
}
122123

123-
public void deleteRecordById(int id) {
124-
for (Record record : getRecords()) {
125-
if (record.getId() == id) {
126-
SQLiteDatabase db = dbHelper.getWritableDatabase();
127-
db.delete(DbHelper.TABLE_RECORDS, "id=?",
128-
new String[]{Integer.toString(id)});
129-
db.close();
124+
public void deleteRecord(Record record) {
125+
SQLiteDatabase db = dbHelper.getWritableDatabase();
126+
db.delete(DbHelper.TABLE_RECORDS, "id=?",
127+
new String[]{Integer.toString(record.getId())});
128+
db.close();
130129

131-
accountController.updateAccountById(record.getAccountId(), record.isIncome() ?
132-
-record.getPrice() : record.getPrice());
130+
accountController.updateAccountById(record.getAccountId(), record.isIncome() ?
131+
-record.getPrice() : record.getPrice());
133132

134-
mtHelper.update();
135-
break;
136-
}
137-
}
133+
mtHelper.update();
138134
}
139135

140136
public List<String> getRecordsForExport(long fromDate, long toDate) {

app/src/main/java/com/blogspot/e_kanivets/moneytracker/fragment/RecordsFragment.java

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import com.blogspot.e_kanivets.moneytracker.activity.NavDrawerActivity;
2828
import com.blogspot.e_kanivets.moneytracker.activity.ReportActivity;
2929
import com.blogspot.e_kanivets.moneytracker.adapter.RecordAdapter;
30+
import com.blogspot.e_kanivets.moneytracker.controller.PeriodController;
3031
import com.blogspot.e_kanivets.moneytracker.controller.RecordController;
3132
import com.blogspot.e_kanivets.moneytracker.helper.DbHelper;
3233
import com.blogspot.e_kanivets.moneytracker.helper.MtHelper;
@@ -55,6 +56,7 @@ public class RecordsFragment extends Fragment implements View.OnClickListener, O
5556
private TextView tvToDate;
5657

5758
private RecordController recordController;
59+
private PeriodController periodController;
5860

5961
public static RecordsFragment newInstance() {
6062
RecordsFragment fragment = new RecordsFragment();
@@ -71,6 +73,7 @@ public RecordsFragment() {
7173
public void onCreate(@Nullable Bundle savedInstanceState) {
7274
super.onCreate(savedInstanceState);
7375

76+
periodController = new PeriodController();
7477
recordController = new RecordController(new DbHelper(getActivity()), MtHelper.getInstance());
7578
}
7679

@@ -104,13 +107,15 @@ public boolean onContextItemSelected(MenuItem item) {
104107

105108
switch (item.getItemId()) {
106109
case R.id.edit:
107-
Record record = recordController.getRecords().get(info.position);
110+
Record record = recordController.
111+
getRecords(periodController.getPeriod()).get(info.position);
108112
if (record.isIncome())
109113
startAddIncomeActivity(record, AddIncomeActivity.Mode.MODE_EDIT);
110114
else startAddExpenseActivity(record, AddExpenseActivity.Mode.MODE_EDIT);
111115
return true;
112116
case R.id.delete:
113-
recordController.deleteRecordById(recordController.getRecords().get(info.position).getId());
117+
recordController.deleteRecord(recordController.
118+
getRecords(periodController.getPeriod()).get(info.position));
114119
return true;
115120
default:
116121
return super.onContextItemSelected(item);
@@ -130,6 +135,7 @@ public void onClick(View view) {
130135

131136
case R.id.btn_report:
132137
Intent intent = new Intent(getActivity(), ReportActivity.class);
138+
intent.putExtra(ReportActivity.KEY_PERIOD, periodController.getPeriod());
133139
startActivity(intent);
134140
break;
135141

@@ -156,19 +162,19 @@ public void onItemSelected(AdapterView<?> parent, View view, int position, long
156162
switch (position) {
157163
// Day period
158164
case 0:
159-
MtHelper.getInstance().setPeriod(PeriodHelper.getInstance().getDayPeriod());
165+
periodController.setPeriod(PeriodHelper.getInstance().getDayPeriod());
160166
break;
161167
// Week period
162168
case 1:
163-
MtHelper.getInstance().setPeriod(PeriodHelper.getInstance().getWeekPeriod());
169+
periodController.setPeriod(PeriodHelper.getInstance().getWeekPeriod());
164170
break;
165171
// Month period
166172
case 2:
167-
MtHelper.getInstance().setPeriod(PeriodHelper.getInstance().getMonthPeriod());
173+
periodController.setPeriod(PeriodHelper.getInstance().getMonthPeriod());
168174
break;
169175
// Year period
170176
case 3:
171-
MtHelper.getInstance().setPeriod(PeriodHelper.getInstance().getYearPeriod());
177+
periodController.setPeriod(PeriodHelper.getInstance().getYearPeriod());
172178
break;
173179
default:
174180
break;
@@ -178,8 +184,8 @@ public void onItemSelected(AdapterView<?> parent, View view, int position, long
178184

179185
MtHelper.getInstance().update();
180186

181-
tvFromDate.setText(MtHelper.getInstance().getFirstDay());
182-
tvToDate.setText(MtHelper.getInstance().getLastDay());
187+
tvFromDate.setText(periodController.getFirstDay());
188+
tvToDate.setText(periodController.getLastDay());
183189
}
184190

185191
@Override
@@ -189,7 +195,8 @@ public void onNothingSelected(AdapterView<?> parent) {
189195

190196
@Override
191197
public void update(Observable observable, Object o) {
192-
listView.setAdapter(new RecordAdapter(getActivity(), recordController.getRecords()));
198+
listView.setAdapter(new RecordAdapter(getActivity(),
199+
recordController.getRecords(periodController.getPeriod())));
193200
((BaseAdapter) listView.getAdapter()).notifyDataSetChanged();
194201
}
195202

@@ -205,8 +212,8 @@ private void initViews(View rootView) {
205212
listView = (ListView) rootView.findViewById(R.id.listView);
206213

207214
//Set dates of current week
208-
tvFromDate.setText(MtHelper.getInstance().getFirstDay());
209-
tvToDate.setText(MtHelper.getInstance().getLastDay());
215+
tvFromDate.setText(periodController.getFirstDay());
216+
tvToDate.setText(periodController.getLastDay());
210217

211218
//Set listeners
212219
btnAddIncome.setOnClickListener(RecordsFragment.this);
@@ -215,7 +222,8 @@ private void initViews(View rootView) {
215222
tvToDate.setOnClickListener(RecordsFragment.this);
216223
btnReport.setOnClickListener(RecordsFragment.this);
217224

218-
listView.setAdapter(new RecordAdapter(getActivity(), recordController.getRecords()));
225+
listView.setAdapter(new RecordAdapter(getActivity(),
226+
recordController.getRecords(periodController.getPeriod())));
219227
((BaseAdapter) listView.getAdapter()).notifyDataSetChanged();
220228

221229
/* Scroll list to bottom only once at start */
@@ -262,27 +270,27 @@ private void initActionBar() {
262270

263271
private void showChangeFromDateDialog() {
264272
ChangeDateDialog dialog = new ChangeDateDialog(getActivity(),
265-
MtHelper.getInstance().getPeriod().getFirst(), new ChangeDateDialog.OnDateChangedListener() {
273+
periodController.getPeriod().getFirst(), new ChangeDateDialog.OnDateChangedListener() {
266274
@Override
267275
public void OnDataChanged(Date date) {
268-
MtHelper.getInstance().getPeriod().setFirst(date);
276+
periodController.getPeriod().setFirst(date);
269277
MtHelper.getInstance().update();
270278

271-
tvFromDate.setText(MtHelper.getInstance().getFirstDay());
279+
tvFromDate.setText(periodController.getFirstDay());
272280
}
273281
});
274282
dialog.show();
275283
}
276284

277285
private void showChangeToDateDialog() {
278286
ChangeDateDialog dialog = new ChangeDateDialog(getActivity(),
279-
MtHelper.getInstance().getPeriod().getLast(), new ChangeDateDialog.OnDateChangedListener() {
287+
periodController.getPeriod().getLast(), new ChangeDateDialog.OnDateChangedListener() {
280288
@Override
281289
public void OnDataChanged(Date date) {
282-
MtHelper.getInstance().getPeriod().setLast(date);
290+
periodController.getPeriod().setLast(date);
283291
MtHelper.getInstance().update();
284292

285-
tvToDate.setText(MtHelper.getInstance().getLastDay());
293+
tvToDate.setText(periodController.getLastDay());
286294
}
287295
});
288296
dialog.show();

0 commit comments

Comments
 (0)