]> git.ktnx.net Git - mobile-ledger-staging.git/commitdiff
move async DB stuff away of AsyncTask
authorDamyan Ivanov <dam+mobileledger@ktnx.net>
Fri, 27 Aug 2021 20:07:31 +0000 (20:07 +0000)
committerDamyan Ivanov <dam+mobileledger@ktnx.net>
Fri, 27 Aug 2021 20:07:31 +0000 (20:07 +0000)
it is deprecated

the replacement is a single-thread executor instance

in theory a multi-thread executor may work too, but there should not be
so much concurrency on the DB level. getting the DB stuff away from the
main thread should be enough

app/src/main/java/net/ktnx/mobileledger/dao/BaseDAO.java
app/src/main/java/net/ktnx/mobileledger/dao/ProfileDAO.java
app/src/main/java/net/ktnx/mobileledger/dao/TemplateHeaderDAO.java
app/src/main/java/net/ktnx/mobileledger/dao/TransactionDAO.java
app/src/main/java/net/ktnx/mobileledger/db/Profile.java
app/src/main/java/net/ktnx/mobileledger/ui/account_summary/AccountSummaryAdapter.java
app/src/main/java/net/ktnx/mobileledger/ui/activity/ProfileThemedActivity.java
app/src/main/java/net/ktnx/mobileledger/ui/new_transaction/NewTransactionActivity.java
app/src/main/java/net/ktnx/mobileledger/ui/profiles/ProfileDetailFragment.java
app/src/main/java/net/ktnx/mobileledger/ui/templates/TemplateDetailsViewModel.java

index b2d938c590741672316b5d6d0833af12de2512e6..905bf23a08e3ab2f48aa490cad3d9cb2f278bbd4 100644 (file)
 
 package net.ktnx.mobileledger.dao;
 
-import android.os.AsyncTask;
-
 import androidx.annotation.NonNull;
 
 import net.ktnx.mobileledger.utils.Misc;
 
