X-Git-Url: https://git.ktnx.net/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Fui%2Fnew_transaction%2FNewTransactionModel.java;h=641a9b7b8686271f78e8b65f444755dcb77ed456;hb=93545c6fbf1244fbd96ecfc50e1115dbdc25f9ae;hp=23a4ef73cafcd6eddefcfa9ff59b1e832e5187ec;hpb=94dd025cb41a089504314a48ba2f99d4c5d911c5;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 23a4ef73..641a9b7b 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 @@ -92,6 +92,24 @@ public class NewTransactionModel extends ViewModel { checkTransactionSubmittable(newList); setItemsWithoutSubmittableChecks(newList); } + private void replaceItems(@NonNull List newList) { + renumberItems(); + + setItems(newList); + } + /** + * make old items replaceable in-place. makes the new values visually blend in + */ + private void renumberItems() { + final List list = items.getValue(); + if (list == null) { + return; + } + + int id = 0; + for (Item item : list) + item.id = id++; + } private void setItemsWithoutSubmittableChecks(@NonNull List list) { final int cnt = list.size(); for (int i = 1; i < cnt - 1; i++) { @@ -170,10 +188,12 @@ public class NewTransactionModel extends ViewModel { void reset() { Logger.debug("new-trans", "Resetting model"); List list = new ArrayList<>(); + Item.resetIdDispenser(); list.add(new TransactionHead("")); list.add(new TransactionAccount("")); list.add(new TransactionAccount("")); noteFocusChanged(0, FocusedElement.Description); + renumberItems(); isSubmittable.setValue(false); setItemsWithoutSubmittableChecks(list); } @@ -240,6 +260,7 @@ public class NewTransactionModel extends ViewModel { if (Misc.emptyIsNull(transactionComment) != null) head.setComment(transactionComment); + Item.resetIdDispenser(); List newItems = new ArrayList<>(); newItems.add(head); @@ -279,7 +300,7 @@ public class NewTransactionModel extends ViewModel { newItems.add(accRow); } - new Handler(Looper.getMainLooper()).post(() -> setItems(newItems)); + new Handler(Looper.getMainLooper()).post(() -> replaceItems(newItems)); }); } private int extractIntFromMatches(MatchResult m, Integer group, Integer literal) { @@ -440,14 +461,15 @@ public class NewTransactionModel extends ViewModel { return tr; } - void loadTransactionIntoModel(String profileUUID, int transactionId) { + void loadTransactionIntoModel(long profileId, int transactionId) { List newList = new ArrayList<>(); + Item.resetIdDispenser(); LedgerTransaction tr; - MobileLedgerProfile profile = Data.getProfile(profileUUID); + MobileLedgerProfile profile = Data.getProfile(profileId); if (profile == null) throw new RuntimeException(String.format( "Unable to find profile %s, which is supposed to contain transaction %d", - profileUUID, transactionId)); + profileId, transactionId)); tr = profile.loadTransaction(transactionId); TransactionHead head = new TransactionHead(tr.getDescription()); @@ -865,9 +887,15 @@ public class NewTransactionModel extends ViewModel { private static int idDispenser = 0; protected int id; private Item() { - synchronized (Item.class) { - id = ++idDispenser; - } + if (this instanceof TransactionHead) + id = 0; + else + synchronized (Item.class) { + id = ++idDispenser; + } + } + public Item(int id) { + this.id = id; } public static Item from(Item origin) { if (origin instanceof TransactionHead) @@ -876,6 +904,9 @@ public class NewTransactionModel extends ViewModel { return new TransactionAccount((TransactionAccount) origin); throw new RuntimeException("Don't know how to handle " + origin); } + private static void resetIdDispenser() { + idDispenser = 0; + } public int getId() { return id; } @@ -924,7 +955,7 @@ public class NewTransactionModel extends ViewModel { this.description = description; } public TransactionHead(TransactionHead origin) { - id = origin.id; + super(origin.id); date = origin.date; description = origin.description; comment = origin.comment; @@ -1025,7 +1056,7 @@ public class NewTransactionModel extends ViewModel { private boolean isLast = false; private int accountNameCursorPosition; public TransactionAccount(TransactionAccount origin) { - id = origin.id; + super(origin.id); accountName = origin.accountName; amount = origin.amount; amountSet = origin.amountSet;