Skip to content
This repository was archived by the owner on Jun 27, 2020. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
#23[1h]. Finish Report refactoring.
  • Loading branch information
Evgenii Kanivets committed Feb 26, 2016
commit f95ddedf88e7370378ff82b172f8e40a2f37e6f9
Original file line number Diff line number Diff line change
@@ -1,36 +1,23 @@
package com.blogspot.e_kanivets.moneytracker.activity;

import android.util.Pair;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import android.widget.ExpandableListView;
import android.widget.ListView;

import com.blogspot.e_kanivets.moneytracker.R;
import com.blogspot.e_kanivets.moneytracker.activity.base.BaseActivity;
import com.blogspot.e_kanivets.moneytracker.adapter.ExpandableListReportAdapter;
import com.blogspot.e_kanivets.moneytracker.adapter.ReportItemAdapter;
import com.blogspot.e_kanivets.moneytracker.controller.AccountController;
import com.blogspot.e_kanivets.moneytracker.controller.CategoryController;
import com.blogspot.e_kanivets.moneytracker.controller.ExchangeRateController;
import com.blogspot.e_kanivets.moneytracker.controller.RecordController;
import com.blogspot.e_kanivets.moneytracker.DbHelper;
import com.blogspot.e_kanivets.moneytracker.model.Category;
import com.blogspot.e_kanivets.moneytracker.model.Period;
import com.blogspot.e_kanivets.moneytracker.model.Record;
import com.blogspot.e_kanivets.moneytracker.model.Report;
import com.blogspot.e_kanivets.moneytracker.repo.AccountRepo;
import com.blogspot.e_kanivets.moneytracker.repo.CategoryRepo;
import com.blogspot.e_kanivets.moneytracker.repo.ExchangeRateRepo;
import com.blogspot.e_kanivets.moneytracker.repo.base.IRepo;
import com.blogspot.e_kanivets.moneytracker.repo.RecordRepo;
import com.blogspot.e_kanivets.moneytracker.util.Constants;
import com.blogspot.e_kanivets.moneytracker.report.ReportConverter;
import com.blogspot.e_kanivets.moneytracker.report.ReportMaker;
import com.blogspot.e_kanivets.moneytracker.report.base.IReport;
import com.blogspot.e_kanivets.moneytracker.ui.TotalReportViewCreator;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import butterknife.Bind;

Expand All @@ -39,17 +26,11 @@ public class ReportActivity extends BaseActivity {
private static final String TAG = "ReportActivity";

public static final String KEY_PERIOD = "key_period";
public static final String KEY_RECORD_LIST = "key_record_list";

private Report report;
private String currency;

@Bind(R.id.list_view)
ListView listView;
@Bind(R.id.exp_list_view)
ExpandableListView expandableListView;

private RecordController recordController;
private Period period;
private IReport report;

@Override
protected int getContentViewId() {
Expand All @@ -60,129 +41,33 @@ protected int getContentViewId() {
protected boolean initData() {
super.initData();

List<Record> recordList = getIntent().getParcelableArrayListExtra(KEY_RECORD_LIST);
if (recordList == null) return false;

Period period = getIntent().getParcelableExtra(KEY_PERIOD);
if (period == null) return false;

DbHelper dbHelper = new DbHelper(ReportActivity.this);
IRepo<Category> categoryRepo = new CategoryRepo(dbHelper);
CategoryController categoryController = new CategoryController(categoryRepo);
AccountController accountController = new AccountController(new AccountRepo(dbHelper));
ExchangeRateController rateController = new ExchangeRateController(new ExchangeRateRepo(dbHelper));

recordController = new RecordController(new RecordRepo(dbHelper), categoryController,
accountController);

currency = DbHelper.DEFAULT_ACCOUNT_CURRENCY;
String currency = DbHelper.DEFAULT_ACCOUNT_CURRENCY;
if (accountController.readAll().size() > 0)
currency = accountController.readAll().get(0).getCurrency();

period = getIntent().getParcelableExtra(KEY_PERIOD);
report = new Report(recordController.getRecordsForPeriod(period), currency, rateController);
ReportMaker reportMaker = new ReportMaker(rateController);
report = reportMaker.getReport(currency, period, recordList);

return period != null;
return true;
}

@Override
protected void initViews() {
super.initViews();

listView.setAdapter(new ReportItemAdapter(ReportActivity.this, report.getReportList()));

/* Scroll list to bottom only once at start */
listView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
private boolean isFirst = true;

@Override
public void onGlobalLayout() {
if (isFirst) {
isFirst = false;
listView.setSelection(listView.getCount() - 1);
}
}
});

initExpandableListView();
}

private void initExpandableListView() {
/* List for groups */
List<Map<String, String>> groupData;

/* List for child items */
List<Map<String, String>> childDataItem;

/* List for childDataItems */
List<List<Map<String, String>>> childData;

/* Buffer map for names of values */
Map<String, String> m;

/* Fill the group list */
groupData = new ArrayList<>();
for (Pair<String, Integer> item : report.getReportList()) {
/* Fill up attribute names for each group */
m = new HashMap<>();
m.put(Constants.TITLE_PARAM_NAME, item.first);
m.put(Constants.PRICE_PARAM_NAME, Integer.toString(item.second));

groupData.add(m);
}

/* List of attributes of groups for reading */
String groupFrom[] = new String[]{Constants.TITLE_PARAM_NAME, Constants.PRICE_PARAM_NAME};
/* List of view IDs for information insertion */
int groupTo[] = new int[]{R.id.tv_category, R.id.tv_total};

/* Create list for childDataItems */
childData = new ArrayList<>();

for (Map<String, String> group : groupData) {
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))) {
int price = record.getPrice();
if (!record.isIncome()) {
price *= -1;
}

m = new HashMap<>();
m.put(Constants.TITLE_PARAM_NAME, record.getTitle());
m.put(Constants.PRICE_PARAM_NAME, Integer.toString(price));

childDataItem.add(m);
}
}