+import java.util.concurrent.Executor;
+import java.util.concurrent.Executors;
+
 public abstract class BaseDAO<T> {
+    private final static Executor asyncRunner = Executors.newSingleThreadExecutor();
+    public static void runAsync(Runnable runnable) {
+        asyncRunner.execute(runnable);
+    }
     abstract long insertSync(T item);
     public void insert(T item) {
-        AsyncTask.execute(() -> insertSync(item));
+        asyncRunner.execute(() -> insertSync(item));
     }
     public void insert(T item, @NonNull OnInsertedReceiver receiver) {
-        AsyncTask.execute(() -> {
+        asyncRunner.execute(() -> {
             long id = insertSync(item);
             Misc.onMainThread(() -> receiver.onInsert(id));
         });
@@ -37,20 +42,20 @@ public abstract class BaseDAO<T> {
 
     abstract void updateSync(T item);
     public void update(T item) {
-        AsyncTask.execute(() -> updateSync(item));
+        asyncRunner.execute(() -> updateSync(item));
     }
     public void update(T item, @NonNull Runnable onDone) {
-        AsyncTask.execute(() -> {
+        asyncRunner.execute(() -> {
             updateSync(item);
             Misc.onMainThread(onDone);
         });
     }
     abstract void deleteSync(T item);
     public void delete(T item) {
-        AsyncTask.execute(() -> deleteSync(item));
+        asyncRunner.execute(() -> deleteSync(item));
     }
     public void delete(T item, @NonNull Runnable onDone) {
-        AsyncTask.execute(() -> {
+        asyncRunner.execute(() -> {
             deleteSync(item);
             Misc.onMainThread(onDone);
         });
index e61e1fb5a5af718764b2bae12a562c5cd54ebd7a..3c8fb4c373516c060c43fab91436c216676bd926 100644 (file)
@@ -17,8 +17,6 @@
 
 package net.ktnx.mobileledger.dao;
 
-import android.os.AsyncTask;
-
 import androidx.lifecycle.LiveData;
 import androidx.room.Dao;
 import androidx.room.Delete;
@@ -44,7 +42,7 @@ public abstract class ProfileDAO extends BaseDAO<Profile> {
         return insertSync(item);
     }
     public void insertLast(Profile item, OnInsertedReceiver onInsertedReceiver) {
-        AsyncTask.execute(() -> {
+        BaseDAO.runAsync(() -> {
             long id = insertLastSync(item);
             if (onInsertedReceiver != null)
                 onInsertedReceiver.onInsert(id);
@@ -90,7 +88,7 @@ public abstract class ProfileDAO extends BaseDAO<Profile> {
         }
     }
     public void updateOrder(List<Profile> list, Runnable onDone) {
-        AsyncTask.execute(() -> {
+        BaseDAO.runAsync(() -> {
             updateOrderSync(list);
             if (onDone != null)
                 onDone.run();
index 6188f70e702cbd026cb6c9ddd315f9f5269d32ea..ed2473b2ec65ac01af50ade9af357d7bb420d551 100644 (file)
@@ -17,8 +17,6 @@
 
 package net.ktnx.mobileledger.dao;
 
-import android.os.AsyncTask;
-
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.lifecycle.LiveData;
@@ -44,7 +42,7 @@ public abstract class TemplateHeaderDAO {
     public abstract long insertSync(TemplateHeader item);
 
     public void insertAsync(@NonNull TemplateHeader item, @Nullable Runnable callback) {
-        AsyncTask.execute(() -> {
+        BaseDAO.runAsync(() -> {
             insertSync(item);
             if (callback != null)
                 Misc.onMainThread(callback);
@@ -58,7 +56,7 @@ public abstract class TemplateHeaderDAO {
     public abstract void deleteSync(TemplateHeader item);
 
     public void deleteAsync(@NonNull TemplateHeader item, @NonNull Runnable callback) {
-        AsyncTask.execute(() -> {
+        BaseDAO.runAsync(() -> {
             deleteSync(item);
             Misc.onMainThread(callback);
         });
@@ -130,7 +128,7 @@ public abstract class TemplateHeaderDAO {
         });
     }
     public void insertAsync(@NonNull TemplateWithAccounts item, @Nullable Runnable callback) {
-        AsyncTask.execute(() -> {
+        BaseDAO.runAsync(() -> {
             insertSync(item);
             if (callback != null)
                 Misc.onMainThread(callback);
@@ -138,7 +136,7 @@ public abstract class TemplateHeaderDAO {
     }
     public void duplicateTemplateWitAccounts(@NonNull Long id, @Nullable
             AsyncResultCallback<TemplateWithAccounts> callback) {
-        AsyncTask.execute(() -> {
+        BaseDAO.runAsync(() -> {
             TemplateWithAccounts src = getTemplateWithAccountsSync(id);
             TemplateWithAccounts dup = src.createDuplicate();
             dup.header.setName(dup.header.getName());
index d7e8e16f3a55a14ad22b9a8b22bd20530c515c54..4032602c741abe4bd97396ead3535809315fb337 100644 (file)
@@ -17,7 +17,6 @@
 
 package net.ktnx.mobileledger.dao;
 
-import android.os.AsyncTask;
 
 import androidx.annotation.NonNull;
 import androidx.lifecycle.LiveData;
@@ -217,7 +216,7 @@ public abstract class TransactionDAO extends BaseDAO<Transaction> {
         }
     }
     public void storeLast(TransactionWithAccounts rec) {
-        AsyncTask.execute(() -> appendSync(rec));
+        BaseDAO.runAsync(() -> appendSync(rec));
     }
     @androidx.room.Transaction
     public void appendSync(TransactionWithAccounts rec) {
index a3ed1806e0a86ddf93dd11f77342bfd04ea614f4..35230e2f99340c7223e963534ecec56ecbb8f630 100644 (file)
@@ -17,8 +17,6 @@
 
 package net.ktnx.mobileledger.db;
 
-import android.os.AsyncTask;
-
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.room.ColumnInfo;
@@ -28,6 +26,7 @@ import androidx.room.PrimaryKey;
 import androidx.room.Transaction;
 
 import net.ktnx.mobileledger.dao.AccountDAO;
+import net.ktnx.mobileledger.dao.BaseDAO;
 import net.ktnx.mobileledger.dao.OptionDAO;
 import net.ktnx.mobileledger.dao.TransactionDAO;
 import net.ktnx.mobileledger.utils.Misc;
@@ -242,7 +241,7 @@ public class Profile {
         trnDao.deleteSync(trnDao.getAllForProfileUnorderedSync(id));
     }
     public void wipeAllData() {
-        AsyncTask.execute(this::wipeAllDataSync);
+        BaseDAO.runAsync(this::wipeAllDataSync);
     }
 
 }
index 2887058f23abc8ecd235461789e52d01e5a4621d..d7da335d675a19da8e1c273f717badb72488ce0c 100644 (file)
@@ -18,7 +18,6 @@
 package net.ktnx.mobileledger.ui.account_summary;
 
 import android.content.res.Resources;
-import android.os.AsyncTask;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -33,6 +32,7 @@ import androidx.recyclerview.widget.DiffUtil;
 import androidx.recyclerview.widget.RecyclerView;
 
 import net.ktnx.mobileledger.R;
+import net.ktnx.mobileledger.dao.BaseDAO;
 import net.ktnx.mobileledger.databinding.AccountListRowBinding;
 import net.ktnx.mobileledger.databinding.AccountListSummaryRowBinding;
 import net.ktnx.mobileledger.db.Account;
@@ -243,7 +243,7 @@ public class AccountSummaryAdapter extends RecyclerView.Adapter<AccountSummaryAd
                 return;
             debug("accounts", "Account expander clicked");
 
-            AsyncTask.execute(() -> {
+            BaseDAO.runAsync(() -> {
                 Account dbo = account.toDBO();
                 dbo.setExpanded(!dbo.isExpanded());
                 Logger.debug("accounts",
@@ -275,7 +275,7 @@ public class AccountSummaryAdapter extends RecyclerView.Adapter<AccountSummaryAd
                 b.accountRowAmountsExpanderContainer.setVisibility(View.VISIBLE);
             }
 
-            AsyncTask.execute(() -> {
+            BaseDAO.runAsync(() -> {
                 Account dbo = account.toDBO();
                 DB.get()
                   .getAccountDAO()
index 0b4a1fe012f4950dd52f938983a691df14f7cb34..1ffcbf8bf1965cd6a495603319907c331953c11c 100644 (file)
 package net.ktnx.mobileledger.ui.activity;
 
 import android.annotation.SuppressLint;
-import android.os.AsyncTask;
 import android.os.Bundle;
 
 import androidx.annotation.Nullable;
 
 import net.ktnx.mobileledger.App;
+import net.ktnx.mobileledger.dao.BaseDAO;
 import net.ktnx.mobileledger.dao.ProfileDAO;
 import net.ktnx.mobileledger.db.DB;
 import net.ktnx.mobileledger.db.Profile;
@@ -103,7 +103,7 @@ public class ProfileThemedActivity extends CrashReportingActivity {
         initProfile(profileId);
     }
     protected void initProfile(long profileId) {
-        AsyncTask.execute(() -> initProfileAsync(profileId));
+        BaseDAO.runAsync(() -> initProfileSync(profileId));
     }
     private void initProfileAsync(long profileId) {
         ProfileDAO dao = DB.get()
index 50b8c63ea508513dac4aafc5161d2f1920c77b4a..d4355a9b012df33398474e2658eaba5dd660058c 100644 (file)
@@ -20,7 +20,6 @@ package net.ktnx.mobileledger.ui.new_transaction;
 import android.content.Context;
 import android.content.Intent;
 import android.database.AbstractCursor;
-import android.os.AsyncTask;
 import android.os.Bundle;
 import android.os.ParcelFormatException;
 import android.util.TypedValue;
@@ -43,6 +42,7 @@ import net.ktnx.mobileledger.async.DescriptionSelectedCallback;
 import net.ktnx.mobileledger.async.GeneralBackgroundTasks;
 import net.ktnx.mobileledger.async.SendTransactionTask;
 import net.ktnx.mobileledger.async.TaskCallback;
+import net.ktnx.mobileledger.dao.BaseDAO;
 import net.ktnx.mobileledger.dao.TransactionDAO;
 import net.ktnx.mobileledger.databinding.ActivityNewTransactionBinding;
 import net.ktnx.mobileledger.db.DB;
@@ -217,7 +217,7 @@ public class NewTransactionActivity extends ProfileThemedActivity
         else {
             navController.navigate(R.id.action_newTransactionSavingFragment_Success, b);
 
-            AsyncTask.execute(() -> commitToDb((LedgerTransaction) arg));
+            BaseDAO.runAsync(() -> commitToDb((LedgerTransaction) arg));
         }
     }
     public void commitToDb(LedgerTransaction tr) {
@@ -366,7 +366,7 @@ public class NewTransactionActivity extends ProfileThemedActivity
         if (!model.accountListIsEmpty())
             return;
 
-        AsyncTask.execute(() -> {
+        BaseDAO.runAsync(() -> {
             String accFilter = mProfile.getPreferredAccountsFilter();
 
             TransactionDAO trDao = DB.get()
index 547981e1c20c61db7c484770043ac16ef12f656b..fce5967ff6d0242ada1e59c7a6949dd4bd83cff7 100644 (file)
@@ -20,7 +20,6 @@ package net.ktnx.mobileledger.ui.profiles;
 import android.app.Activity;
 import android.app.AlertDialog;
 import android.graphics.Typeface;
-import android.os.AsyncTask;
 import android.os.Bundle;
 import android.text.Editable;
 import android.text.TextWatcher;
@@ -46,6 +45,7 @@ import com.google.android.material.textfield.TextInputLayout;
 
 import net.ktnx.mobileledger.BuildConfig;
 import net.ktnx.mobileledger.R;
+import net.ktnx.mobileledger.dao.BaseDAO;
 import net.ktnx.mobileledger.dao.ProfileDAO;
 import net.ktnx.mobileledger.databinding.ProfileDetailBinding;
 import net.ktnx.mobileledger.db.DB;
@@ -126,10 +126,11 @@ public class ProfileDetailFragment extends Fragment {
             dao.getById(profileId)
                .observe(getViewLifecycleOwner(), profile -> {
                    if (profile != null)
-                       AsyncTask.execute(() -> {
-                           dao.deleteSync(profile);
-                           dao.updateOrderSync(dao.getAllOrderedSync());
-                       });
+                       BaseDAO.runAsync(() -> DB.get()
+                                                .runInTransaction(() -> {
+                                                    dao.deleteSync(profile);
+                                                    dao.updateOrderSync(dao.getAllOrderedSync());
+                                                }));
                });
 
             final FragmentActivity activity = getActivity();
index 9a4682d95eb93694dac1aed726bcac215950a846..414340cce7d73b5d29c2a183ab098909ade2be5d 100644 (file)
 
 package net.ktnx.mobileledger.ui.templates;
 
-import android.os.AsyncTask;
-
 import androidx.lifecycle.LiveData;
 import androidx.lifecycle.MutableLiveData;
 import androidx.lifecycle.Observer;
 import androidx.lifecycle.ViewModel;
 
 import net.ktnx.mobileledger.BuildConfig;
+import net.ktnx.mobileledger.dao.BaseDAO;
 import net.ktnx.mobileledger.dao.TemplateAccountDAO;
 import net.ktnx.mobileledger.dao.TemplateHeaderDAO;
 import net.ktnx.mobileledger.db.DB;
@@ -208,7 +207,7 @@ public class TemplateDetailsViewModel extends ViewModel {
         Logger.debug("flow", "PatternDetailsViewModel.onSavePattern(); model=" + this);
         final List<TemplateDetailsItem> list = Objects.requireNonNull(items.getValue());
 
-        AsyncTask.execute(() -> {
+        BaseDAO.runAsync(() -> {
             boolean newPattern = mPatternId == null || mPatternId <= 0;
 
             TemplateDetailsItem.Header modelHeader = list.get(0)