Use Executor instead of AsyncTask in AccountRepository.

This commit is contained in:
Docile-Alligator
2025-04-14 03:50:20 -04:00
parent 369e8faf3a
commit 52f36d0871
4 changed files with 18 additions and 27 deletions

View File

@ -1,20 +1,21 @@
package ml.docilealligator.infinityforreddit.account;
import android.os.AsyncTask;
import androidx.lifecycle.LiveData;
import java.util.List;
import java.util.concurrent.Executor;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
public class AccountRepository {
private final Executor mExecutor;
private final AccountDao mAccountDao;
private final LiveData<List<Account>> mAccountsExceptCurrentAccountLiveData;
private final LiveData<Account> mCurrentAccountLiveData;
private final LiveData<List<Account>> mAllAccountsLiveData;
AccountRepository(RedditDataRoomDatabase redditDataRoomDatabase) {
AccountRepository(Executor executor, RedditDataRoomDatabase redditDataRoomDatabase) {
mExecutor = executor;
mAccountDao = redditDataRoomDatabase.accountDao();
mAccountsExceptCurrentAccountLiveData = mAccountDao.getAccountsExceptCurrentAccountLiveData();
mCurrentAccountLiveData = mAccountDao.getCurrentAccountLiveData();
@ -33,22 +34,7 @@ public class AccountRepository {
return mAllAccountsLiveData;
}
public void insert(Account Account) {
new InsertAsyncTask(mAccountDao).execute(Account);
}
private static class InsertAsyncTask extends AsyncTask<Account, Void, Void> {
private final AccountDao mAsyncTaskDao;
InsertAsyncTask(AccountDao dao) {
mAsyncTaskDao = dao;
}
@Override
protected Void doInBackground(final Account... params) {
mAsyncTaskDao.insert(params[0]);
return null;
}
public void insert(Account account) {
mExecutor.execute(() -> mAccountDao.insert(account));
}
}

View File

@ -5,6 +5,7 @@ import androidx.lifecycle.ViewModel;
import androidx.lifecycle.ViewModelProvider;
import java.util.List;
import java.util.concurrent.Executor;
import ml.docilealligator.infinityforreddit.RedditDataRoomDatabase;
@ -14,8 +15,8 @@ public class AccountViewModel extends ViewModel {
private final LiveData<Account> mCurrentAccountLiveData;
private final LiveData<List<Account>> mAllAccountsLiveData;
public AccountViewModel(RedditDataRoomDatabase redditDataRoomDatabase) {
mAccountRepository = new AccountRepository(redditDataRoomDatabase);
public AccountViewModel(Executor executor, RedditDataRoomDatabase redditDataRoomDatabase) {
mAccountRepository = new AccountRepository(executor, redditDataRoomDatabase);
mAccountsExceptCurrentAccountLiveData = mAccountRepository.getAccountsExceptCurrentAccountLiveData();
mCurrentAccountLiveData = mAccountRepository.getCurrentAccountLiveData();
mAllAccountsLiveData = mAccountRepository.getAllAccountsLiveData();
@ -39,16 +40,18 @@ public class AccountViewModel extends ViewModel {
public static class Factory extends ViewModelProvider.NewInstanceFactory {
private final Executor mExecutor;
private final RedditDataRoomDatabase mRedditDataRoomDatabase;
public Factory(RedditDataRoomDatabase redditDataRoomDatabase) {
public Factory(Executor executor, RedditDataRoomDatabase redditDataRoomDatabase) {
mExecutor = executor;
mRedditDataRoomDatabase = redditDataRoomDatabase;
}
@Override
public <T extends ViewModel> T create(Class<T> modelClass) {
//noinspection unchecked
return (T) new AccountViewModel(mRedditDataRoomDatabase);
return (T) new AccountViewModel(mExecutor, mRedditDataRoomDatabase);
}
}
}

View File

@ -973,7 +973,7 @@ public class MainActivity extends BaseActivity implements SortTypeSelectionCallb
});
accountViewModel = new ViewModelProvider(this,
new AccountViewModel.Factory(mRedditDataRoomDatabase)).get(AccountViewModel.class);
new AccountViewModel.Factory(mExecutor, mRedditDataRoomDatabase)).get(AccountViewModel.class);
accountViewModel.getAccountsExceptCurrentAccountLiveData().observe(this, adapter::changeAccountsDataset);
accountViewModel.getCurrentAccountLiveData().observe(this, account -> {
if (account != null) {

View File

@ -45,6 +45,8 @@ public class AccountChooserBottomSheetFragment extends LandscapeExpandedBottomSh
@Inject
@Named("security")
SharedPreferences sharedPreferences;
@Inject
Executor executor;
BaseActivity activity;
RecyclerView recyclerView;
AccountChooserRecyclerViewAdapter adapter;
@ -85,7 +87,7 @@ public class AccountChooserBottomSheetFragment extends LandscapeExpandedBottomSh
@NonNull BiometricPrompt.AuthenticationResult result) {
super.onAuthenticationSucceeded(result);
accountViewModel = new ViewModelProvider(AccountChooserBottomSheetFragment.this,
new AccountViewModel.Factory(redditDataRoomDatabase)).get(AccountViewModel.class);
new AccountViewModel.Factory(executor, redditDataRoomDatabase)).get(AccountViewModel.class);
accountViewModel.getAllAccountsLiveData().observe(getViewLifecycleOwner(), accounts -> {
adapter.changeAccountsDataset(accounts);
});
@ -109,7 +111,7 @@ public class AccountChooserBottomSheetFragment extends LandscapeExpandedBottomSh
}
} else {
accountViewModel = new ViewModelProvider(this,
new AccountViewModel.Factory(redditDataRoomDatabase)).get(AccountViewModel.class);
new AccountViewModel.Factory(executor, redditDataRoomDatabase)).get(AccountViewModel.class);
accountViewModel.getAllAccountsLiveData().observe(getViewLifecycleOwner(), accounts -> {
adapter.changeAccountsDataset(accounts);
});