X-Git-Url: https://git.ktnx.net/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Fui%2Fnew_transaction%2FNewTransactionModel.java;h=2c7c94fe97635452ecd464eafaeca21eee7459cb;hb=62709762d7004f2db3ff20528c5e76fcad233144;hp=637518f2eef27b446dd7977d44a7ea8040c27174;hpb=39a27f7bf061b6191e445c3a367a3e8d8b3d21f4;p=mobile-ledger.git diff --git a/app/src/main/java/net/ktnx/mobileledger/ui/new_transaction/NewTransactionModel.java b/app/src/main/java/net/ktnx/mobileledger/ui/new_transaction/NewTransactionModel.java index 637518f2..2c7c94fe 100644 --- a/app/src/main/java/net/ktnx/mobileledger/ui/new_transaction/NewTransactionModel.java +++ b/app/src/main/java/net/ktnx/mobileledger/ui/new_transaction/NewTransactionModel.java @@ -93,7 +93,6 @@ public class NewTransactionModel extends ViewModel { setItemsWithoutSubmittableChecks(newList); } private void setItemsWithoutSubmittableChecks(@NonNull List list) { - Logger.debug("new-trans", "model: Setting new item list"); final int cnt = list.size(); for (int i = 1; i < cnt - 1; i++) { final TransactionAccount item = list.get(i) @@ -112,6 +111,8 @@ public class NewTransactionModel extends ViewModel { list.set(cnt - 1, replacement); } + if (BuildConfig.DEBUG) + dumpItemList("Before setValue()", list); items.setValue(list); } private List copyList() { @@ -176,6 +177,7 @@ public class NewTransactionModel extends ViewModel { list.add(new TransactionAccount("")); list.add(new TransactionAccount("")); noteFocusChanged(0, FocusedElement.Description); + isSubmittable.setValue(false); setItemsWithoutSubmittableChecks(list); } boolean accountsInInitialState() { @@ -360,7 +362,20 @@ public class NewTransactionModel extends ViewModel { list.add(list.remove(index)); } void toggleCurrencyVisible() { - showCurrency.setValue(!Objects.requireNonNull(showCurrency.getValue())); + final boolean newValue = !Objects.requireNonNull(showCurrency.getValue()); + + // remove currency from all items, or reset currency to the default + // no need to clone the list, because the removal of the currency won't lead to + // visual changes -- the currency fields will be hidden or reset to default anyway + // still, there may be changes in the submittable state + final List list = Objects.requireNonNull(this.items.getValue()); + for (int i = 1; i < list.size(); i++) { + ((TransactionAccount) list.get(i)).setCurrency(newValue ? Data.getProfile() + .getDefaultCommodity() + : null); + } + checkTransactionSubmittable(null); + showCurrency.setValue(newValue); } void stopObservingBusyFlag(Observer observer) { busyFlag.removeObserver(observer); @@ -613,8 +628,8 @@ public class NewTransactionModel extends ViewModel { if (Misc.equalStrings(acc.getCurrency(), balCurrency)) { if (BuildConfig.DEBUG) Logger.debug("submittable", - String.format("Resetting hint of '%s' [%s]", - Misc.nullIsEmpty(acc.getAccountName()), + String.format(Locale.US, "Resetting hint of %d:'%s' [%s]", + i, Misc.nullIsEmpty(acc.getAccountName()), balCurrency)); // skip if the amount is set, in which case the hint is not // important/visible @@ -627,10 +642,6 @@ public class NewTransactionModel extends ViewModel { } final TransactionAccount newAcc = new TransactionAccount(acc); newAcc.setAmountHint(null); - if (!liveListCopied) { - list = copyList(list); - liveListCopied = true; - } list.set(i, newAcc); listChanged = true; } @@ -797,7 +808,6 @@ public class NewTransactionModel extends ViewModel { listChanged = true; } - Logger.debug("submittable", submittable ? "YES" : "NO"); isSubmittable.setValue(submittable); @@ -1039,7 +1049,7 @@ public class NewTransactionModel extends ViewModel { private boolean amountSet; private boolean amountValid = true; private FocusedElement focusedElement = FocusedElement.Account; - private boolean amountHintIsSet = true; + private boolean amountHintIsSet = false; private boolean isLast = false; private int accountNameCursorPosition; public TransactionAccount(TransactionAccount origin) { @@ -1159,6 +1169,9 @@ public class NewTransactionModel extends ViewModel { if (!TextUtils.isEmpty(comment)) b.append(String.format(" /%s/", comment)); + if (isLast) + b.append(" last"); + return b.toString(); } public boolean equalContents(TransactionAccount other) {