+ 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.lastTransactionsUpdateText.get());
+
+ Data.lastTransactionsUpdateText.addObserver(lastUpdateObserver);
+ }
+ void setLastUpdateText(String text) {
+ tvLastUpdate.setText(text);
+ }
+ private void dropLastUpdateObserver() {
+ if (lastUpdateObserver == null)
+ return;
+
+ Data.lastTransactionsUpdateText.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;