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

Commit 08e4f71

Browse files
Moved all logic from MainActivity to RecordsFragment. 2h.
1 parent f8eb5f4 commit 08e4f71

File tree

2 files changed

+241
-2
lines changed

2 files changed

+241
-2
lines changed

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

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import com.blogspot.e_kanivets.moneytracker.fragment.ExportFragment;
1818
import com.blogspot.e_kanivets.moneytracker.fragment.NavigationDrawerFragment;
1919
import com.blogspot.e_kanivets.moneytracker.fragment.RecordsFragment;
20+
import com.blogspot.e_kanivets.moneytracker.util.AppUtils;
2021

2122
public class NavDrawerActivity extends ActionBarActivity
2223
implements NavigationDrawerFragment.NavigationDrawerCallbacks {
@@ -36,6 +37,9 @@ protected void onCreate(Bundle savedInstanceState) {
3637
super.onCreate(savedInstanceState);
3738
setContentView(R.layout.activity_nav_drawer);
3839

40+
/* Increment launch count */
41+
AppUtils.addLaunchCount(NavDrawerActivity.this);
42+
3943
mNavigationDrawerFragment = (NavigationDrawerFragment)
4044
getSupportFragmentManager().findFragmentById(R.id.navigation_drawer);
4145
mTitle = getTitle();

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

Lines changed: 237 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,55 @@
11
package com.blogspot.e_kanivets.moneytracker.fragment;
22

33
import android.app.Activity;
4+
import android.content.Intent;
45
import android.os.Bundle;
56
import android.support.v4.app.Fragment;
7+
import android.support.v7.widget.PopupMenu;
8+
import android.view.ContextMenu;
69
import android.view.LayoutInflater;
10+
import android.view.MenuItem;
711
import android.view.View;
812
import android.view.ViewGroup;
13+
import android.view.ViewTreeObserver;
14+
import android.widget.AdapterView;
15+
import android.widget.BaseAdapter;
16+
import android.widget.Button;
17+
import android.widget.ListView;
18+
import android.widget.TextView;
919

1020
import com.blogspot.e_kanivets.moneytracker.R;
1121
import com.blogspot.e_kanivets.moneytracker.activity.NavDrawerActivity;
22+
import com.blogspot.e_kanivets.moneytracker.activity.ReportActivity;
23+
import com.blogspot.e_kanivets.moneytracker.adapter.RecordAdapter;
24+
import com.blogspot.e_kanivets.moneytracker.helper.MTHelper;
25+
import com.blogspot.e_kanivets.moneytracker.helper.PeriodHelper;
26+
import com.blogspot.e_kanivets.moneytracker.model.Record;
27+
import com.blogspot.e_kanivets.moneytracker.ui.AddExpenseDialog;
28+
import com.blogspot.e_kanivets.moneytracker.ui.AddIncomeDialog;
29+
import com.blogspot.e_kanivets.moneytracker.ui.AppRateDialog;
30+
import com.blogspot.e_kanivets.moneytracker.ui.ChangeDateDialog;
31+
import com.blogspot.e_kanivets.moneytracker.util.AppUtils;
32+
33+
import java.util.Calendar;
34+
import java.util.Date;
35+
import java.util.Observable;
36+
import java.util.Observer;
1237

1338
/**
1439
* A simple {@link Fragment} subclass.
1540
* Use the {@link RecordsFragment#newInstance} factory method to
1641
* create an instance of this fragment.
1742
*/
18-
public class RecordsFragment extends Fragment {
43+
public class RecordsFragment extends Fragment implements View.OnClickListener, Observer {
1944
private static final String KEY_POSITION = "key_position";
2045

2146
private int position;
2247

48+
private ListView listView;
49+
50+
private TextView tvFromDate;
51+
private TextView tvToDate;
52+
2353
/**
2454
* Use this factory method to create a new instance of
2555
* this fragment using the provided parameters.
@@ -52,7 +82,9 @@ public void onCreate(Bundle savedInstanceState) {
5282
public View onCreateView(LayoutInflater inflater, ViewGroup container,
5383
Bundle savedInstanceState) {
5484
// Inflate the layout for this fragment
55-
return inflater.inflate(R.layout.fragment_records, container, false);
85+
View rootView = inflater.inflate(R.layout.fragment_records, container, false);
86+
initViews(rootView);
87+
return rootView;
5688
}
5789

5890
@Override
@@ -61,4 +93,207 @@ public void onAttach(Activity activity) {
6193

6294
((NavDrawerActivity) activity).onSectionAttached(position);
6395
}
96+
97+
@Override
98+
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
99+
super.onCreateContextMenu(menu, v, menuInfo);
100+
101+
getActivity().getMenuInflater().inflate(R.menu.menu_record, menu);
102+
}
103+
104+
@Override
105+
public boolean onContextItemSelected(MenuItem item) {
106+
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
107+
108+
switch (item.getItemId()) {
109+
case R.id.edit:
110+
Record record = MTHelper.getInstance().getRecords().get(info.position);
111+
if(record.isIncome()) {
112+
AddIncomeDialog dialog = new AddIncomeDialog(getActivity(), record, AddIncomeDialog.Mode.MODE_EDIT);
113+
dialog.show();
114+
} else {
115+
AddExpenseDialog dialog = new AddExpenseDialog(getActivity(), record, AddExpenseDialog.Mode.MODE_EDIT);
116+
dialog.show();
117+
}
118+
return true;
119+
case R.id.delete:
120+
MTHelper.getInstance().deleteRecordById(MTHelper.getInstance().getRecords().
121+
get(info.position).getId());
122+
return true;
123+
default:
124+
return super.onContextItemSelected(item);
125+
}
126+
}
127+
128+
@Override
129+
public void onClick(View view) {
130+
switch (view.getId()) {
131+
case R.id.btn_add_expense:
132+
showAddExpenseDialog();
133+
break;
134+
135+
case R.id.btn_add_income:
136+
showAddIncomeDialog();
137+
break;
138+
139+
case R.id.btn_select_period:
140+
showSelectPopupMenu(view);
141+
break;
142+
143+
case R.id.btn_report:
144+
Intent intent = new Intent(getActivity(), ReportActivity.class);
145+
startActivity(intent);
146+
break;
147+
148+
case R.id.tv_from_date:
149+
showChangeFromDateDialog();
150+
break;
151+
152+
case R.id.tv_to_date:
153+
showChangeToDateDialog();
154+
break;
155+
156+
default:
157+
break;
158+
}
159+
}
160+
161+
@Override
162+
public void update(Observable observable, Object o) {
163+
((BaseAdapter) listView.getAdapter()).notifyDataSetChanged();
164+
}
165+
166+
private void initViews(View rootView) {
167+
if (rootView != null) {
168+
View btnAddIncome = rootView.findViewById(R.id.btn_add_income);
169+
View btnAddExpense = rootView.findViewById(R.id.btn_add_expense);
170+
View btnReport = rootView.findViewById(R.id.btn_report);
171+
View btnSelectPeriod = rootView.findViewById(R.id.btn_select_period);
172+
173+
tvFromDate = (TextView) rootView.findViewById(R.id.tv_from_date);
174+
tvToDate = (TextView) rootView.findViewById(R.id.tv_to_date);
175+
176+
listView = (ListView) rootView.findViewById(R.id.listView);
177+
178+
//Set dates of current week
179+
tvFromDate.setText(MTHelper.getInstance().getFirstDay());
180+
tvToDate.setText(MTHelper.getInstance().getLastDay());
181+
182+
//Set listeners
183+
btnAddIncome.setOnClickListener(RecordsFragment.this);
184+
btnAddExpense.setOnClickListener(RecordsFragment.this);
185+
btnSelectPeriod.setOnClickListener(RecordsFragment.this);
186+
tvFromDate.setOnClickListener(RecordsFragment.this);
187+
tvToDate.setOnClickListener(RecordsFragment.this);
188+
btnReport.setOnClickListener(RecordsFragment.this);
189+
190+
listView.setAdapter(new RecordAdapter(getActivity(), MTHelper.getInstance().getRecords()));
191+
((BaseAdapter) listView.getAdapter()).notifyDataSetChanged();
192+
registerForContextMenu(listView);
193+
194+
/* Scroll list to bottom only once at start */
195+
listView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
196+
private boolean isFirst = true;
197+
198+
@Override
199+
public void onGlobalLayout() {
200+
if(isFirst) {
201+
isFirst = false;
202+
listView.setSelection(listView.getCount()-1);
203+
if(AppUtils.checkRateDialog(getActivity())) {
204+
showAppRateDialog();
205+
}
206+
}
207+
}
208+
});
209+
210+
//Subscribe to helper
211+
MTHelper.getInstance().addObserver(this);
212+
}
213+
}
214+
215+
private void showAddIncomeDialog() {
216+
AddIncomeDialog dialog = new AddIncomeDialog(getActivity(), null, AddIncomeDialog.Mode.MODE_ADD);
217+
dialog.show();
218+
}
219+
220+
private void showAddExpenseDialog() {
221+
AddExpenseDialog dialog = new AddExpenseDialog(getActivity(), null, AddExpenseDialog.Mode.MODE_ADD);
222+
dialog.show();
223+
}
224+
225+
private void showSelectPopupMenu(View view) {
226+
PopupMenu popupMenu = new PopupMenu(getActivity(), view);
227+
popupMenu.getMenuInflater().inflate(R.menu.menu_popup, popupMenu.getMenu());
228+
229+
popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
230+
@Override
231+
public boolean onMenuItemClick(MenuItem menuItem) {
232+
Calendar calendar = Calendar.getInstance();
233+
calendar.clear(Calendar.MINUTE);
234+
calendar.clear(Calendar.SECOND);
235+
calendar.clear(Calendar.MILLISECOND);
236+
237+
switch (menuItem.getItemId()) {
238+
case R.id.period_day:
239+
MTHelper.getInstance().setPeriod(PeriodHelper.getInstance().getDayPeriod());
240+
break;
241+
case R.id.period_week:
242+
MTHelper.getInstance().setPeriod(PeriodHelper.getInstance().getWeekPeriod());
243+
break;
244+
case R.id.period_month:
245+
MTHelper.getInstance().setPeriod(PeriodHelper.getInstance().getMonthPeriod());
246+
break;
247+
case R.id.period_year:
248+
MTHelper.getInstance().setPeriod(PeriodHelper.getInstance().getYearPeriod());
249+
break;
250+
default:
251+
break;
252+
}
253+
254+
MTHelper.getInstance().update();
255+
256+
tvFromDate.setText(MTHelper.getInstance().getFirstDay());
257+
tvToDate.setText(MTHelper.getInstance().getLastDay());
258+
259+
return false;
260+
}
261+
});
262+
263+
popupMenu.show();
264+
}
265+
266+
private void showChangeFromDateDialog() {
267+
ChangeDateDialog dialog = new ChangeDateDialog(getActivity(),
268+
MTHelper.getInstance().getPeriod().getFirst(), new ChangeDateDialog.OnDateChangedListener() {
269+
@Override
270+
public void OnDataChanged(Date date) {
271+
MTHelper.getInstance().getPeriod().setFirst(date);
272+
MTHelper.getInstance().update();
273+
274+
tvFromDate.setText(MTHelper.getInstance().getFirstDay());
275+
}
276+
});
277+
dialog.show();
278+
}
279+
280+
private void showChangeToDateDialog() {
281+
ChangeDateDialog dialog = new ChangeDateDialog(getActivity(),
282+
MTHelper.getInstance().getPeriod().getLast(), new ChangeDateDialog.OnDateChangedListener() {
283+
@Override
284+
public void OnDataChanged(Date date) {
285+
MTHelper.getInstance().getPeriod().setLast(date);
286+
MTHelper.getInstance().update();
287+
288+
tvToDate.setText(MTHelper.getInstance().getLastDay());
289+
}
290+
});
291+
dialog.show();
292+
}
293+
294+
private void showAppRateDialog() {
295+
AppRateDialog dialog = new AppRateDialog(getActivity());
296+
dialog.setCanceledOnTouchOutside(false);
297+
dialog.show();
298+
}
64299
}

0 commit comments

Comments
 (0)