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

Commit 04423bd

Browse files
author
Evgenii
committed
Merge pull request #78 from evgenii-kanivets/charts
[5h 30m]. Charts
2 parents 42767e7 + 07f2dbc commit 04423bd

32 files changed

+540
-77
lines changed

app/build.gradle

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,14 @@ dependencies {
4848
compile 'com.android.support:support-v4:23.2.1'
4949
compile 'com.android.support:appcompat-v7:23.2.1'
5050
compile 'com.android.support:design:23.2.1'
51+
// View annotation bindings
5152
compile 'com.jakewharton:butterknife:7.0.1'
53+
// Dependency injection tool
5254
compile 'com.google.dagger:dagger:2.0.1'
55+
// Charts
56+
compile 'com.github.PhilJay:MPAndroidChart:v2.2.4'
57+
// Advanced logging tool
58+
compile 'com.jakewharton.timber:timber:4.1.2'
5359

5460
apt 'com.google.dagger:dagger-compiler:2.0.1'
5561
provided 'org.glassfish:javax.annotation:10.0-b28'

app/src/main/AndroidManifest.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,11 @@
6868
android:label="@string/title_settings"
6969
android:screenOrientation="portrait"
7070
android:theme="@style/Theme.Default" />
71+
<activity
72+
android:name=".activity.ChartsActivity"
73+
android:label="@string/title_charts"
74+
android:screenOrientation="portrait"
75+
android:theme="@style/Theme.Default" />
7176

7277
<provider
7378
android:name="android.support.v4.content.FileProvider"

app/src/main/java/com/blogspot/e_kanivets/moneytracker/MtApp.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
import com.blogspot.e_kanivets.moneytracker.di.module.ControllerModule;
88
import com.blogspot.e_kanivets.moneytracker.di.module.repo.CachedRepoModule;
99

10+
import timber.log.Timber;
11+
1012
/**
1113
* Custom application implementation.
1214
* Created on 29/08/14.
@@ -29,6 +31,9 @@ public void onCreate() {
2931

3032
mtApp = this;
3133
component = buildComponent();
34+
35+
if (BuildConfig.DEBUG) Timber.plant(new Timber.DebugTree());
36+
else Timber.plant(new ReleaseTree());
3237
}
3338

3439
public AppComponent getAppComponent() {
@@ -41,4 +46,12 @@ private AppComponent buildComponent() {
4146
.controllerModule(new ControllerModule(get()))
4247
.build();
4348
}
49+
50+
private static class ReleaseTree extends Timber.Tree {
51+
52+
@Override
53+
protected void log(int priority, String tag, String message, Throwable t) {
54+
// Do nothing fot now
55+
}
56+
}
4457
}
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
package com.blogspot.e_kanivets.moneytracker.activity;
2+
3+
import com.blogspot.e_kanivets.moneytracker.R;
4+
import com.blogspot.e_kanivets.moneytracker.activity.base.BaseBackActivity;
5+
import com.blogspot.e_kanivets.moneytracker.controller.CurrencyController;
6+
import com.blogspot.e_kanivets.moneytracker.controller.data.ExchangeRateController;
7+
import com.blogspot.e_kanivets.moneytracker.controller.data.RecordController;
8+
import com.blogspot.e_kanivets.moneytracker.entity.data.Record;
9+
import com.blogspot.e_kanivets.moneytracker.report.ReportMaker;
10+
import com.blogspot.e_kanivets.moneytracker.report.chart.BarChartConverter;
11+
import com.blogspot.e_kanivets.moneytracker.report.chart.IMonthReport;
12+
import com.github.mikephil.charting.charts.BarChart;
13+
import com.github.mikephil.charting.data.BarData;
14+
15+
import java.util.List;
16+
17+
import javax.inject.Inject;
18+
19+
import butterknife.Bind;
20+
21+
public class ChartsActivity extends BaseBackActivity {
22+
23+
@Inject
24+
RecordController recordController;
25+
@Inject
26+
ExchangeRateController exchangeRateController;
27+
@Inject
28+
CurrencyController currencyController;
29+
30+
@Bind(R.id.bar_chart)
31+
BarChart barChart;
32+
33+
@Override
34+
protected int getContentViewId() {
35+
return R.layout.activity_charts;
36+
}
37+
38+
@Override
39+
protected boolean initData() {
40+
boolean result = super.initData();
41+
getAppComponent().inject(ChartsActivity.this);
42+
return result;
43+
}
44+
45+
@Override
46+
protected void initViews() {
47+
super.initViews();
48+
49+
ReportMaker reportMaker = new ReportMaker(exchangeRateController);
50+
String currency = currencyController.readDefaultCurrency();
51+
List<Record> recordList = recordController.readAll();
52+
List<String> currencyNeeded = reportMaker.currencyNeeded(currency, recordList);
53+
54+
IMonthReport monthReport = null;
55+
if (currencyNeeded.isEmpty()) monthReport = reportMaker.getMonthReport(currency, recordList);
56+
else barChart.setNoDataText(createRatesNeededList(currency, currencyNeeded));
57+
58+
if (monthReport != null) {
59+
BarChartConverter barChartConverter = new BarChartConverter(ChartsActivity.this,
60+
monthReport);
61+
62+
BarData barData = new BarData(barChartConverter.getXAxisValueList(),
63+
barChartConverter.getBarDataSetList());
64+
barData.setDrawValues(false);
65+
66+
barChart.setData(barData);
67+
barChart.setDescription(null);
68+
barChart.setVisibleXRangeMinimum(8);
69+
barChart.setScaleYEnabled(false);
70+
barChart.setVisibleXRangeMaximum(34);
71+
barChart.setHighlightPerDragEnabled(false);
72+
barChart.setHighlightPerTapEnabled(false);
73+
}
74+
}
75+
76+
protected String createRatesNeededList(String currency, List<String> ratesNeeded) {
77+
StringBuilder sb = new StringBuilder(getString(R.string.error_exchange_rates));
78+
79+
for (String str : ratesNeeded) {
80+
sb.append("\n").append(str).append(getString(R.string.arrow)).append(currency);
81+
}
82+
83+
return sb.toString();
84+
}
85+
}

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import android.net.Uri;
55
import android.support.annotation.NonNull;
66
import android.support.v4.content.FileProvider;
7-
import android.util.Log;
87

98
import com.blogspot.e_kanivets.moneytracker.R;
109
import com.blogspot.e_kanivets.moneytracker.activity.base.BaseBackActivity;
@@ -18,6 +17,7 @@
1817
import javax.inject.Inject;
1918

2019
import butterknife.OnClick;
20+
import timber.log.Timber;
2121

2222
public class ExportActivity extends BaseBackActivity {
2323
@SuppressWarnings("unused")
@@ -46,7 +46,7 @@ public void exportRecords() {
4646

4747
File exportDir = new File(getCacheDir(), "export");
4848
boolean exportDirCreated = exportDir.mkdirs();
49-
Log.d(TAG, "exportDirCreated: " + exportDirCreated);
49+
Timber.d("ExportDirCreated: %b", exportDirCreated);
5050

5151
File outFile;
5252
if (exportDir.exists()) outFile = new File(exportDir, DEFAULT_EXPORT_FILE_NAME);

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

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@
1313
import com.blogspot.e_kanivets.moneytracker.controller.data.ExchangeRateController;
1414
import com.blogspot.e_kanivets.moneytracker.entity.Period;
1515
import com.blogspot.e_kanivets.moneytracker.entity.data.Record;
16-
import com.blogspot.e_kanivets.moneytracker.report.ReportConverter;
16+
import com.blogspot.e_kanivets.moneytracker.report.record.RecordReportConverter;
1717
import com.blogspot.e_kanivets.moneytracker.report.ReportMaker;
18-
import com.blogspot.e_kanivets.moneytracker.report.base.IReport;
18+
import com.blogspot.e_kanivets.moneytracker.report.record.IRecordReport;
1919
import com.blogspot.e_kanivets.moneytracker.ui.presenter.ShortSummaryPresenter;
2020

2121
import java.util.List;
@@ -77,13 +77,13 @@ protected void initViews() {
7777

7878
private void update(String currency) {
7979
ReportMaker reportMaker = new ReportMaker(rateController);
80-
IReport report = reportMaker.getReport(currency, period, recordList);
80+
IRecordReport report = reportMaker.getRecordReport(currency, period, recordList);
8181

8282
ExpandableListReportAdapter adapter = null;
8383

8484
if (report != null) {
85-
ReportConverter reportConverter = new ReportConverter(report);
86-
adapter = new ExpandableListReportAdapter(ReportActivity.this, reportConverter);
85+
RecordReportConverter recordReportConverter = new RecordReportConverter(report);
86+
adapter = new ExpandableListReportAdapter(ReportActivity.this, recordReportConverter);
8787
}
8888

8989
expandableListView.setAdapter(adapter);

app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/base/BaseDrawerActivity.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import android.view.MenuItem;
1010

1111
import com.blogspot.e_kanivets.moneytracker.R;
12+
import com.blogspot.e_kanivets.moneytracker.activity.ChartsActivity;
1213
import com.blogspot.e_kanivets.moneytracker.activity.ExportActivity;
1314
import com.blogspot.e_kanivets.moneytracker.activity.SettingsActivity;
1415
import com.blogspot.e_kanivets.moneytracker.activity.account.AccountsActivity;
@@ -77,6 +78,10 @@ public boolean onNavigationItemSelected(MenuItem item) {
7778
REQUEST_RATES);
7879
break;
7980

81+
case R.id.nav_charts:
82+
startActivity(new Intent(BaseDrawerActivity.this, ChartsActivity.class));
83+
break;
84+
8085
case R.id.nav_export:
8186
startActivity(new Intent(BaseDrawerActivity.this, ExportActivity.class));
8287
break;

app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/record/MainActivity.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
import com.blogspot.e_kanivets.moneytracker.entity.data.Record;
2525
import com.blogspot.e_kanivets.moneytracker.entity.Period;
2626
import com.blogspot.e_kanivets.moneytracker.report.ReportMaker;
27-
import com.blogspot.e_kanivets.moneytracker.report.base.IReport;
27+
import com.blogspot.e_kanivets.moneytracker.report.record.IRecordReport;
2828
import com.blogspot.e_kanivets.moneytracker.ui.AppRateDialog;
2929
import com.blogspot.e_kanivets.moneytracker.ui.PeriodSpinner;
3030
import com.blogspot.e_kanivets.moneytracker.ui.presenter.ShortSummaryPresenter;
@@ -194,7 +194,7 @@ protected void update() {
194194
String currency = currencyController.readDefaultCurrency();
195195

196196
ReportMaker reportMaker = new ReportMaker(rateController);
197-
IReport report = reportMaker.getReport(currency, period, recordList);
197+
IRecordReport report = reportMaker.getRecordReport(currency, period, recordList);
198198
summaryPresenter.update(report, currency, reportMaker.currencyNeeded(currency, recordList));
199199

200200
fillDefaultAccount();

app/src/main/java/com/blogspot/e_kanivets/moneytracker/adapter/ExpandableListReportAdapter.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
import android.widget.TextView;
99

1010
import com.blogspot.e_kanivets.moneytracker.R;
11-
import com.blogspot.e_kanivets.moneytracker.report.ReportConverter;
11+
import com.blogspot.e_kanivets.moneytracker.report.record.RecordReportConverter;
1212

1313
import java.util.List;
1414
import java.util.Locale;
@@ -32,7 +32,7 @@ public class ExpandableListReportAdapter extends SimpleExpandableListAdapter {
3232
private int red;
3333
private int green;
3434

35-
public ExpandableListReportAdapter(Context context, ReportConverter converter) {
35+
public ExpandableListReportAdapter(Context context, RecordReportConverter converter) {
3636
this(context, converter.getGroupData(), converter.getGroupLayout(),
3737
converter.getGroupFrom(), converter.getGroupTo(), converter.getChildData(),
3838
converter.getChildLayout(), converter.getChildFrom(), converter.getChildTo());
@@ -75,15 +75,15 @@ private void customizeView(View view, Map<String, String> values, boolean groupV
7575
if (viewHolder == null) viewHolder = new ViewHolder(view);
7676

7777
/* Customize view to fit to model and UI */
78-
Double price = Double.parseDouble(values.get(ReportConverter.PRICE_PARAM_NAME));
78+
Double price = Double.parseDouble(values.get(RecordReportConverter.PRICE_PARAM_NAME));
7979

8080
if (groupView) view.setBackgroundColor(price < 0 ? whiteRed : whiteGreen);
8181
else view.setBackgroundColor(white);
8282

8383
//Set color of total
8484
viewHolder.tvTotal.setTextColor(price >= 0 ? green : red);
8585

86-
viewHolder.tvCategory.setText(values.get(ReportConverter.TITLE_PARAM_NAME));
86+
viewHolder.tvCategory.setText(values.get(RecordReportConverter.TITLE_PARAM_NAME));
8787
viewHolder.tvTotal.setText(format(price));
8888
}
8989

app/src/main/java/com/blogspot/e_kanivets/moneytracker/di/AppComponent.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.blogspot.e_kanivets.moneytracker.di;
22

3+
import com.blogspot.e_kanivets.moneytracker.activity.ChartsActivity;
34
import com.blogspot.e_kanivets.moneytracker.activity.ExportActivity;
45
import com.blogspot.e_kanivets.moneytracker.activity.ReportActivity;
56
import com.blogspot.e_kanivets.moneytracker.activity.SettingsActivity;
@@ -47,6 +48,8 @@ public interface AppComponent {
4748

4849
void inject(ReportActivity reportActivity);
4950

51+
void inject(ChartsActivity chartsActivity);
52+
5053
void inject(SettingsActivity.SettingsFragment settingsFragment);
5154

5255
void inject(AccountsSummaryPresenter accountsSummaryPresenter);

0 commit comments

Comments
 (0)