X-Git-Url: https://git.ktnx.net/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Fui%2Ftemplates%2FTemplateDetailsViewModel.java;h=40647875199f688c77a1a4602382318456815092;hb=22e7b64621d01852181dad8e1158e916cb4a8c84;hp=8a5300ca461df97ffd885a4e0241e600ec329db0;hpb=9f938da85f3d6277e4b2b274b9039e47fdb4e3fa;p=mobile-ledger.git diff --git a/app/src/main/java/net/ktnx/mobileledger/ui/templates/TemplateDetailsViewModel.java b/app/src/main/java/net/ktnx/mobileledger/ui/templates/TemplateDetailsViewModel.java index 8a5300ca..40647875 100644 --- a/app/src/main/java/net/ktnx/mobileledger/ui/templates/TemplateDetailsViewModel.java +++ b/app/src/main/java/net/ktnx/mobileledger/ui/templates/TemplateDetailsViewModel.java @@ -38,12 +38,16 @@ import java.util.Collections; import java.util.List; import java.util.Locale; import java.util.Objects; +import java.util.concurrent.atomic.AtomicInteger; public class TemplateDetailsViewModel extends ViewModel { private final MutableLiveData> items = new MutableLiveData<>(Collections.emptyList()); private Long mPatternId; private String mDefaultPatternName; + private boolean itemsLoaded = false; + private final AtomicInteger syntheticItemId = new AtomicInteger(0); + public String getDefaultPatternName() { return mDefaultPatternName; } @@ -52,39 +56,39 @@ public class TemplateDetailsViewModel extends ViewModel { } public void resetItems() { - ArrayList newList = new ArrayList<>(); - final TemplateDetailsItem.Header header = TemplateDetailsItem.createHeader(); - header.setName(mDefaultPatternName); - header.setId(0); - newList.add(header); - - while (newList.size() < 3) { - final TemplateDetailsItem.AccountRow aRow = TemplateDetailsItem.createAccountRow(); - aRow.setId(newList.size() + 1); - newList.add(aRow); - } - - items.setValue(newList); + checkItemConsistency(new ArrayList<>()); } - private void checkItemConsistency() { - ArrayList newList = new ArrayList<>(items.getValue()); + public void checkItemConsistency(List list) { + if (list == null) + list = new ArrayList<>(items.getValue()); + boolean changes = false; - if (newList.size() < 1) { + if (list.size() < 1) { final TemplateDetailsItem.Header header = TemplateDetailsItem.createHeader(); header.setName(mDefaultPatternName); - newList.add(header); + header.setId(genItemId()); + list.add(header); changes = true; } - while (newList.size() < 3) { - newList.add(TemplateDetailsItem.createAccountRow()); + while (list.size() < 3) { + final TemplateDetailsItem.AccountRow accountRow = + TemplateDetailsItem.createAccountRow(); + accountRow.setId(genItemId()); + list.add(accountRow); changes = true; } if (changes) - items.setValue(newList); + items.setValue(list); + } + public int genItemId() { + return syntheticItemId.decrementAndGet(); } public LiveData> getItems(Long patternId) { + if (itemsLoaded && Objects.equals(patternId, this.mPatternId)) + return items; + if (patternId != null && patternId <= 0) throw new IllegalArgumentException("Pattern ID " + patternId + " is invalid"); @@ -92,6 +96,7 @@ public class TemplateDetailsViewModel extends ViewModel { if (mPatternId == null) { resetItems(); + itemsLoaded = true; return items; } @@ -113,6 +118,7 @@ public class TemplateDetailsViewModel extends ViewModel { Logger.debug("patterns-db", "Loaded pattern item " + i); } items.postValue(l); + itemsLoaded = true; dbList.removeObserver(this); } @@ -144,10 +150,10 @@ public class TemplateDetailsViewModel extends ViewModel { TemplateHeader dbHeader = modelHeader.toDBO(); if (newPattern) { dbHeader.setId(null); - dbHeader.setId(mPatternId = headerDAO.insert(dbHeader)); + dbHeader.setId(mPatternId = headerDAO.insertSync(dbHeader)); } else - headerDAO.update(dbHeader); + headerDAO.updateSync(dbHeader); Logger.debug("pattern-db", String.format(Locale.US, "Stored pattern header %d, item=%s", dbHeader.getId(), @@ -156,24 +162,26 @@ public class TemplateDetailsViewModel extends ViewModel { TemplateAccountDAO taDAO = DB.get() .getTemplateAccountDAO(); + taDAO.prepareForSave(mPatternId); for (int i = 1; i < list.size(); i++) { final TemplateDetailsItem.AccountRow accRowItem = list.get(i) .asAccountRowItem(); TemplateAccount dbAccount = accRowItem.toDBO(dbHeader.getId()); dbAccount.setTemplateId(mPatternId); dbAccount.setPosition(i); - if (newPattern) { + if (dbAccount.getId() < 0) { dbAccount.setId(null); - dbAccount.setId(taDAO.insert(dbAccount)); + dbAccount.setId(taDAO.insertSync(dbAccount)); } else - taDAO.update(dbAccount); + taDAO.updateSync(dbAccount); Logger.debug("pattern-db", String.format(Locale.US, "Stored pattern account %d, account=%s, comment=%s, neg=%s, item=%s", dbAccount.getId(), dbAccount.getAccountName(), dbAccount.getAccountComment(), dbAccount.getNegateAmount(), accRowItem)); } + taDAO.finishSave(mPatternId); }); } } \ No newline at end of file