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=0d41e19a1f93fa51003e16b29fb4f606a3911719;hb=HEAD;hpb=a70ab69ce240fe26b46da00236f2f41844e7392a 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 0d41e19a..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 © 2020 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,93 +17,113 @@ package net.ktnx.mobileledger.ui.transaction_list; +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.cardview.widget.CardView; -import androidx.constraintlayout.widget.ConstraintLayout; -import androidx.recyclerview.widget.RecyclerView; +import androidx.annotation.Nullable; import net.ktnx.mobileledger.R; -import net.ktnx.mobileledger.model.Data; +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 RecyclerView.ViewHolder { - final TextView tvDescription; - final TextView tvComment; - final LinearLayout tableAccounts; - final ConstraintLayout row; - final ConstraintLayout vDelimiter; - final CardView vTransaction; - final TextView tvDelimiterMonth, tvDelimiterDate; - final View vDelimiterThick; - final View vHeader; - final TextView tvLastUpdate; +class TransactionRowHolder extends TransactionRowHolderBase { + private final TransactionListRowBinding b; TransactionListItem.Type lastType; private Observer lastUpdateObserver; - 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.tvComment = itemView.findViewById(R.id.transaction_comment); - 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.vDelimiterThick = itemView.findViewById(R.id.transaction_delimiter_thick); - this.vHeader = itemView.findViewById(R.id.last_update_container); - this.tvLastUpdate = itemView.findViewById(R.id.last_update_text); + public TransactionRowHolder(@NonNull TransactionListRowBinding binding) { + super(binding.getRoot()); + b = binding; } - private void initLastUpdateObserver() { - if (lastUpdateObserver != null) - return; + 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); + } - lastUpdateObserver = (o, arg) -> setLastUpdateText(Data.lastTransactionsUpdateText.get()); + 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); + } - Data.lastTransactionsUpdateText.addObserver(lastUpdateObserver); - } - void setLastUpdateText(String text) { - tvLastUpdate.setText(text); - } - private void dropLastUpdateObserver() { - if (lastUpdateObserver == null) - return; + 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); + } - Data.lastTransactionsUpdateText.deleteObserver(lastUpdateObserver); - lastUpdateObserver = null; - } - void setType(TransactionListItem.Type newType) { - if (newType == lastType) - return; + 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())); + } - switch (newType) { - case TRANSACTION: - vHeader.setVisibility(View.GONE); - vTransaction.setVisibility(View.VISIBLE); - vDelimiter.setVisibility(View.GONE); - dropLastUpdateObserver(); - break; - case DELIMITER: - vHeader.setVisibility(View.GONE); - vTransaction.setVisibility(View.GONE); - vDelimiter.setVisibility(View.VISIBLE); - dropLastUpdateObserver(); - break; - case HEADER: - vHeader.setVisibility(View.VISIBLE); - vTransaction.setVisibility(View.GONE); - vDelimiter.setVisibility(View.GONE); - initLastUpdateObserver(); - break; - default: - throw new IllegalStateException("Unexpected value: " + newType); + 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++; } - lastType = newType; + if (b.transactionRowAccAmounts.getChildCount() > rowIndex) { + b.transactionRowAccAmounts.removeViews(rowIndex, + b.transactionRowAccAmounts.getChildCount() - rowIndex); + } } }