- void toggleChildrenOf(LedgerAccount parent, boolean hiddenToBe, int parentPosition) {
- int i = parentPosition + 1;
- for (LedgerAccount acc : Data.accounts.get()) {
- if (acc.getName().startsWith(parent.getName() + ":")) {
- acc.setHiddenByStarToBe(hiddenToBe);
- notifyItemChanged(i);
- toggleChildrenOf(acc, hiddenToBe, i);
- i++;
+
+ class AccountRowHolder extends AccountSummaryAdapter.RowHolder {
+ private final AccountListRowBinding b;
+ public AccountRowHolder(@NonNull AccountListRowBinding binding) {
+ super(binding.getRoot());
+ b = binding;
+
+ itemView.setOnLongClickListener(this::onItemLongClick);
+ 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);