X-Git-Url: https://git.ktnx.net/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Fui%2Fnew_transaction%2FNewTransactionAccountRowItemHolder.java;h=488672d408ff1911420f1d846644df104fdfb1af;hb=e01ac7879de5124d5d3548db5b7005298c4d5b0f;hp=4e3a6cf8ef95a2a45896bb623af36375e5daeb3f;hpb=5df10dc0b58df4d4be4e9ab34f1e0f477ca46766;p=mobile-ledger.git diff --git a/app/src/main/java/net/ktnx/mobileledger/ui/new_transaction/NewTransactionAccountRowItemHolder.java b/app/src/main/java/net/ktnx/mobileledger/ui/new_transaction/NewTransactionAccountRowItemHolder.java index 4e3a6cf8..488672d4 100644 --- a/app/src/main/java/net/ktnx/mobileledger/ui/new_transaction/NewTransactionAccountRowItemHolder.java +++ b/app/src/main/java/net/ktnx/mobileledger/ui/new_transaction/NewTransactionAccountRowItemHolder.java @@ -31,10 +31,11 @@ import android.widget.TextView; import androidx.annotation.ColorInt; import androidx.annotation.NonNull; import androidx.constraintlayout.widget.ConstraintLayout; +import androidx.recyclerview.widget.RecyclerView; import net.ktnx.mobileledger.R; import net.ktnx.mobileledger.databinding.NewTransactionAccountRowBinding; -import net.ktnx.mobileledger.db.AccountAutocompleteAdapter; +import net.ktnx.mobileledger.db.AccountWithAmountsAutocompleteAdapter; import net.ktnx.mobileledger.model.Currency; import net.ktnx.mobileledger.model.Data; import net.ktnx.mobileledger.ui.CurrencySelectorFragment; @@ -52,10 +53,9 @@ class NewTransactionAccountRowItemHolder extends NewTransactionItemViewHolder { private String decimalSeparator; private boolean inUpdate = false; private boolean syncingData = false; - //TODO multiple amounts with different currencies per posting? NewTransactionAccountRowItemHolder(@NonNull NewTransactionAccountRowBinding b, NewTransactionItemsAdapter adapter) { - super(b.getRoot(), adapter); + super(b.getRoot()); this.b = b; new TextViewClearHelper().attachToTextView(b.comment); @@ -73,7 +73,7 @@ class NewTransactionAccountRowItemHolder extends NewTransactionItemViewHolder { boolean wasSyncing = syncingData; syncingData = true; try { - final int pos = getAdapterPosition(); + final int pos = getBindingAdapterPosition(); if (id == R.id.account_row_acc_name) { adapter.noteFocusIsOnAccount(pos); } @@ -125,8 +125,9 @@ class NewTransactionAccountRowItemHolder extends NewTransactionItemViewHolder { NewTransactionActivity activity = (NewTransactionActivity) b.getRoot() .getContext(); - b.accountRowAccName.setAdapter(new AccountAutocompleteAdapter(b.getRoot() - .getContext(), mProfile)); + b.accountRowAccName.setAdapter(new AccountWithAmountsAutocompleteAdapter(b.getRoot() + .getContext(), + mProfile)); decimalSeparator = ""; Data.locale.observe(activity, locale -> decimalSeparator = String.valueOf( @@ -178,7 +179,7 @@ class NewTransactionAccountRowItemHolder extends NewTransactionItemViewHolder { CurrencySelectorFragment cpf = new CurrencySelectorFragment(); cpf.showPositionAndPadding(); cpf.setOnCurrencySelectedListener( - c -> adapter.setItemCurrency(getAdapterPosition(), c)); + c -> adapter.setItemCurrency(getBindingAdapterPosition(), c)); cpf.show(activity.getSupportFragmentManager(), "currency-selector"); }); @@ -221,10 +222,14 @@ class NewTransactionAccountRowItemHolder extends NewTransactionItemViewHolder { ignoreFocusChanges = true; try { if (((focusInfo == null) || (focusInfo.element == null) || - focusInfo.position != getAdapterPosition())) + focusInfo.position != getBindingAdapterPosition())) return; - NewTransactionModel.TransactionAccount acc = getItem().toTransactionAccount(); + final NewTransactionModel.Item item = getItem(); + if (item == null) + return; + + NewTransactionModel.TransactionAccount acc = item.toTransactionAccount(); switch (focusInfo.element) { case Amount: b.accountRowAccAmounts.requestFocus(); @@ -397,13 +402,15 @@ class NewTransactionAccountRowItemHolder extends NewTransactionItemViewHolder { return false; } - if (getAdapterPosition() < 0) { + if (getBindingAdapterPosition() == RecyclerView.NO_POSITION) { // probably the row was swiped out - Logger.debug("new-trans", "Ignoring request to suncData(): adapter position negative"); + Logger.debug("new-trans", "Ignoring request to syncData(): adapter position negative"); return false; } - NewTransactionModel.Item item = getItem(); + final NewTransactionModel.Item item = getItem(); + if (item == null) + return false; syncingData = true; @@ -491,8 +498,8 @@ class NewTransactionAccountRowItemHolder extends NewTransactionItemViewHolder { presentAccountName, incomingAccountName, acc.getAccountNameCursorPosition())); // avoid triggering completion pop-up - AccountAutocompleteAdapter a = - (AccountAutocompleteAdapter) b.accountRowAccName.getAdapter(); + AccountWithAmountsAutocompleteAdapter a = + (AccountWithAmountsAutocompleteAdapter) b.accountRowAccName.getAdapter(); try { b.accountRowAccName.setAdapter(null); b.accountRowAccName.setText(incomingAccountName); @@ -519,12 +526,17 @@ class NewTransactionAccountRowItemHolder extends NewTransactionItemViewHolder { acc.isAmountSet() ? String.format("%4.2f", acc.getAmount()) : null); displayAmountValidity(true); - b.comment.setText(acc.getComment()); + final String comment = acc.getComment(); + b.comment.setText(comment); + styleComment(b.comment, comment); setEditable(true); - applyFocus(mAdapter.model.getFocusInfo() - .getValue()); + NewTransactionItemsAdapter adapter = + (NewTransactionItemsAdapter) getBindingAdapter(); + if (adapter != null) + applyFocus(adapter.model.getFocusInfo() + .getValue()); } finally { syncingData = false;