|
|
|
|
@ -7,6 +7,7 @@ import androidx.core.view.isVisible |
|
|
|
|
import androidx.recyclerview.widget.RecyclerView |
|
|
|
|
import kotlinx.android.synthetic.main.row_bottom_sheet_grid_title.view.* |
|
|
|
|
import kotlinx.android.synthetic.main.row_bottom_sheet_title.view.* |
|
|
|
|
import kotlinx.android.synthetic.main.row_header_title_amount.view.* |
|
|
|
|
import kotlinx.android.synthetic.main.row_header_title_value.view.* |
|
|
|
|
import kotlinx.android.synthetic.main.row_history_session.view.* |
|
|
|
|
import kotlinx.android.synthetic.main.row_title.view.* |
|
|
|
|
@ -31,7 +32,7 @@ interface BindableHolder { |
|
|
|
|
enum class RowViewType { |
|
|
|
|
HEADER, |
|
|
|
|
HEADER_TITLE_VALUE, |
|
|
|
|
HEADER_DOUBLE_VALUES, |
|
|
|
|
HEADER_TITLE_AMOUNT, |
|
|
|
|
EDIT_TEXT, |
|
|
|
|
TITLE, |
|
|
|
|
TITLE_VALUE, |
|
|
|
|
@ -48,98 +49,35 @@ enum class RowViewType { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
inner class RowSessionViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), |
|
|
|
|
inner class HeaderTitleValueViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), |
|
|
|
|
BindableHolder { |
|
|
|
|
|
|
|
|
|
override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) { |
|
|
|
|
|
|
|
|
|
if (row.displayHeader) { |
|
|
|
|
itemView.sessionHeader.isVisible = true |
|
|
|
|
itemView.sessionHeader.text = row.headerValues.firstOrNull() ?: "" |
|
|
|
|
} else { |
|
|
|
|
itemView.sessionHeader.isVisible = false |
|
|
|
|
itemView.rowHeaderTitleValue_title.text = row.localizedTitle(itemView.context) |
|
|
|
|
adapter.dataSource?.let { |
|
|
|
|
itemView.rowHeaderTitleValue_value.text = it.stringForRow(row, itemView.context) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
itemView.sessionRow.setData(row as Session) |
|
|
|
|
val listener = View.OnClickListener { |
|
|
|
|
adapter.delegate?.onRowSelected(position, row) |
|
|
|
|
} |
|
|
|
|
itemView.sessionRow.setOnClickListener(listener) |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
inner class CellSessionViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), BindableHolder { |
|
|
|
|
override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) { |
|
|
|
|
itemView.title.text = row.localizedTitle(itemView.context) |
|
|
|
|
val listener = View.OnClickListener { |
|
|
|
|
adapter.delegate?.onRowSelected(position, row) |
|
|
|
|
} |
|
|
|
|
itemView.container.setOnClickListener(listener) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
inner class DataViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), BindableHolder { |
|
|
|
|
override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) { |
|
|
|
|
itemView.rowTitle_title.text = row.getDisplayName() |
|
|
|
|
val listener = View.OnClickListener { |
|
|
|
|
adapter.delegate?.onRowSelected(position, row) |
|
|
|
|
} |
|
|
|
|
itemView.rowTitle_container.setOnClickListener(listener) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
inner class BottomSheetDataViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), BindableHolder { |
|
|
|
|
override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) { |
|
|
|
|
itemView.rowBottomSheet_title.text = row.getDisplayName() |
|
|
|
|
val listener = View.OnClickListener { |
|
|
|
|
adapter.delegate?.onRowSelected(position, row) |
|
|
|
|
} |
|
|
|
|
itemView.rowBottomSheet_container.setOnClickListener(listener) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
inner class TitleViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), |
|
|
|
|
BindableHolder { |
|
|
|
|
override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) { |
|
|
|
|
itemView.rowTitle_title.text = row.localizedTitle(itemView.context) |
|
|
|
|
val listener = View.OnClickListener { |
|
|
|
|
adapter.delegate?.onRowSelected(position, row) |
|
|
|
|
} |
|
|
|
|
itemView.rowTitle_container.setOnClickListener(listener) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
inner class HeaderTitleValueViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), |
|
|
|
|
BindableHolder { |
|
|
|
|
override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) { |
|
|
|
|
itemView.rowHeaderTitleValue_title.text = row.localizedTitle(itemView.context) |
|
|
|
|
adapter.dataSource?.let { |
|
|
|
|
itemView.rowHeaderTitleValue_value.text = it.stringForRow(row, itemView.context) |
|
|
|
|
} |
|
|
|
|
val listener = View.OnClickListener { |
|
|
|
|
adapter.delegate?.onRowSelected(position, row) |
|
|
|
|
} |
|
|
|
|
itemView.rowHeaderTitleValue_container.setOnClickListener(listener) |
|
|
|
|
//itemView.rowHeaderTitleValue_container.setOnClickListener(listener) |
|
|
|
|
itemView.rowHeaderTitleValue_separator.visibility = if (row.needSeparator) View.VISIBLE else View.GONE |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
inner class HeaderDoubleValuesViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), |
|
|
|
|
inner class HeaderTitleAmountViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), |
|
|
|
|
BindableHolder { |
|
|
|
|
override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) { |
|
|
|
|
|
|
|
|
|
if (row is HeaderRowRepresentable) { |
|
|
|
|
|
|
|
|
|
if (row.resId != null) { |
|
|
|
|
itemView.rowHeaderTitleValue_title.text = row.localizedTitle(itemView.context) |
|
|
|
|
itemView.rowHeaderTitleAmount_title.text = row.localizedTitle(itemView.context) |
|
|
|
|
} else if (row.title != null) { |
|
|
|
|
itemView.rowHeaderTitleValue_title.text = row.title |
|
|
|
|
itemView.rowHeaderTitleAmount_title.text = row.title |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
itemView.rowHeaderTitleValue_value.isCurrency = true |
|
|
|
|
itemView.rowHeaderTitleValue_value.text = row.value |
|
|
|
|
itemView.rowHeaderTitleAmount_value.isCurrency = true |
|
|
|
|
itemView.rowHeaderTitleAmount_value.amount = row.value?.toDouble() ?: 0.0 |
|
|
|
|
/* |
|
|
|
|
when (row) { |
|
|
|
|
HeaderRowRepresentable.HEADER_SESSION_DURATION -> { |
|
|
|
|
@ -158,6 +96,18 @@ enum class RowViewType { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
inner class TitleViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), |
|
|
|
|
BindableHolder { |
|
|
|
|
override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) { |
|
|
|
|
itemView.rowTitle_title.text = row.localizedTitle(itemView.context) |
|
|
|
|
val listener = View.OnClickListener { |
|
|
|
|
adapter.delegate?.onRowSelected(position, row) |
|
|
|
|
} |
|
|
|
|
itemView.rowTitle_container.setOnClickListener(listener) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
inner class TitleValueViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), |
|
|
|
|
BindableHolder { |
|
|
|
|
override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) { |
|
|
|
|
@ -173,6 +123,16 @@ enum class RowViewType { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
inner class TitleGridSessionViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), BindableHolder { |
|
|
|
|
override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) { |
|
|
|
|
itemView.title.text = row.localizedTitle(itemView.context) |
|
|
|
|
val listener = View.OnClickListener { |
|
|
|
|
adapter.delegate?.onRowSelected(position, row) |
|
|
|
|
} |
|
|
|
|
itemView.container.setOnClickListener(listener) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
inner class TitleSwitchViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), |
|
|
|
|
BindableHolder { |
|
|
|
|
override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) { |
|
|
|
|
@ -217,26 +177,69 @@ enum class RowViewType { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
inner class DataViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), BindableHolder { |
|
|
|
|
override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) { |
|
|
|
|
itemView.rowTitle_title.text = row.getDisplayName() |
|
|
|
|
val listener = View.OnClickListener { |
|
|
|
|
adapter.delegate?.onRowSelected(position, row) |
|
|
|
|
} |
|
|
|
|
itemView.rowTitle_container.setOnClickListener(listener) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
inner class BottomSheetDataViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), BindableHolder { |
|
|
|
|
override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) { |
|
|
|
|
itemView.rowBottomSheet_title.text = row.getDisplayName() |
|
|
|
|
val listener = View.OnClickListener { |
|
|
|
|
adapter.delegate?.onRowSelected(position, row) |
|
|
|
|
} |
|
|
|
|
itemView.rowBottomSheet_container.setOnClickListener(listener) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
inner class RowSessionViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), |
|
|
|
|
BindableHolder { |
|
|
|
|
|
|
|
|
|
override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) { |
|
|
|
|
|
|
|
|
|
if (row.displayHeader) { |
|
|
|
|
itemView.sessionHeader.isVisible = true |
|
|
|
|
itemView.sessionHeader.text = row.headerValues.firstOrNull() ?: "" |
|
|
|
|
} else { |
|
|
|
|
itemView.sessionHeader.isVisible = false |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
itemView.sessionRow.setData(row as Session) |
|
|
|
|
val listener = View.OnClickListener { |
|
|
|
|
adapter.delegate?.onRowSelected(position, row) |
|
|
|
|
} |
|
|
|
|
itemView.sessionRow.setOnClickListener(listener) |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* View holder |
|
|
|
|
*/ |
|
|
|
|
fun viewHolder(parent: ViewGroup): RecyclerView.ViewHolder { |
|
|
|
|
return when (this) { |
|
|
|
|
TITLE -> TitleViewHolder( |
|
|
|
|
HEADER_TITLE_VALUE -> HeaderTitleValueViewHolder( |
|
|
|
|
LayoutInflater.from(parent.context).inflate( |
|
|
|
|
R.layout.row_title, |
|
|
|
|
R.layout.row_header_title_value, |
|
|
|
|
parent, |
|
|
|
|
false |
|
|
|
|
) |
|
|
|
|
) |
|
|
|
|
HEADER_TITLE_VALUE -> HeaderTitleValueViewHolder( |
|
|
|
|
HEADER_TITLE_AMOUNT -> HeaderTitleAmountViewHolder( |
|
|
|
|
LayoutInflater.from(parent.context).inflate( |
|
|
|
|
R.layout.row_header_title_value, |
|
|
|
|
R.layout.row_header_title_amount, |
|
|
|
|
parent, |
|
|
|
|
false |
|
|
|
|
) |
|
|
|
|
) |
|
|
|
|
HEADER_DOUBLE_VALUES -> HeaderDoubleValuesViewHolder( |
|
|
|
|
TITLE -> TitleViewHolder( |
|
|
|
|
LayoutInflater.from(parent.context).inflate( |
|
|
|
|
R.layout.row_header_title_value, |
|
|
|
|
R.layout.row_title, |
|
|
|
|
parent, |
|
|
|
|
false |
|
|
|
|
) |
|
|
|
|
@ -248,12 +251,11 @@ enum class RowViewType { |
|
|
|
|
false |
|
|
|
|
) |
|
|
|
|
) |
|
|
|
|
TITLE_VALUE_ACTION -> TitleValueActionViewHolder( |
|
|
|
|
TITLE_GRID -> TitleGridSessionViewHolder( |
|
|
|
|
LayoutInflater.from(parent.context).inflate( |
|
|
|
|
R.layout.row_title_value_action, |
|
|
|
|
R.layout.row_bottom_sheet_grid_title, |
|
|
|
|
parent, |
|
|
|
|
false |
|
|
|
|
) |
|
|
|
|
false) |
|
|
|
|
) |
|
|
|
|
TITLE_SWITCH -> TitleSwitchViewHolder( |
|
|
|
|
LayoutInflater.from(parent.context).inflate( |
|
|
|
|
@ -262,6 +264,13 @@ enum class RowViewType { |
|
|
|
|
false |
|
|
|
|
) |
|
|
|
|
) |
|
|
|
|
TITLE_VALUE_ACTION -> TitleValueActionViewHolder( |
|
|
|
|
LayoutInflater.from(parent.context).inflate( |
|
|
|
|
R.layout.row_title_value_action, |
|
|
|
|
parent, |
|
|
|
|
false |
|
|
|
|
) |
|
|
|
|
) |
|
|
|
|
DATA -> DataViewHolder( |
|
|
|
|
LayoutInflater.from(parent.context).inflate( |
|
|
|
|
R.layout.row_title, |
|
|
|
|
@ -276,12 +285,6 @@ enum class RowViewType { |
|
|
|
|
false |
|
|
|
|
) |
|
|
|
|
) |
|
|
|
|
TITLE_GRID -> CellSessionViewHolder( |
|
|
|
|
LayoutInflater.from(parent.context).inflate( |
|
|
|
|
R.layout.row_bottom_sheet_grid_title, |
|
|
|
|
parent, |
|
|
|
|
false) |
|
|
|
|
) |
|
|
|
|
ROW_SESSION -> RowSessionViewHolder( |
|
|
|
|
LayoutInflater.from(parent.context).inflate( |
|
|
|
|
R.layout.row_history_session, |
|
|
|
|
|