mirror of
https://github.com/Docile-Alligator/Infinity-For-Reddit.git
synced 2026-02-14 19:25:49 +00:00
Use Executor instead of AsyncTask in AccountRepository.
This commit is contained in:
@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -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);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user