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

Commit 44bab97

Browse files
#172. Add review fixes, update build gradle.
1 parent 2f46e3f commit 44bab97

File tree

20 files changed

+128
-127
lines changed

20 files changed

+128
-127
lines changed

app/src/main/java/com/blogspot/e_kanivets/moneytracker/activity/account/edit/fragment/AccountOperationsFragment.kt

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,12 @@ import com.blogspot.e_kanivets.moneytracker.controller.FormatController
99
import com.blogspot.e_kanivets.moneytracker.controller.data.AccountController
1010
import com.blogspot.e_kanivets.moneytracker.controller.data.RecordController
1111
import com.blogspot.e_kanivets.moneytracker.controller.data.TransferController
12-
import com.blogspot.e_kanivets.moneytracker.entity.HeaderItem
13-
import com.blogspot.e_kanivets.moneytracker.entity.RecordAdapterData
1412
import com.blogspot.e_kanivets.moneytracker.entity.RecordItem
1513
import com.blogspot.e_kanivets.moneytracker.entity.data.Account
1614
import com.blogspot.e_kanivets.moneytracker.entity.data.Category
1715
import com.blogspot.e_kanivets.moneytracker.entity.data.Record
1816
import com.blogspot.e_kanivets.moneytracker.entity.data.Transfer
17+
import com.blogspot.e_kanivets.moneytracker.util.RecordItemsBuilder
1918
import kotlinx.android.synthetic.main.fragment_account_operations.*
2019
import javax.inject.Inject
2120

@@ -40,30 +39,17 @@ class AccountOperationsFragment : BaseFragment() {
4039
}
4140

4241
override fun initViews(view: View) {
43-
recyclerView.adapter = RecordAdapter(requireContext(), getRecordAdapterDataList(), false, null)
42+
recyclerView.adapter = RecordAdapter(requireContext(), getRecordItems(), false, null)
4443
}
4544

