]> git.ktnx.net Git - mobile-ledger.git/blobdiff - app/src/main/java/net/ktnx/mobileledger/ui/transaction_list/TransactionRowHolder.java
last update text also includes transaction count
[mobile-ledger.git] / app / src / main / java / net / ktnx / mobileledger / ui / transaction_list / TransactionRowHolder.java
index c76dbcc7ff4c900435c2c754af50e17fb377d773..658a338ae3af30c117dc96052e69690aba59f29d 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2019 Damyan Ivanov.
+ * Copyright © 2020 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
 
 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.view.View;
 import android.widget.LinearLayout;
 import android.widget.TextView;
 
+import androidx.annotation.NonNull;
+import androidx.cardview.widget.CardView;
+import androidx.constraintlayout.widget.ConstraintLayout;
+import androidx.recyclerview.widget.RecyclerView;
+
 import net.ktnx.mobileledger.R;
+import net.ktnx.mobileledger.model.Data;
+import net.ktnx.mobileledger.model.TransactionListItem;
+
+import java.util.Observer;
 
 class TransactionRowHolder extends RecyclerView.ViewHolder {
-    TextView tvDescription;
-    LinearLayout tableAccounts;
-    ConstraintLayout row;
-    ConstraintLayout vDelimiter;
-    CardView vTransaction;
-    TextView tvDelimiterMonth, tvDelimiterDate;
-    View vDelimiterLine, vDelimiterThick;
+    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;
+    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.vDelimiterLine = itemView.findViewById(R.id.transaction_delimiter_line);
         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);
+    }
+    private void initLastUpdateObserver() {
+        if (lastUpdateObserver != null)
+            return;
+
+        lastUpdateObserver = (o, arg) -> setLastUpdateText(Data.lastUpdateText.get());
+
+        Data.lastUpdateText.addObserver(lastUpdateObserver);
+    }
+    void setLastUpdateText(String text) {
+        tvLastUpdate.setText(text);
+    }
+    private void dropLastUpdateObserver() {
+        if (lastUpdateObserver == null)
+            return;
+
+        Data.lastUpdateText.deleteObserver(lastUpdateObserver);
+        lastUpdateObserver = null;
+    }
+    void setType(TransactionListItem.Type newType) {
+        if (newType == lastType)
+            return;
+
+        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);
+        }
+
+        lastType = newType;
     }
 }