]> git.ktnx.net Git - mobile-ledger.git/blobdiff - app/src/main/java/net/ktnx/mobileledger/ui/templates/TemplateDetailsViewModel.java
make pattern editor survive reconfiguration
[mobile-ledger.git] / app / src / main / java / net / ktnx / mobileledger / ui / templates / TemplateDetailsViewModel.java
index 088b1b77c9100b6f5203a27e8a6bed2caa728208..608bb6344cade07fab781509a1cdc37de1ade915 100644 (file)
@@ -24,12 +24,12 @@ import androidx.lifecycle.MutableLiveData;
 import androidx.lifecycle.Observer;
 import androidx.lifecycle.ViewModel;
 
-import net.ktnx.mobileledger.dao.PatternAccountDAO;
-import net.ktnx.mobileledger.dao.PatternHeaderDAO;
+import net.ktnx.mobileledger.dao.TemplateAccountDAO;
+import net.ktnx.mobileledger.dao.TemplateHeaderDAO;
 import net.ktnx.mobileledger.db.DB;
-import net.ktnx.mobileledger.db.PatternWithAccounts;
 import net.ktnx.mobileledger.db.TemplateAccount;
 import net.ktnx.mobileledger.db.TemplateHeader;
+import net.ktnx.mobileledger.db.TemplateWithAccounts;
 import net.ktnx.mobileledger.model.TemplateDetailsItem;
 import net.ktnx.mobileledger.utils.Logger;
 
@@ -44,6 +44,8 @@ public class TemplateDetailsViewModel extends ViewModel {
             new MutableLiveData<>(Collections.emptyList());
     private Long mPatternId;
     private String mDefaultPatternName;
+    private boolean itemsLoaded = false;
+
     public String getDefaultPatternName() {
         return mDefaultPatternName;
     }
@@ -85,6 +87,9 @@ public class TemplateDetailsViewModel extends ViewModel {
             items.setValue(newList);
     }
     public LiveData<List<TemplateDetailsItem>> 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,15 +97,16 @@ public class TemplateDetailsViewModel extends ViewModel {
 
         if (mPatternId == null) {
             resetItems();
+            itemsLoaded = true;
             return items;
         }
 
         DB db = DB.get();
-        LiveData<PatternWithAccounts> dbList = db.getPatternDAO()
-                                                 .getPatternWithAccounts(mPatternId);
-        Observer<PatternWithAccounts> observer = new Observer<PatternWithAccounts>() {
+        LiveData<TemplateWithAccounts> dbList = db.getTemplateDAO()
+                                                  .getTemplateWithAccounts(mPatternId);
+        Observer<TemplateWithAccounts> observer = new Observer<TemplateWithAccounts>() {
             @Override
-            public void onChanged(PatternWithAccounts src) {
+            public void onChanged(TemplateWithAccounts src) {
                 ArrayList<TemplateDetailsItem> l = new ArrayList<>();
 
                 TemplateDetailsItem header = TemplateDetailsItem.fromRoomObject(src.header);
@@ -113,6 +119,7 @@ public class TemplateDetailsViewModel extends ViewModel {
                     Logger.debug("patterns-db", "Loaded pattern item " + i);
                 }
                 items.postValue(l);
+                itemsLoaded = true;
 
                 dbList.removeObserver(this);
             }
@@ -139,35 +146,35 @@ public class TemplateDetailsViewModel extends ViewModel {
 
             TemplateDetailsItem.Header modelHeader = list.get(0)
                                                          .asHeaderItem();
-            PatternHeaderDAO headerDAO = DB.get()
-                                           .getPatternDAO();
+            TemplateHeaderDAO headerDAO = DB.get()
+                                            .getTemplateDAO();
             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(),
                             modelHeader));
 
 
-            PatternAccountDAO paDAO = DB.get()
-                                        .getPatternAccountDAO();
+            TemplateAccountDAO taDAO = DB.get()
+                                         .getTemplateAccountDAO();
             for (int i = 1; i < list.size(); i++) {
                 final TemplateDetailsItem.AccountRow accRowItem = list.get(i)
                                                                       .asAccountRowItem();
                 TemplateAccount dbAccount = accRowItem.toDBO(dbHeader.getId());
-                dbAccount.setPatternId(mPatternId);
+                dbAccount.setTemplateId(mPatternId);
                 dbAccount.setPosition(i);
                 if (newPattern) {
                     dbAccount.setId(null);
-                    dbAccount.setId(paDAO.insert(dbAccount));
+                    dbAccount.setId(taDAO.insertSync(dbAccount));
                 }
                 else
-                    paDAO.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",