+ 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.lastUpdate.get());
+
+ Data.lastUpdate.addObserver(lastUpdateObserver);
+ }
+ void setLastUpdateText(long lastUpdate) {
+ final int formatFlags = DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_YEAR |
+ DateUtils.FORMAT_SHOW_TIME | DateUtils.FORMAT_NUMERIC_DATE;
+ tvLastUpdate.setText((lastUpdate == 0) ? "----"
+ : DateUtils.formatDateTime(tvLastUpdate.getContext(),
+ lastUpdate, formatFlags));
+ }
+ private void dropLastUpdateObserver() {
+ if (lastUpdateObserver == null)
+ return;
+
+ Data.lastUpdate.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;