X-Git-Url: https://git.ktnx.net/?p=mobile-ledger.git;a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Fui%2Ftransaction_list%2FTransactionRowHolder.java;h=876430f5de06e4c1b4b25a9061a5f9d74abfe94b;hp=c76dbcc7ff4c900435c2c754af50e17fb377d773;hb=HEAD;hpb=0fa224a099da7c2a0e2ad4cb7db8a7391de9be15 diff --git a/app/src/main/java/net/ktnx/mobileledger/ui/transaction_list/TransactionRowHolder.java b/app/src/main/java/net/ktnx/mobileledger/ui/transaction_list/TransactionRowHolder.java index c76dbcc7..876430f5 100644 --- a/app/src/main/java/net/ktnx/mobileledger/ui/transaction_list/TransactionRowHolder.java +++ b/app/src/main/java/net/ktnx/mobileledger/ui/transaction_list/TransactionRowHolder.java @@ -1,5 +1,5 @@ /* - * Copyright © 2019 Damyan Ivanov. + * Copyright © 2021 Damyan Ivanov. * This file is part of MoLe. * MoLe is free software: you can distribute it and/or modify it * under the term of the GNU General Public License as published by @@ -17,34 +17,113 @@ package net.ktnx.mobileledger.ui.transaction_list; -import androidx.annotation.NonNull; -import androidx.constraintlayout.widget.ConstraintLayout; -import androidx.cardview.widget.CardView; -import androidx.recyclerview.widget.RecyclerView; +import android.app.Activity; +import android.content.Context; +import android.graphics.Typeface; +import android.text.Spannable; +import android.text.SpannableString; +import android.text.style.StyleSpan; +import android.view.LayoutInflater; import android.view.View; import android.widget.LinearLayout; import android.widget.TextView; +import androidx.annotation.ColorInt; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + import net.ktnx.mobileledger.R; +import net.ktnx.mobileledger.databinding.TransactionListRowBinding; +import net.ktnx.mobileledger.model.LedgerTransaction; +import net.ktnx.mobileledger.model.LedgerTransactionAccount; +import net.ktnx.mobileledger.model.TransactionListItem; +import net.ktnx.mobileledger.utils.Colors; +import net.ktnx.mobileledger.utils.Misc; + +import java.util.Observer; + +class TransactionRowHolder extends TransactionRowHolderBase { + private final TransactionListRowBinding b; + TransactionListItem.Type lastType; + private Observer lastUpdateObserver; + public TransactionRowHolder(@NonNull TransactionListRowBinding binding) { + super(binding.getRoot()); + b = binding; + } + public void bind(@NonNull TransactionListItem item, @Nullable String boldAccountName) { + LedgerTransaction tr = item.getTransaction(); + b.transactionRowDescription.setText(tr.getDescription()); + String trComment = Misc.emptyIsNull(tr.getComment()); + if (trComment == null) + b.transactionComment.setVisibility(View.GONE); + else { + b.transactionComment.setText(trComment); + b.transactionComment.setVisibility(View.VISIBLE); + } + + if (Misc.emptyIsNull(item.getRunningTotal()) != null) { + b.transactionRunningTotal.setText(item.getRunningTotal()); + b.transactionRunningTotal.setVisibility(View.VISIBLE); + b.transactionRunningTotalDivider.setVisibility(View.VISIBLE); + } + else { + b.transactionRunningTotal.setVisibility(View.GONE); + b.transactionRunningTotalDivider.setVisibility(View.GONE); + } + + int rowIndex = 0; + Context ctx = b.getRoot() + .getContext(); + LayoutInflater inflater = ((Activity) ctx).getLayoutInflater(); + for (LedgerTransactionAccount acc : tr.getAccounts()) { + LinearLayout row = (LinearLayout) b.transactionRowAccAmounts.getChildAt(rowIndex); + if (row == null) { + row = new LinearLayout(ctx); + inflater.inflate(R.layout.transaction_list_row_accounts_table_row, row); + b.transactionRowAccAmounts.addView(row); + } + + TextView dummyText = row.findViewById(R.id.dummy_text); + TextView accName = row.findViewById(R.id.transaction_list_acc_row_acc_name); + TextView accComment = row.findViewById(R.id.transaction_list_acc_row_acc_comment); + TextView accAmount = row.findViewById(R.id.transaction_list_acc_row_acc_amount); + + if ((boldAccountName != null) && acc.getAccountName() + .startsWith(boldAccountName)) + { + accName.setTextColor(Colors.primary); + accAmount.setTextColor(Colors.primary); + + SpannableString ss = new SpannableString(Misc.addWrapHints(acc.getAccountName())); + ss.setSpan(new StyleSpan(Typeface.BOLD), 0, Misc.addWrapHints(boldAccountName) + .length(), + Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + accName.setText(ss); + } + else { + @ColorInt int textColor = dummyText.getTextColors() + .getDefaultColor(); + accName.setTextColor(textColor); + accAmount.setTextColor(textColor); + accName.setText(Misc.addWrapHints(acc.getAccountName())); + } + + String comment = acc.getComment(); + if (comment != null && !comment.isEmpty()) { + accComment.setText(comment); + accComment.setVisibility(View.VISIBLE); + } + else { + accComment.setVisibility(View.GONE); + } + accAmount.setText(acc.toString()); + + rowIndex++; + } -class TransactionRowHolder extends RecyclerView.ViewHolder { - TextView tvDescription; - LinearLayout tableAccounts; - ConstraintLayout row; - ConstraintLayout vDelimiter; - CardView vTransaction; - TextView tvDelimiterMonth, tvDelimiterDate; - View vDelimiterLine, vDelimiterThick; - public TransactionRowHolder(@NonNull View itemView) { - super(itemView); - this.row = itemView.findViewById(R.id.transaction_row); - this.tvDescription = itemView.findViewById(R.id.transaction_row_description); - this.tableAccounts = itemView.findViewById(R.id.transaction_row_acc_amounts); - this.vDelimiter = itemView.findViewById(R.id.transaction_delimiter); - this.vTransaction = itemView.findViewById(R.id.transaction_card_view); - this.tvDelimiterDate = itemView.findViewById(R.id.transaction_delimiter_date); - this.tvDelimiterMonth = itemView.findViewById(R.id.transaction_delimiter_month); - this.vDelimiterLine = itemView.findViewById(R.id.transaction_delimiter_line); - this.vDelimiterThick = itemView.findViewById(R.id.transaction_delimiter_thick); + if (b.transactionRowAccAmounts.getChildCount() > rowIndex) { + b.transactionRowAccAmounts.removeViews(rowIndex, + b.transactionRowAccAmounts.getChildCount() - rowIndex); + } } }