From 41e7532ef14033429b5498ec3376f34c59575d68 Mon Sep 17 00:00:00 2001 From: Aurelien Hubert Date: Thu, 14 Mar 2019 18:01:31 +0100 Subject: [PATCH] Add transaction view --- .../android/ui/view/RowViewType.kt | 19 +++ .../android/ui/view/TransactionRowView.kt | 71 ++++++++++++ app/src/main/res/layout/row_transaction.xml | 4 +- .../main/res/layout/row_transaction_view.xml | 108 ++++++++++++++++++ 4 files changed, 200 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/net/pokeranalytics/android/ui/view/TransactionRowView.kt create mode 100644 app/src/main/res/layout/row_transaction_view.xml diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt index 8c6cfd9c..2a82aee7 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt @@ -11,8 +11,10 @@ import androidx.core.view.isVisible import androidx.core.widget.ContentLoadingProgressBar import androidx.recyclerview.widget.RecyclerView import kotlinx.android.synthetic.main.row_history_session.view.* +import kotlinx.android.synthetic.main.row_transaction.view.* import net.pokeranalytics.android.R import net.pokeranalytics.android.model.realm.Session +import net.pokeranalytics.android.model.realm.Transaction import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter import net.pokeranalytics.android.ui.view.rowrepresentable.CustomizableRowRepresentable @@ -52,6 +54,7 @@ enum class RowViewType(private var layoutRes: Int) { // Custom row ROW_SESSION(R.layout.row_history_session), + ROW_TRANSACTION(R.layout.row_transaction), ROW_BUTTON(R.layout.row_button), ROW_FOLLOW_US(R.layout.row_follow_us), STAT(R.layout.row_stats_title_value), @@ -79,6 +82,9 @@ enum class RowViewType(private var layoutRes: Int) { // Row Session ROW_SESSION -> RowSessionViewHolder(layout) + // Row Transaction + ROW_TRANSACTION -> RowTransactionViewHolder(layout) + // Row Button ROW_BUTTON -> RowButtonViewHolder(layout) @@ -257,6 +263,19 @@ enum class RowViewType(private var layoutRes: Int) { } } + /** + * Display a transaction view + */ + inner class RowTransactionViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView), BindableHolder { + override fun bind(position: Int, row: RowRepresentable, adapter: RowRepresentableAdapter) { + itemView.transactionRow.setData(row as Transaction) + val listener = View.OnClickListener { + adapter.delegate?.onRowSelected(position, row) + } + itemView.transactionRow.setOnClickListener(listener) + } + } + /** * Display a separator */ diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/TransactionRowView.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/TransactionRowView.kt new file mode 100644 index 00000000..ab45b09c --- /dev/null +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/TransactionRowView.kt @@ -0,0 +1,71 @@ +package net.pokeranalytics.android.ui.view + +import android.content.Context +import android.util.AttributeSet +import android.view.LayoutInflater +import android.widget.FrameLayout +import androidx.constraintlayout.widget.ConstraintLayout +import kotlinx.android.synthetic.main.row_transaction_view.view.* +import net.pokeranalytics.android.R +import net.pokeranalytics.android.calculus.ComputedStat +import net.pokeranalytics.android.calculus.Stat +import net.pokeranalytics.android.model.realm.Transaction +import net.pokeranalytics.android.util.extensions.getDayNumber +import net.pokeranalytics.android.util.extensions.getShortDayName + +/** + * Display a transaction row + */ +class TransactionRowView : FrameLayout { + + private lateinit var rowTransaction: ConstraintLayout + + /** + * Constructors + */ + constructor(context: Context) : super(context) { + init() + } + + constructor(context: Context, attrs: AttributeSet?) : super(context, attrs) { + init() + } + + constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) { + init() + } + + /** + * Init + */ + private fun init() { + val layoutInflater = LayoutInflater.from(context) + rowTransaction = layoutInflater.inflate(R.layout.row_transaction_view, this, false) as ConstraintLayout + val layoutParams = FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT) + addView(rowTransaction, layoutParams) + } + + /** + * Set the session data to the view + */ + fun setData(transaction: Transaction) { + + // Date + rowTransaction.transactionDateDay.text = transaction.date.getShortDayName() + rowTransaction.transactionDateNumber.text = transaction.date.getDayNumber() + + // Title / Game type + var title = transaction.type?.name ?: "" + " " + transaction.comment + var subtitle = transaction.bankroll?.name + + rowTransaction.transactionTitle.text = title + rowTransaction.transactionSubtitle.text = subtitle + + // Amount + val formattedStat = ComputedStat(Stat.NETRESULT, transaction.amount).format(context) + rowTransaction.transactionAmount.setTextColor(formattedStat.getColor(context)) + rowTransaction.transactionAmount.text = formattedStat.text + + } + +} \ No newline at end of file diff --git a/app/src/main/res/layout/row_transaction.xml b/app/src/main/res/layout/row_transaction.xml index 3da4fb88..da410bc5 100644 --- a/app/src/main/res/layout/row_transaction.xml +++ b/app/src/main/res/layout/row_transaction.xml @@ -4,8 +4,8 @@ android:layout_height="wrap_content" android:orientation="vertical"> - diff --git a/app/src/main/res/layout/row_transaction_view.xml b/app/src/main/res/layout/row_transaction_view.xml new file mode 100644 index 00000000..3473977d --- /dev/null +++ b/app/src/main/res/layout/row_transaction_view.xml @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file