]> 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 a39fb9fd1eeffef3dd956ca7a72215e32d5ee55a..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
@@ -27,16 +27,24 @@ 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;
-    TextView tvComment;
-    LinearLayout tableAccounts;
-    ConstraintLayout row;
-    ConstraintLayout vDelimiter;
-    CardView vTransaction;
-    TextView tvDelimiterMonth, tvDelimiterDate;
-    View 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);
@@ -48,5 +56,54 @@ class TransactionRowHolder extends RecyclerView.ViewHolder {
         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);
+    }
+    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;
     }
 }