+ b.accountRowAccName.setOnLongClickListener(this::onItemLongClick);
+ b.accountRowAccAmounts.setOnLongClickListener(this::onItemLongClick);
+ b.accountExpanderContainer.setOnLongClickListener(this::onItemLongClick);
+ b.accountExpander.setOnLongClickListener(this::onItemLongClick);
+
+ b.accountRowAccName.setOnClickListener(v -> toggleAccountExpanded());
+ b.accountExpanderContainer.setOnClickListener(v -> toggleAccountExpanded());
+ b.accountExpander.setOnClickListener(v -> toggleAccountExpanded());
+ b.accountRowAccAmounts.setOnClickListener(v -> toggleAmountsExpanded());
+ }
+ private void toggleAccountExpanded() {
+ LedgerAccount account = getAccount();
+ if (!account.hasSubAccounts())
+ return;
+ debug("accounts", "Account expander clicked");
+
+ AsyncTask.execute(() -> {
+ Account dbo = account.toDBO();
+ dbo.setExpanded(!dbo.isExpanded());
+ Logger.debug("accounts",
+ String.format(Locale.ROOT, "%s (%d) → %s", account.getName(), dbo.getId(),
+ dbo.isExpanded() ? "expanded" : "collapsed"));
+ DB.get()
+ .getAccountDAO()
+ .updateSync(dbo);
+ });
+ }
+ @NotNull
+ private LedgerAccount getAccount() {
+ return listDiffer.getCurrentList()
+ .get(getAdapterPosition())
+ .getAccount();
+ }
+ private void toggleAmountsExpanded() {
+ LedgerAccount account = getAccount();
+ if (account.getAmountCount() <= AMOUNT_LIMIT)
+ return;
+
+ account.toggleAmountsExpanded();
+ if (account.amountsExpanded()) {
+ b.accountRowAccAmounts.setText(account.getAmountsString());
+ b.accountRowAmountsExpanderContainer.setVisibility(View.GONE);
+ }
+ else {
+ b.accountRowAccAmounts.setText(account.getAmountsString(AMOUNT_LIMIT));
+ b.accountRowAmountsExpanderContainer.setVisibility(View.VISIBLE);
+ }
+
+ AsyncTask.execute(() -> {
+ Account dbo = account.toDBO();
+ DB.get()
+ .getAccountDAO()
+ .updateSync(dbo);
+ });