]> 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 d665d08198c3b7b839d5ce97914afdb884272fd2..658a338ae3af30c117dc96052e69690aba59f29d 100644 (file)
@@ -27,6 +27,10 @@ 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 {
     final TextView tvDescription;
@@ -37,6 +41,10 @@ class TransactionRowHolder extends RecyclerView.ViewHolder {
     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;
     }
 }