46-
private fun getRecordAdapterDataList(): List<RecordAdapterData> {
45+
private fun getRecordItems(): List<RecordItem> {
4746
val accountRecords = recordController.getRecordsForAccount(account)
4847
val accountTransfers = transferController.getTransfersForAccount(account)
4948

5049
accountRecords += obtainRecordsFromTransfers(accountTransfers)
5150
accountRecords.sortByDescending { it.time }
5251

53-
val recordAdapterData: MutableList<RecordAdapterData> = mutableListOf()
54-
55-
var lastDate = EMPTY_DATE
56-
57-
for (record in accountRecords) {
58-
if (formatController.formatDateToString(record.time) != lastDate) {
59-
lastDate = formatController.formatDateToString(record.time)
60-
recordAdapterData.add(HeaderItem(lastDate))
61-
}
62-
63-
recordAdapterData.add(RecordItem(record))
64-
}
65-
66-
return recordAdapterData
52+
return RecordItemsBuilder().getRecordItems(accountRecords)
6753
}
6854

6955
private fun obtainRecordsFromTransfers(transfers: List<Transfer>): List<Record> {
@@ -92,7 +78,6 @@ class AccountOperationsFragment : BaseFragment() {
9278
companion object {
9379

9480
private const val KEY_ACCOUNT = "key_account"
95-
private const val EMPTY_DATE = "empty_date"
9681

9782
fun newInstance(account: Account): AccountOperationsFragment {
9883
val fragment = AccountOperationsFragment()

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

Lines changed: 5 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -14,22 +14,21 @@ import com.blogspot.e_kanivets.moneytracker.controller.PreferenceController
1414
import com.blogspot.e_kanivets.moneytracker.controller.data.AccountController
1515
import com.blogspot.e_kanivets.moneytracker.controller.data.ExchangeRateController
1616
import com.blogspot.e_kanivets.moneytracker.controller.data.RecordController
17-
import com.blogspot.e_kanivets.moneytracker.entity.RecordAdapterData
18-
import com.blogspot.e_kanivets.moneytracker.entity.HeaderItem
1917
import com.blogspot.e_kanivets.moneytracker.entity.Period
2018
import com.blogspot.e_kanivets.moneytracker.entity.RecordItem
2119
import com.blogspot.e_kanivets.moneytracker.entity.data.Record
2220
import com.blogspot.e_kanivets.moneytracker.report.ReportMaker
2321
import com.blogspot.e_kanivets.moneytracker.ui.AppRateDialog
2422
import com.blogspot.e_kanivets.moneytracker.util.AnswersProxy
23+
import com.blogspot.e_kanivets.moneytracker.util.RecordItemsBuilder
2524
import kotlinx.android.synthetic.main.activity_main.*
2625
import kotlinx.android.synthetic.main.content_main.*
2726
import javax.inject.Inject
2827

2928
class MainActivity : BaseDrawerActivity() {
3029

3130
private lateinit var recordList: List<Record>
32-
private val recordAdapterDataList: MutableList<RecordAdapterData> = mutableListOf()
31+
private var recordItems: List<RecordItem> = listOf()
3332
private lateinit var period: Period
3433
private lateinit var recordAdapter: RecordAdapter
3534

@@ -137,43 +136,28 @@ class MainActivity : BaseDrawerActivity() {
137136
override fun update() {
138137
recordList = recordController.getRecordsForPeriod(period)
139138
recordList = recordList.reversed()
140-
updateRecordAdapterDataList()
139+
recordItems = RecordItemsBuilder().getRecordItems(recordList)
141140

142141
val currency = currencyController.readDefaultCurrency()
143142

144143
val reportMaker = ReportMaker(rateController)
145144
val report = reportMaker.getRecordReport(currency, period, recordList)
146145

147-
recordAdapter.setRecords(recordAdapterDataList, report, currency, reportMaker.currencyNeeded(currency, recordList))
146+
recordAdapter.setRecords(recordItems, report, currency, reportMaker.currencyNeeded(currency, recordList))
148147

149148
fillDefaultAccount()
150149
}
151150

152151
private fun getCountHeadersItems(position: Int): Int {
153152
var countHeadersItems = 0
154153
for (inOfData in 0 until position) {
155-
if (recordAdapterDataList[inOfData] is HeaderItem) {
154+
if (recordItems[inOfData] is RecordItem.Header) {
156155
countHeadersItems++
157156
}
158157
}
159158
return countHeadersItems
160159
}
161160

162-
private fun updateRecordAdapterDataList() {
163-
recordAdapterDataList.clear()
164-
165-
var lastDate = EMPTY_DATE
166-
for (record in recordList) {
167-
if (formatController.formatDateToString(record.time) != lastDate) {
168-
lastDate = formatController.formatDateToString(record.time)
169-
recordAdapterDataList.add(HeaderItem(lastDate))
170-
}
171-
172-
recordAdapterDataList.add(RecordItem(record))
173-
}
174-
}
175-
176-
177161
private fun showAppRateDialog() {
178162
AnswersProxy.get().logEvent("Show App Rate Dialog")
179163
val dialog = AppRateDialog(this)
@@ -199,7 +183,6 @@ class MainActivity : BaseDrawerActivity() {
199183

200184
companion object {
201185
private const val REQUEST_ACTION_RECORD = 6
202-
private const val EMPTY_DATE = "empty_date"
203186
}
204187

205188
}

app/src/main/java/com/blogspot/e_kanivets/moneytracker/adapter/RecordAdapter.kt

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@ import android.widget.TextView
1111
import com.blogspot.e_kanivets.moneytracker.MtApp
1212
import com.blogspot.e_kanivets.moneytracker.R
1313
import com.blogspot.e_kanivets.moneytracker.controller.FormatController
14-
import com.blogspot.e_kanivets.moneytracker.entity.RecordAdapterData
15-
import com.blogspot.e_kanivets.moneytracker.entity.HeaderItem
1614
import com.blogspot.e_kanivets.moneytracker.entity.RecordItem
1715
import com.blogspot.e_kanivets.moneytracker.report.record.IRecordReport
1816
import com.blogspot.e_kanivets.moneytracker.ui.presenter.ShortSummaryPresenter
@@ -34,14 +32,14 @@ class RecordAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder> {
3432
private var red: Int
3533
private var green: Int
3634

37-
private var items: List<RecordAdapterData>
35+
private var items: List<RecordItem>
3836
private var context: Context
3937

4038
private var summaryPresenter: ShortSummaryPresenter
4139
private var isSummaryViewNeeded: Boolean = false
4240
private var summaryViewHolder: SummaryViewHolder
4341

44-
constructor(context: Context, items: List<RecordAdapterData>, isSummaryViewNeeded: Boolean, itemClickListener: ((Int) -> Unit)?) {
42+
constructor(context: Context, items: List<RecordItem>, isSummaryViewNeeded: Boolean, itemClickListener: ((Int) -> Unit)?) {
4543
this.context = context
4644
this.items = items
4745

@@ -65,7 +63,7 @@ class RecordAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder> {
6563

6664
override fun getItemViewType(position: Int): Int = if (position == 0 && isSummaryViewNeeded) {
6765
TYPE_SUMMARY
68-
} else if (items[position - if (isSummaryViewNeeded) 1 else 0] is HeaderItem) {
66+
} else if (items[position - if (isSummaryViewNeeded) 1 else 0] is RecordItem.Header) {
6967
TYPE_HEADER
7068
} else {
7169
TYPE_RECORD
@@ -78,24 +76,24 @@ class RecordAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder> {
7876
else -> summaryViewHolder
7977
}
8078

81-
override fun onBindViewHolder(rvViewHolder: RecyclerView.ViewHolder, position: Int) {
79+
override fun onBindViewHolder(viewHolder: RecyclerView.ViewHolder, position: Int) {
8280
if (position == 0 && isSummaryViewNeeded) {
8381
//adapter already bound to view
8482
return
8583
}
8684

87-
if (rvViewHolder is RecordViewHolder) {
88-
val record = items[position - if (isSummaryViewNeeded) 1 else 0] as RecordItem
89-
rvViewHolder.tvPrice.setTextColor(if (record.isIncome) green else red)
85+
if (viewHolder is RecordViewHolder) {
86+
val record = items[position - if (isSummaryViewNeeded) 1 else 0] as RecordItem.Record
87+
viewHolder.tvPrice.setTextColor(if (record.isIncome) green else red)
9088

9189
val price = (if (record.isIncome) record.fullPrice else getNegative(record.fullPrice))
92-
rvViewHolder.tvPrice.text = formatController.formatSignedAmount(price)
93-
rvViewHolder.tvTitle.text = record.title
94-
rvViewHolder.tvCategory.text = record.categoryName
95-
rvViewHolder.tvCurrency.text = record.currency
90+
viewHolder.tvPrice.text = formatController.formatSignedAmount(price)
91+
viewHolder.tvTitle.text = record.title
92+
viewHolder.tvCategory.text = record.categoryName
93+
viewHolder.tvCurrency.text = record.currency
9694
} else {
97-
val headerViewHolder = rvViewHolder as HeaderViewHolder
98-
val header = items[position - if (isSummaryViewNeeded) 1 else 0] as HeaderItem
95+
val headerViewHolder = viewHolder as HeaderViewHolder
96+
val header = items[position - if (isSummaryViewNeeded) 1 else 0] as RecordItem.Header
9997
headerViewHolder.tvDate.text = header.date
10098
}
10199
}
@@ -104,7 +102,7 @@ class RecordAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder> {
104102
return -1 * number
105103
}
106104

107-
fun setRecords(itemsList: List<RecordAdapterData>, report: IRecordReport?, currency: String, ratesNeeded: List<String>) {
105+
fun setRecords(itemsList: List<RecordItem>, report: IRecordReport?, currency: String, ratesNeeded: List<String>) {
108106
items = itemsList
109107
summaryPresenter.update(report, currency, ratesNeeded)
110108
notifyDataSetChanged()

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ public class FormatController {
2020
public static final String PRECISION_NONE = "precision_none";
2121

2222
@SuppressLint("SimpleDateFormat")
23-
private static final SimpleDateFormat dateInNumberFormat = new SimpleDateFormat("yyyy-MM-dd");
23+
private static final SimpleDateFormat shortDateFormat = new SimpleDateFormat("yyyy-MM-dd");
2424
@SuppressLint("SimpleDateFormat")
25-
private static final SimpleDateFormat dateInStringFormat = new SimpleDateFormat("d MMMM yyyy");
25+
private static final SimpleDateFormat fullDateFormat = new SimpleDateFormat("d MMMM yyyy");
2626
@SuppressLint("SimpleDateFormat")
2727
private static final SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm");
2828
@SuppressLint("SimpleDateFormat")
@@ -75,11 +75,11 @@ public String formatExpense(double amount, String currency) {
7575
}
7676

7777
public String formatDateToNumber(long timestamp) {
78-
return dateInNumberFormat.format(new Date(timestamp));
78+
return shortDateFormat.format(new Date(timestamp));
7979
}
8080

8181
public String formatDateToString(long timestamp) {
82-
return dateInStringFormat.format(new Date(timestamp));
82+
return fullDateFormat.format(new Date(timestamp));
8383
}
8484

8585
public String formatTime(long timestamp) {

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,15 +133,15 @@ public Period yearPeriod() {
133133
public Period allTimePeriod() {
134134
Calendar cal = Calendar.getInstance();
135135

136-
// set start of date by Jesus
136+
// set start of time by Jesus
137137
cal.set(Calendar.YEAR, 2000);
138138
cal.set(Calendar.MONTH, Calendar.JANUARY);
139139
cal.set(Calendar.DAY_OF_MONTH, 1);
140140
setDayStart(cal);
141141

142142
Date first = cal.getTime();
143143

144-
// set possible end of date
144+
// set possible end of time
145145
cal.set(Calendar.YEAR, 3000);
146146
cal.set(Calendar.MONTH, Calendar.DECEMBER);
147147
cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH));

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ record = validateRecord(record);
9292
@NonNull @Override public List<Record> readWithCondition(String condition, String[] args) {
9393
List<Record> recordList = super.readWithCondition(condition, args);
9494

95-
// Sort record list by date field from smallest to biggest
95+
// Sort record list by time field from smallest to biggest
9696
Collections.sort(recordList, new Comparator<Record>() {
9797
@Override public int compare(Record lhs, Record rhs) {
9898
return lhs.getTime() < rhs.getTime() ? -1 : (lhs.getTime() == rhs.getTime() ? 0 : 1);

app/src/main/java/com/blogspot/e_kanivets/moneytracker/controller/external/Head.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @author Evgenii Kanivets
88
*/
99
public interface Head {
10-
String TIME = "date";
10+
String TIME = "time";
1111
String TITLE = "title";
1212
String CATEGORY = "category";
1313
String PRICE = "price";

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
@@ -26,6 +26,7 @@
2626
import com.blogspot.e_kanivets.moneytracker.ui.PeriodSpinner;
2727
import com.blogspot.e_kanivets.moneytracker.ui.presenter.AccountsSummaryPresenter;
2828
import com.blogspot.e_kanivets.moneytracker.ui.presenter.ShortSummaryPresenter;
29+
import com.blogspot.e_kanivets.moneytracker.util.RecordItemsBuilder;
2930

3031
import javax.inject.Singleton;
3132

@@ -87,4 +88,6 @@ public interface AppComponent {
8788
void inject(EditAccountFragment editAccountFragment);
8889

8990
void inject(AccountOperationsFragment accountRecordsFragment);
91+
92+
void inject(RecordItemsBuilder recordItemsBuilder);
9093
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.blogspot.e_kanivets.moneytracker.entity
2+
3+
sealed class RecordItem {
4+
5+
data class Header(val date: String) : RecordItem()
6+
7+
data class Record(val title: String, val categoryName: String, val fullPrice: Double, val currency: String, val isIncome: Boolean) : RecordItem() {
8+
constructor(record: com.blogspot.e_kanivets.moneytracker.entity.data.Record) : this(record.title, record.category?.name?.toString().orEmpty(), record.fullPrice, record.currency, record.isIncome)
9+
}
10+
}

app/src/main/java/com/blogspot/e_kanivets/moneytracker/entity/RecordAdapterData.kt

Lines changed: 0 additions & 11 deletions
This file was deleted.

0 commit comments

Comments
 (0)