X-Git-Url: https://git.ktnx.net/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fnet%2Fktnx%2Fmobileledger%2Fui%2FMainModel.java;h=9aafedd50e7e8e8b448cf1030cde8853ee9bde68;hb=1796886d67b4d62c9fad1ea0980f38f53b8ce3b7;hp=eb7a064160556a4479375acdc82ab2ba55fae7c5;hpb=25cd3a8bb9b8196cddd1f66b7757cadc8248a37f;p=mobile-ledger.git diff --git a/app/src/main/java/net/ktnx/mobileledger/ui/MainModel.java b/app/src/main/java/net/ktnx/mobileledger/ui/MainModel.java index eb7a0641..9aafedd5 100644 --- a/app/src/main/java/net/ktnx/mobileledger/ui/MainModel.java +++ b/app/src/main/java/net/ktnx/mobileledger/ui/MainModel.java @@ -18,7 +18,6 @@ package net.ktnx.mobileledger.ui; import android.os.AsyncTask; -import android.text.TextUtils; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; @@ -27,47 +26,30 @@ import androidx.lifecycle.ViewModel; import net.ktnx.mobileledger.async.RetrieveTransactionsTask; import net.ktnx.mobileledger.async.TransactionAccumulator; import net.ktnx.mobileledger.async.UpdateTransactionsTask; -import net.ktnx.mobileledger.model.AccountListItem; +import net.ktnx.mobileledger.db.Profile; import net.ktnx.mobileledger.model.Data; import net.ktnx.mobileledger.model.LedgerAccount; import net.ktnx.mobileledger.model.LedgerTransaction; -import net.ktnx.mobileledger.model.MobileLedgerProfile; import net.ktnx.mobileledger.model.TransactionListItem; -import net.ktnx.mobileledger.utils.Locker; import net.ktnx.mobileledger.utils.Logger; -import net.ktnx.mobileledger.utils.MLDB; import net.ktnx.mobileledger.utils.SimpleDate; import java.util.ArrayList; -import java.util.Date; import java.util.List; import java.util.Locale; -import static net.ktnx.mobileledger.utils.Logger.debug; - public class MainModel extends ViewModel { public final MutableLiveData foundTransactionItemIndex = new MutableLiveData<>(null); private final MutableLiveData updatingFlag = new MutableLiveData<>(false); - private final MutableLiveData accountFilter = new MutableLiveData<>(); + private final MutableLiveData accountFilter = new MutableLiveData<>(null); private final MutableLiveData> displayedTransactions = new MutableLiveData<>(new ArrayList<>()); - private final MutableLiveData> displayedAccounts = - new MutableLiveData<>(); - private final Locker accountsLocker = new Locker(); private final MutableLiveData updateError = new MutableLiveData<>(); - private MobileLedgerProfile profile; - private final List allAccounts = new ArrayList<>(); private SimpleDate firstTransactionDate; private SimpleDate lastTransactionDate; transient private RetrieveTransactionsTask retrieveTransactionsTask; transient private Thread displayedAccountsUpdater; private TransactionsDisplayedFilter displayedTransactionsUpdater; - private void setLastUpdateStamp(long transactionCount) { - debug("db", "Updating transaction value stamp"); - Date now = new Date(); - profile.setLongOption(MLDB.OPT_LAST_SCRAPE, now.getTime()); - Data.lastUpdateDate.postValue(now); - } public void scheduleTransactionListReload() { UpdateTransactionsTask task = new UpdateTransactionsTask(); task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, this); @@ -78,16 +60,12 @@ public class MainModel extends ViewModel { public LiveData getUpdateError() { return updateError; } - public void setProfile(MobileLedgerProfile profile) { - stopTransactionsRetrieval(); - this.profile = profile; - } public LiveData> getDisplayedTransactions() { return displayedTransactions; } - public void setDisplayedTransactions(List list, int transactionCount) { + public void setDisplayedTransactions(List list) { displayedTransactions.postValue(list); - Data.lastUpdateTransactionCount.postValue(transactionCount); + Data.lastUpdateTransactionCount.postValue(list.size()); } public SimpleDate getFirstTransactionDate() { return firstTransactionDate; @@ -104,29 +82,14 @@ public class MainModel extends ViewModel { public void setLastTransactionDate(SimpleDate latestDate) { this.lastTransactionDate = latestDate; } - private void applyTransactionFilter(List list) { - final String accFilter = accountFilter.getValue(); - ArrayList newList = new ArrayList<>(); - - TransactionAccumulator accumulator = new TransactionAccumulator(this); - if (TextUtils.isEmpty(accFilter)) - for (LedgerTransaction tr : list) - newList.add(new TransactionListItem(tr)); - else - for (LedgerTransaction tr : list) - if (tr.hasAccountNamedLike(accFilter)) - newList.add(new TransactionListItem(tr)); - - displayedTransactions.postValue(newList); - } public synchronized void scheduleTransactionListRetrieval() { if (retrieveTransactionsTask != null) { Logger.debug("db", "Ignoring request for transaction retrieval - already active"); return; } - MobileLedgerProfile profile = Data.getProfile(); + Profile profile = Data.getProfile(); - retrieveTransactionsTask = new RetrieveTransactionsTask(this, profile, allAccounts); + retrieveTransactionsTask = new RetrieveTransactionsTask(this, profile); Logger.debug("db", "Created a background transaction retrieval task"); retrieveTransactionsTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); @@ -134,25 +97,12 @@ public class MainModel extends ViewModel { public synchronized void stopTransactionsRetrieval() { if (retrieveTransactionsTask != null) retrieveTransactionsTask.cancel(true); + else + Data.backgroundTaskProgress.setValue(null); } public void transactionRetrievalDone() { retrieveTransactionsTask = null; } - public synchronized Locker lockAccountsForWriting() { - accountsLocker.lockForWriting(); - return accountsLocker; - } - public LiveData> getDisplayedAccounts() { - return displayedAccounts; - } - public synchronized void setAndStoreAccountAndTransactionListFromWeb( - List accounts, List transactions) { - profile.storeAccountAndTransactionListAsync(accounts, transactions); - - setLastUpdateStamp(transactions.size()); - - updateDisplayedTransactionsFromWeb(transactions); - } synchronized public void updateDisplayedTransactionsFromWeb(List list) { if (displayedTransactionsUpdater != null) { displayedTransactionsUpdater.interrupt(); @@ -163,7 +113,6 @@ public class MainModel extends ViewModel { public void clearUpdateError() { updateError.postValue(null); } - public void clearAccounts() { displayedAccounts.postValue(new ArrayList<>()); } public void clearTransactions() { displayedTransactions.setValue(new ArrayList<>()); } @@ -184,7 +133,7 @@ public class MainModel extends ViewModel { String accNameFilter = model.getAccountFilter() .getValue(); - TransactionAccumulator acc = new TransactionAccumulator(model); + TransactionAccumulator acc = new TransactionAccumulator(accNameFilter); for (LedgerTransaction tr : list) { if (isInterrupted()) { return; @@ -194,10 +143,12 @@ public class MainModel extends ViewModel { acc.put(tr, tr.getDate()); } } - if (!isInterrupted()) { - acc.done(); - } - Logger.debug("dFilter", "left synchronized block"); + + if (isInterrupted()) + return; + + acc.publishResults(model); + Logger.debug("dFilter", "transaction list updated"); } } }