/* Add childDataItem to common childData */
childData.add(childDataItem);
}

/* List of attributes of childItems for reading */
String childFrom[] = new String[]{Constants.TITLE_PARAM_NAME, Constants.PRICE_PARAM_NAME};
/* List of view IDs for information insertion */
int childTo[] = new int[]{R.id.tv_category, R.id.tv_total};

expandableListView.addFooterView(getSummaryReportView(report.getSummaryReportList()));
expandableListView.setAdapter(new ExpandableListReportAdapter(
ReportActivity.this,
groupData,
R.layout.view_report_item_exp,
groupFrom,
groupTo,
childData,
R.layout.view_report_item,
childFrom,
childTo) {
});
}

private View getSummaryReportView(List<Pair<String, Integer>> summaryReportList) {
ViewGroup viewGroup = (ViewGroup) getLayoutInflater().inflate(R.layout.view_summary_report, null);

ReportItemAdapter adapter = new ReportItemAdapter(ReportActivity.this, summaryReportList);

for (int i = 0; i < adapter.getCount(); i++) {
viewGroup.addView(adapter.getView(i, null, null));
}
ReportConverter reportConverter = new ReportConverter(report);

return viewGroup;
expandableListView.addFooterView(new TotalReportViewCreator(ReportActivity.this, report).create());
expandableListView.setAdapter(new ExpandableListReportAdapter(ReportActivity.this, reportConverter));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,11 @@
import android.widget.TextView;

import com.blogspot.e_kanivets.moneytracker.R;
import com.blogspot.e_kanivets.moneytracker.report.ReportConverter;
import com.blogspot.e_kanivets.moneytracker.util.Constants;

import java.util.List;
import java.util.Locale;
import java.util.Map;

import butterknife.Bind;
Expand All @@ -31,6 +33,12 @@ public class ExpandableListReportAdapter extends SimpleExpandableListAdapter {
private int red;
private int green;

public ExpandableListReportAdapter(Context context, ReportConverter converter) {
this(context, converter.getGroupData(), converter.getGroupLayout(),
converter.getGroupFrom(), converter.getGroupTo(), converter.getChildData(),
converter.getChildLayout(), converter.getChildFrom(), converter.getChildTo());
}

@SuppressWarnings("deprecation")
public ExpandableListReportAdapter(Context context, List<? extends Map<String, String>> groupData,
int groupLayout, String[] groupFrom, int[] groupTo,
Expand Down Expand Up @@ -68,7 +76,7 @@ private void customizeView(View view, Map<String, String> values, boolean groupV
if (viewHolder == null) viewHolder = new ViewHolder(view);

/* Customize view to fit to model and UI */
Integer price = Integer.parseInt(values.get(Constants.PRICE_PARAM_NAME));
Double price = Double.parseDouble(values.get(Constants.PRICE_PARAM_NAME));

if (groupView) view.setBackgroundColor(price < 0 ? whiteRed : whiteGreen);
else view.setBackgroundColor(white);
Expand All @@ -77,7 +85,11 @@ private void customizeView(View view, Map<String, String> values, boolean groupV
viewHolder.tvTotal.setTextColor(price >= 0 ? green : red);

viewHolder.tvCategory.setText(values.get(Constants.TITLE_PARAM_NAME));
viewHolder.tvTotal.setText((price >= 0 ? "+ " : "- ") + Math.abs(price));
viewHolder.tvTotal.setText(format(price));
}

private String format(double amount) {
return (amount >= 0 ? "+ " : "- ") + String.format(Locale.getDefault(), "%.0f", Math.abs(amount));
}

public static class ViewHolder {
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
import com.blogspot.e_kanivets.moneytracker.ui.ChangeDateDialog;
import com.blogspot.e_kanivets.moneytracker.util.PrefUtils;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
Expand Down Expand Up @@ -156,6 +157,7 @@ public void addIncome() {
public void showReport() {
Intent intent = new Intent(getActivity(), ReportActivity.class);
intent.putExtra(ReportActivity.KEY_PERIOD, periodController.getPeriod());
intent.putExtra(ReportActivity.KEY_RECORD_LIST, (ArrayList<Record>) recordList);
startActivity(intent);
}

Expand Down
Loading