@@ -11,10 +11,12 @@ import android.widget.TextView
1111import com.blogspot.e_kanivets.moneytracker.MtApp
1212import com.blogspot.e_kanivets.moneytracker.R
1313import com.blogspot.e_kanivets.moneytracker.controller.FormatController
14- import com.blogspot.e_kanivets.moneytracker.entity.data.Record
14+ import com.blogspot.e_kanivets.moneytracker.entity.RecordItem
1515import com.blogspot.e_kanivets.moneytracker.report.record.IRecordReport
1616import com.blogspot.e_kanivets.moneytracker.ui.presenter.ShortSummaryPresenter
17+ import kotlinx.android.synthetic.main.view_header_date.view.*
1718import kotlinx.android.synthetic.main.view_record.view.*
19+ import kotlinx.android.synthetic.main.view_record.view.container
1820import kotlinx.android.synthetic.main.view_summary_records.view.*
1921import javax.inject.Inject
2022
@@ -30,16 +32,16 @@ class RecordAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder> {
3032 private var red: Int
3133 private var green: Int
3234
33- private var records : List <Record >
35+ private var items : List <RecordItem >
3436 private var context: Context
3537
3638 private var summaryPresenter: ShortSummaryPresenter
37- private var isHeaderViewNeeded : Boolean = false
38- private var headerViewHolder : HeaderViewHolder
39+ private var isSummaryViewNeeded : Boolean = false
40+ private var summaryViewHolder : SummaryViewHolder
3941
40- constructor (context: Context , records : List <Record >, isHeaderViewNeeded : Boolean , itemClickListener: ((Int ) -> Unit )? ) {
42+ constructor (context: Context , items : List <RecordItem >, isSummaryViewNeeded : Boolean , itemClickListener: ((Int ) -> Unit )? ) {
4143 this .context = context
42- this .records = records
44+ this .items = items
4345
4446 MtApp .get().appComponent.inject(this )
4547
@@ -51,68 +53,71 @@ class RecordAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder> {
5153 summaryPresenter = ShortSummaryPresenter (context)
5254
5355 this .itemClickListener = itemClickListener
54- this .isHeaderViewNeeded = isHeaderViewNeeded
56+ this .isSummaryViewNeeded = isSummaryViewNeeded
5557
56- headerViewHolder = HeaderViewHolder (LayoutInflater .from(context).inflate(R .layout.view_summary_records, null ), itemClickListener)
57- summaryPresenter.create(true , headerViewHolder )
58+ summaryViewHolder = SummaryViewHolder (LayoutInflater .from(context).inflate(R .layout.view_summary_records, null ), itemClickListener)
59+ summaryPresenter.create(true , summaryViewHolder )
5860 }
5961
60- override fun getItemCount () = records .size + if (isHeaderViewNeeded ) 1 else 0
62+ override fun getItemCount () = items .size + if (isSummaryViewNeeded ) 1 else 0
6163
62- override fun getItemViewType (position : Int ): Int = if (position == 0 && isHeaderViewNeeded) {
64+ override fun getItemViewType (position : Int ): Int = if (position == 0 && isSummaryViewNeeded) {
65+ TYPE_SUMMARY
66+ } else if (items[position - if (isSummaryViewNeeded) 1 else 0 ] is RecordItem .Header ) {
6367 TYPE_HEADER
6468 } else {
65- TYPE_ITEM
69+ TYPE_RECORD
6670 }
6771
6872 override fun onCreateViewHolder (parent : ViewGroup , viewType : Int ): RecyclerView .ViewHolder =
69- if (viewType == TYPE_HEADER ) {
70- headerViewHolder
71- } else {
72- ViewHolder ( LayoutInflater .from(context).inflate( R .layout.view_record, parent, false ), itemClickListener)
73+ when (viewType) {
74+ TYPE_RECORD -> RecordViewHolder ( LayoutInflater .from(context).inflate( R .layout.view_record, parent, false ), itemClickListener)
75+ TYPE_HEADER -> HeaderViewHolder ( LayoutInflater .from(context).inflate( R .layout.view_header_date, parent, false ))
76+ else -> summaryViewHolder
7377 }
7478
75- override fun onBindViewHolder (rvViewHolder : RecyclerView .ViewHolder , position : Int ) {
76- if (position == 0 && isHeaderViewNeeded ) {
79+ override fun onBindViewHolder (viewHolder : RecyclerView .ViewHolder , position : Int ) {
80+ if (position == 0 && isSummaryViewNeeded ) {
7781 // adapter already bound to view
7882 return
7983 }
8084
81- val viewHolder = rvViewHolder as ViewHolder
82- val record: Record = records[position - if (isHeaderViewNeeded) 1 else 0 ]
83- viewHolder.container.setBackgroundColor(if (record.isIncome) whiteGreen else whiteRed)
84- viewHolder.tvPrice.setTextColor(if (record.isIncome) green else red)
85-
86- viewHolder.tvDateAndTime.text = formatController.formatDateAndTime(record.time)
87- val price = (if (record.isIncome) record.fullPrice else getNegative(record.fullPrice))
88- viewHolder.tvPrice.text = formatController.formatSignedAmount(price)
89- viewHolder.tvTitle.text = record.title
90- viewHolder.tvCategory.text = record.category?.name
91- viewHolder.tvCurrency.text = record.currency
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)
88+
89+ val price = (if (record.isIncome) record.fullPrice else getNegative(record.fullPrice))
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
94+ } else {
95+ val headerViewHolder = viewHolder as HeaderViewHolder
96+ val header = items[position - if (isSummaryViewNeeded) 1 else 0 ] as RecordItem .Header
97+ headerViewHolder.tvDate.text = header.date
98+ }
9299 }
93100
94101 private fun getNegative (number : Double ): Double {
95102 return - 1 * number
96103 }
97104
98- fun setRecords (recordsList : List <Record >, report : IRecordReport ? , currency : String , ratesNeeded : List <String >) {
99- records = recordsList
105+ fun setRecords (itemsList : List <RecordItem >, report : IRecordReport ? , currency : String , ratesNeeded : List <String >) {
106+ items = itemsList
100107 summaryPresenter.update(report, currency, ratesNeeded)
101108 notifyDataSetChanged()
102109 }
103110
104- class ViewHolder : RecyclerView .ViewHolder {
111+ class RecordViewHolder : RecyclerView .ViewHolder {
105112
106113 var container: LinearLayout
107- var tvDateAndTime: TextView
108114 var tvPrice: TextView
109115 var tvTitle: TextView
110116 var tvCategory: TextView
111117 var tvCurrency: TextView
112118
113119 constructor (view: View , itemClickListener: ((Int ) -> Unit )? ) : super (view) {
114120 container = view.container
115- tvDateAndTime = view.tvDateAndTime
116121 tvPrice = view.tvPrice
117122 tvTitle = view.tvTitle
118123 tvCategory = view.tvCategory
@@ -124,7 +129,11 @@ class RecordAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder> {
124129 }
125130 }
126131
127- class HeaderViewHolder : RecyclerView .ViewHolder , ShortSummaryPresenter .SummaryViewInterface {
132+ class HeaderViewHolder (view : View ) : RecyclerView.ViewHolder(view) {
133+ val tvDate: TextView = view.tvDate
134+ }
135+
136+ class SummaryViewHolder : RecyclerView .ViewHolder , ShortSummaryPresenter .SummaryViewInterface {
128137
129138 private var tvPeriod: TextView
130139 private var tvTotalIncome: TextView
@@ -145,15 +154,15 @@ class RecordAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder> {
145154 tvTotalExpense = view.tvTotalExpense
146155 tvTotal = view.tvTotal
147156
148- view.setOnClickListener {
157+ view.cvSummary. setOnClickListener {
149158 itemClickListener?.invoke(0 )
150159 }
151160 }
152161 }
153162
154163 companion object {
155-
156- private const val TYPE_HEADER = 0
157- private const val TYPE_ITEM = 1
164+ private const val TYPE_SUMMARY = 0
165+ private const val TYPE_HEADER = 1
166+ private const val TYPE_RECORD = 2
158167 }
159168}
0 commit comments