Inject viewModels in activities and fragments

This commit is contained in:
Shinokuni 2020-10-16 11:58:00 +02:00
parent 49c5ba06b3
commit 950c8506ad
19 changed files with 124 additions and 140 deletions

View File

@ -23,23 +23,27 @@ val appModule = module {
}
viewModel {
MainViewModel(androidApplication())
MainViewModel(get())
}
viewModel {
AddFeedsViewModel(androidApplication())
AddFeedsViewModel(get(), get())
}
viewModel {
ItemViewModel(androidApplication())
ItemViewModel(get())
}
viewModel {
ManageFeedsFoldersViewModel(androidApplication())
ManageFeedsFoldersViewModel(get())
}
viewModel {
NotificationPermissionViewModel(androidApplication())
NotificationPermissionViewModel(get())
}
viewModel {
AccountViewModel(get())
}
}

View File

@ -11,7 +11,6 @@ import android.widget.LinearLayout;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.LinearLayoutManager;
@ -25,6 +24,8 @@ import com.readrops.app.viewmodels.AccountViewModel;
import com.readrops.db.entities.account.Account;
import com.readrops.db.entities.account.AccountType;
import org.koin.androidx.viewmodel.compat.ViewModelCompat;
import java.util.ArrayList;
import java.util.List;
@ -55,7 +56,7 @@ public class AccountTypeListActivity extends AppCompatActivity {
binding = ActivityAccountTypeListBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
viewModel = new ViewModelProvider(this).get(AccountViewModel.class);
viewModel = ViewModelCompat.getViewModel(this, AccountViewModel.class);
setTitle(R.string.new_account);
@ -158,7 +159,7 @@ public class AccountTypeListActivity extends AppCompatActivity {
account.setId(id.intValue());
viewModel.setAccount(account);
return viewModel.parseOPMLFile(uri);
return viewModel.parseOPMLFile(uri, this);
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())

View File

@ -8,7 +8,6 @@ import android.view.MenuItem;
import android.view.View;
import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.ViewModelProvider;
import com.readrops.app.R;
import com.readrops.app.databinding.ActivityAddAccountBinding;
@ -18,6 +17,8 @@ import com.readrops.app.viewmodels.AccountViewModel;
import com.readrops.db.entities.account.Account;
import com.readrops.db.entities.account.AccountType;
import org.koin.androidx.viewmodel.compat.ViewModelCompat;
import io.reactivex.Completable;
import io.reactivex.CompletableObserver;
import io.reactivex.SingleObserver;
@ -46,7 +47,7 @@ public class AddAccountActivity extends AppCompatActivity {
binding = ActivityAddAccountBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
viewModel = new ViewModelProvider(this).get(AccountViewModel.class);
viewModel = ViewModelCompat.getViewModel(this, AccountViewModel.class);
accountType = getIntent().getParcelableExtra(ACCOUNT_TYPE);

View File

@ -11,7 +11,6 @@ import android.view.View;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.DiffUtil;
import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.LinearLayoutManager;
@ -33,6 +32,8 @@ import com.readrops.app.viewmodels.AddFeedsViewModel;
import com.readrops.db.entities.Feed;
import com.readrops.db.entities.account.Account;
import org.koin.androidx.viewmodel.compat.ViewModelCompat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@ -69,7 +70,7 @@ public class AddFeedActivity extends AppCompatActivity implements View.OnClickLi
binding.addFeedOk.setOnClickListener(this);
binding.addFeedOk.setEnabled(false);
viewModel = new ViewModelProvider(this).get(AddFeedsViewModel.class);
viewModel = ViewModelCompat.getViewModel(this, AddFeedsViewModel.class);
parseItemsAdapter = new ItemAdapter<>();
fastAdapter = FastAdapter.with(parseItemsAdapter);

View File

@ -25,15 +25,14 @@ import androidx.appcompat.app.AppCompatActivity;
import androidx.browser.customtabs.CustomTabsIntent;
import androidx.core.app.ActivityCompat;
import androidx.core.app.ShareCompat;
import androidx.lifecycle.ViewModelProvider;
import com.afollestad.materialdialogs.MaterialDialog;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.bumptech.glide.request.target.CustomTarget;
import com.bumptech.glide.request.transition.Transition;
import com.readrops.api.utils.DateUtils;
import com.readrops.app.R;
import com.readrops.app.databinding.ActivityItemBinding;
import com.readrops.api.utils.DateUtils;
import com.readrops.app.utils.GlideApp;
import com.readrops.app.utils.PermissionManager;
import com.readrops.app.utils.SharedPreferencesManager;
@ -42,6 +41,8 @@ import com.readrops.app.viewmodels.ItemViewModel;
import com.readrops.db.entities.Item;
import com.readrops.db.pojo.ItemWithFeed;
import org.koin.androidx.viewmodel.compat.ViewModelCompat;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@ -110,7 +111,7 @@ public class ItemActivity extends AppCompatActivity {
invalidateOptionsMenu();
}));
viewModel = new ViewModelProvider(this).get(ItemViewModel.class);
viewModel = ViewModelCompat.getViewModel(this, ItemViewModel.class);
viewModel.getItemById(itemId).observe(this, this::bindUI);
binding.activityItemFab.setOnClickListener(v -> openInNavigator());
}
@ -365,7 +366,7 @@ public class ItemActivity extends AppCompatActivity {
@Override
public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition<? super Bitmap> transition) {
try {
Uri uri = viewModel.saveImageInCache(resource);
Uri uri = viewModel.saveImageInCache(resource, ItemActivity.this);
Intent intent = ShareCompat.IntentBuilder.from(ItemActivity.this)
.setType("image/png")
.setStream(uri)

View File

@ -16,7 +16,6 @@ import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;
import androidx.core.graphics.drawable.DrawableCompat;
import androidx.drawerlayout.widget.DrawerLayout;
import androidx.lifecycle.ViewModelProvider;
import androidx.paging.PagedList;
import androidx.recyclerview.widget.DividerItemDecoration;
import androidx.recyclerview.widget.ItemTouchHelper;
@ -51,6 +50,7 @@ import com.readrops.db.filters.ListSortType;
import com.readrops.db.pojo.ItemWithFeed;
import org.jetbrains.annotations.NotNull;
import org.koin.androidx.viewmodel.compat.ViewModelCompat;
import java.lang.ref.WeakReference;
import java.util.Collections;
@ -116,7 +116,7 @@ public class MainActivity extends AppCompatActivity implements SwipeRefreshLayou
feedCount = 0;
initRecyclerView();
viewModel = new ViewModelProvider(this).get(MainViewModel.class);
viewModel = ViewModelCompat.getViewModel(this, MainViewModel.class);
viewModel.setShowReadItems(SharedPreferencesManager.readBoolean(this,
SharedPreferencesManager.SharedPrefKey.SHOW_READ_ARTICLES));

View File

@ -9,9 +9,10 @@ import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import androidx.lifecycle.ViewModelProvider;
import com.afollestad.materialdialogs.MaterialDialog;
import com.readrops.api.utils.ConflictException;
import com.readrops.api.utils.UnknownFormatException;
import com.readrops.app.R;
import com.readrops.app.databinding.ActivityManageFeedsFoldersBinding;
import com.readrops.app.fragments.FeedsFragment;
@ -20,8 +21,8 @@ import com.readrops.app.utils.Utils;
import com.readrops.app.viewmodels.ManageFeedsFoldersViewModel;
import com.readrops.db.entities.Folder;
import com.readrops.db.entities.account.Account;
import com.readrops.api.utils.ConflictException;
import com.readrops.api.utils.UnknownFormatException;
import org.koin.androidx.viewmodel.compat.ViewModelCompat;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
@ -52,7 +53,7 @@ public class ManageFeedsFoldersActivity extends AppCompatActivity {
binding.manageFeedsFoldersViewpager.setAdapter(pageAdapter);
binding.manageFeedsFoldersTablayout.setupWithViewPager(binding.manageFeedsFoldersViewpager);
viewModel = new ViewModelProvider(this).get(ManageFeedsFoldersViewModel.class);
viewModel = ViewModelCompat.getViewModel(this, ManageFeedsFoldersViewModel.class);
viewModel.setAccount(account);
}

View File

@ -20,11 +20,12 @@ import com.readrops.db.entities.Feed
import com.readrops.db.entities.account.Account
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers
import org.koin.androidx.viewmodel.ext.android.getViewModel
class NotificationPermissionActivity : AppCompatActivity() {
private lateinit var binding: ActivityNotificationPermissionBinding
private val viewModel by viewModels<NotificationPermissionViewModel>()
private val viewModel = getViewModel<NotificationPermissionViewModel>()
private var adapter: NotificationPermissionListAdapter? = null
private var isFirstCheck = true

View File

@ -4,11 +4,12 @@ import android.content.Intent;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.ViewModelProvider;
import com.readrops.app.R;
import com.readrops.app.viewmodels.AccountViewModel;
import org.koin.androidx.viewmodel.compat.ViewModelCompat;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.observers.DisposableSingleObserver;
import io.reactivex.schedulers.Schedulers;
@ -22,7 +23,7 @@ public class SplashActivity extends AppCompatActivity {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
viewModel = new ViewModelProvider(this).get(AccountViewModel.class);
viewModel = ViewModelCompat.getViewModel(this, AccountViewModel.class);
viewModel.getAccountCount()
.subscribeOn(Schedulers.io())

View File

@ -11,7 +11,6 @@ import android.widget.Spinner;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.DialogFragment;
import androidx.lifecycle.ViewModelProvider;
import com.google.android.material.textfield.TextInputEditText;
import com.readrops.app.R;
@ -21,6 +20,8 @@ import com.readrops.db.entities.Folder;
import com.readrops.db.entities.account.Account;
import com.readrops.db.pojo.FeedWithFolder;
import org.koin.androidx.viewmodel.compat.SharedViewModelCompat;
import java.util.ArrayList;
import java.util.Map;
import java.util.TreeMap;
@ -59,7 +60,7 @@ public class EditFeedDialogFragment extends DialogFragment implements AdapterVie
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
viewModel = new ViewModelProvider(getActivity()).get(ManageFeedsFoldersViewModel.class);
viewModel = SharedViewModelCompat.getSharedViewModel(this, ManageFeedsFoldersViewModel.class);
feedWithFolder = getArguments().getParcelable("feedWithFolder");
account = getArguments().getParcelable(ACCOUNT);

View File

@ -10,7 +10,6 @@ import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.afollestad.materialdialogs.MaterialDialog;
@ -24,6 +23,8 @@ import com.readrops.db.entities.Feed;
import com.readrops.db.entities.account.Account;
import com.readrops.db.pojo.FeedWithFolder;
import org.koin.androidx.viewmodel.compat.SharedViewModelCompat;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.observers.DisposableCompletableObserver;
import io.reactivex.schedulers.Schedulers;
@ -64,7 +65,7 @@ public class FeedsFragment extends Fragment {
if (account.getPassword() == null)
account.setPassword(SharedPreferencesManager.readString(getContext(), account.getPasswordKey()));
viewModel = new ViewModelProvider(this).get(ManageFeedsFoldersViewModel.class);
viewModel = SharedViewModelCompat.getSharedViewModel(this, ManageFeedsFoldersViewModel.class);
viewModel.setAccount(account);
viewModel.getFeedsWithFolder().observe(this, feedWithFolders -> {

View File

@ -10,10 +10,11 @@ import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.afollestad.materialdialogs.MaterialDialog;
import com.readrops.api.utils.ConflictException;
import com.readrops.api.utils.UnknownFormatException;
import com.readrops.app.R;
import com.readrops.app.adapters.FoldersAdapter;
import com.readrops.app.databinding.FragmentFoldersBinding;
@ -22,8 +23,8 @@ import com.readrops.app.utils.Utils;
import com.readrops.app.viewmodels.ManageFeedsFoldersViewModel;
import com.readrops.db.entities.Folder;
import com.readrops.db.entities.account.Account;
import com.readrops.api.utils.ConflictException;
import com.readrops.api.utils.UnknownFormatException;
import org.koin.androidx.viewmodel.compat.SharedViewModelCompat;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.observers.DisposableSingleObserver;
@ -65,7 +66,7 @@ public class FoldersFragment extends Fragment {
account.setPassword(SharedPreferencesManager.readString(getContext(), account.getPasswordKey()));
adapter = new FoldersAdapter(this::openFolderOptionsDialog);
viewModel = new ViewModelProvider(this).get(ManageFeedsFoldersViewModel.class);
viewModel = SharedViewModelCompat.getSharedViewModel(this, ManageFeedsFoldersViewModel.class);
viewModel.setAccount(account);
viewModel.getFeedCountByAccount()

View File

@ -16,7 +16,6 @@ import androidx.annotation.Nullable;
import androidx.core.app.NotificationCompat;
import androidx.core.app.NotificationManagerCompat;
import androidx.fragment.app.Fragment;
import androidx.lifecycle.ViewModelProvider;
import androidx.preference.Preference;
import androidx.preference.PreferenceFragmentCompat;
@ -36,6 +35,8 @@ import com.readrops.app.viewmodels.AccountViewModel;
import com.readrops.db.entities.account.Account;
import com.readrops.db.entities.account.AccountType;
import org.koin.androidx.viewmodel.compat.ViewModelCompat;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.observers.DisposableCompletableObserver;
import io.reactivex.schedulers.Schedulers;
@ -136,7 +137,7 @@ public class AccountSettingsFragment extends PreferenceFragmentCompat {
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
viewModel = new ViewModelProvider(this).get(AccountViewModel.class);
viewModel = ViewModelCompat.getViewModel(this, AccountViewModel.class);
viewModel.setAccount(account);
}
@ -204,7 +205,7 @@ public class AccountSettingsFragment extends PreferenceFragmentCompat {
}
private void parseOPMLFile(Uri uri, MaterialDialog dialog) {
viewModel.parseOPMLFile(uri)
viewModel.parseOPMLFile(uri, getContext())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new DisposableCompletableObserver() {

View File

@ -1,11 +1,10 @@
package com.readrops.app.viewmodels;
import android.app.Application;
import android.content.Context;
import android.net.Uri;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.ViewModel;
import com.readrops.api.opml.OPMLParser;
import com.readrops.app.repositories.ARepository;
@ -15,35 +14,32 @@ import com.readrops.db.entities.Folder;
import com.readrops.db.entities.account.Account;
import com.readrops.db.entities.account.AccountType;
import org.koin.core.parameter.DefinitionParametersKt;
import org.koin.java.KoinJavaComponent;
import java.util.List;
import java.util.Map;
import io.reactivex.Completable;
import io.reactivex.Single;
public class AccountViewModel extends AndroidViewModel {
private static final String TAG = AccountViewModel.class.getSimpleName();
public class AccountViewModel extends ViewModel {
private ARepository repository;
private Database database;
private final Database database;
public AccountViewModel(@NonNull Application application) {
super(application);
database = Database.getInstance(application);
public AccountViewModel(@NonNull Database database) {
this.database = database;
}
public void setAccountType(AccountType accountType) throws Exception {
repository = ARepository.repositoryFactory(null, accountType, getApplication());
public void setAccountType(AccountType accountType) {
repository = KoinJavaComponent.get(ARepository.class, null,
() -> DefinitionParametersKt.parametersOf(new Account(null, null, accountType)));
}
public void setAccount(Account account) {
try {
repository = ARepository.repositoryFactory(account, getApplication());
} catch (Exception e) {
Log.e(TAG, e.getMessage());
}
repository = KoinJavaComponent.get(ARepository.class, null,
() -> DefinitionParametersKt.parametersOf(account));
}
public Single<Boolean> login(Account account, boolean insert) {
@ -71,8 +67,8 @@ public class AccountViewModel extends AndroidViewModel {
return repository.getFoldersWithFeeds();
}
public Completable parseOPMLFile(Uri uri) {
return OPMLParser.read(uri, getApplication())
public Completable parseOPMLFile(Uri uri, Context context) {
return OPMLParser.read(uri, context)
.flatMapCompletable(foldersAndFeeds -> repository.insertOPMLFoldersAndFeeds(foldersAndFeeds));
}
}

View File

@ -1,14 +1,10 @@
package com.readrops.app.viewmodels;
import android.app.Application;
import android.util.Log;
import androidx.annotation.NonNull;
import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.ViewModel;
import com.readrops.api.localfeed.LocalRSSDataSource;
import com.readrops.api.utils.HttpManager;
import com.readrops.app.repositories.ARepository;
import com.readrops.app.utils.FeedInsertionResult;
import com.readrops.app.utils.HtmlParser;
@ -16,42 +12,36 @@ import com.readrops.app.utils.ParsingResult;
import com.readrops.db.Database;
import com.readrops.db.entities.account.Account;
import org.koin.core.parameter.DefinitionParametersKt;
import org.koin.java.KoinJavaComponent;
import java.util.ArrayList;
import java.util.List;
import io.reactivex.Single;
public class AddFeedsViewModel extends AndroidViewModel {
public class AddFeedsViewModel extends ViewModel {
private static final String TAG = AddFeedsViewModel.class.getSimpleName();
private final Database database;
private final LocalRSSDataSource localRSSDataSource;
private ARepository repository;
private Database database;
public AddFeedsViewModel(@NonNull Application application) {
super(application);
database = Database.getInstance(application);
public AddFeedsViewModel(@NonNull Database database, @NonNull LocalRSSDataSource localRSSDataSource) {
this.database = database;
this.localRSSDataSource = localRSSDataSource;
}
public Single<List<FeedInsertionResult>> addFeeds(List<ParsingResult> results, Account account) {
try {
repository = ARepository.repositoryFactory(account, getApplication());
ARepository repository = KoinJavaComponent.get(ARepository.class, null,
() -> DefinitionParametersKt.parametersOf(account));
return repository.addFeeds(results);
} catch (Exception e) {
Log.d(TAG, e.getMessage());
}
return null;
return repository.addFeeds(results);
}
public Single<List<ParsingResult>> parseUrl(String url) {
return Single.create(emitter -> {
LocalRSSDataSource dataSource = new LocalRSSDataSource(HttpManager.getInstance().getOkHttpClient());
List<ParsingResult> results = new ArrayList<>();
if (dataSource.isUrlRSSResource(url)) {
if (localRSSDataSource.isUrlRSSResource(url)) {
ParsingResult parsingResult = new ParsingResult(url, null);
results.add(parsingResult);
} else {

View File

@ -1,16 +1,15 @@
package com.readrops.app.viewmodels;
import android.app.Application;
import android.content.Context;
import android.graphics.Bitmap;
import android.net.Uri;
import androidx.annotation.NonNull;
import androidx.core.content.FileProvider;
import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.ViewModel;
import com.readrops.db.Database;
import com.readrops.db.dao.ItemDao;
import com.readrops.db.pojo.ItemWithFeed;
import java.io.File;
@ -18,22 +17,21 @@ import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
public class ItemViewModel extends AndroidViewModel {
public class ItemViewModel extends ViewModel {
private ItemDao itemDao;
private final Database database;
public ItemViewModel(@NonNull Application application) {
super(application);
itemDao = Database.getInstance(application).itemDao();
public ItemViewModel(@NonNull Database database) {
this.database = database;
}
public LiveData<ItemWithFeed> getItemById(int id) {
return itemDao.getItemById(id);
return database.itemDao().getItemById(id);
}
public Uri saveImageInCache(Bitmap bitmap) throws IOException {
File imagesFolder = new File(getApplication().getCacheDir().getAbsolutePath(), "images");
public Uri saveImageInCache(Bitmap bitmap, Context context) throws IOException {
File imagesFolder = new File(context.getCacheDir().getAbsolutePath(), "images");
if (!imagesFolder.exists())
imagesFolder.mkdirs();
@ -45,6 +43,6 @@ public class ItemViewModel extends AndroidViewModel {
stream.flush();
stream.close();
return FileProvider.getUriForFile(getApplication(), getApplication().getPackageName(), image);
return FileProvider.getUriForFile(context, context.getPackageName(), image);
}
}

View File

@ -1,11 +1,9 @@
package com.readrops.app.viewmodels;
import android.app.Application;
import androidx.annotation.NonNull;
import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MediatorLiveData;
import androidx.lifecycle.ViewModel;
import androidx.paging.LivePagedListBuilder;
import androidx.paging.PagedList;
@ -34,46 +32,40 @@ import io.reactivex.Single;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers;
public class MainViewModel extends AndroidViewModel {
public class MainViewModel extends ViewModel {
private MediatorLiveData<PagedList<ItemWithFeed>> itemsWithFeed;
private final MediatorLiveData<PagedList<ItemWithFeed>> itemsWithFeed;
private LiveData<PagedList<ItemWithFeed>> lastFetch;
private ARepository repository;
private Database db;
private final Database database;
private ItemsListQueryBuilder queryBuilder;
private final ItemsListQueryBuilder queryBuilder;
private Account currentAccount;
private List<Account> accounts;
public MainViewModel(@NonNull Application application) {
super(application);
public MainViewModel(@NonNull Database database) {
queryBuilder = new ItemsListQueryBuilder();
queryBuilder.setFilterType(FilterType.NO_FILTER);
queryBuilder.setSortType(ListSortType.NEWEST_TO_OLDEST);
db = Database.getInstance(application);
this.database = database;
itemsWithFeed = new MediatorLiveData<>();
}
//region main query
private void setRepository() {
try {
repository = KoinJavaComponent.get(ARepository.class, null,
() -> DefinitionParametersKt.parametersOf(currentAccount));
} catch (Exception e) {
e.printStackTrace();
}
repository = KoinJavaComponent.get(ARepository.class, null,
() -> DefinitionParametersKt.parametersOf(currentAccount));
}
private void buildPagedList() {
if (lastFetch != null)
itemsWithFeed.removeSource(lastFetch);
lastFetch = new LivePagedListBuilder<>(new RoomFactoryWrapper<>(db.itemDao().selectAll(queryBuilder.getQuery())),
lastFetch = new LivePagedListBuilder<>(new RoomFactoryWrapper<>(database.itemDao().selectAll(queryBuilder.getQuery())),
new PagedList.Config.Builder()
.setPageSize(100)
.setPrefetchDistance(150)
@ -81,7 +73,7 @@ public class MainViewModel extends AndroidViewModel {
.build())
.build();
itemsWithFeed.addSource(lastFetch, itemWithFeeds -> itemsWithFeed.setValue(itemWithFeeds));
itemsWithFeed.addSource(lastFetch, itemsWithFeed::setValue);
}
public void invalidate() {
@ -128,7 +120,6 @@ public class MainViewModel extends AndroidViewModel {
return repository.getFeedCount(currentAccount.getId());
}
@SuppressWarnings("unchecked")
public Single<Map<Folder, List<Feed>>> getFoldersWithFeeds() {
return repository.getFoldersWithFeeds();
}
@ -138,12 +129,12 @@ public class MainViewModel extends AndroidViewModel {
//region Account
public LiveData<List<Account>> getAllAccounts() {
return db.accountDao().selectAllAsync();
return database.accountDao().selectAllAsync();
}
private Completable deselectOldCurrentAccount(int accountId) {
return Completable.create(emitter -> {
db.accountDao().deselectOldCurrentAccount(accountId);
database.accountDao().deselectOldCurrentAccount(accountId);
emitter.onComplete();
});
}
@ -174,7 +165,7 @@ public class MainViewModel extends AndroidViewModel {
// set the new account as the current one
Completable setCurrentAccount = Completable.create(emitter -> {
db.accountDao().setCurrentAccount(currentAccount.getId());
database.accountDao().setCurrentAccount(currentAccount.getId());
emitter.onComplete();
});
@ -206,7 +197,7 @@ public class MainViewModel extends AndroidViewModel {
}
}
if (!currentAccountExists && accounts.size() > 0) {
if (!currentAccountExists && !accounts.isEmpty()) {
setCurrentAccount(accounts.get(0));
accounts.get(0).setCurrentAccount(true);
}
@ -246,7 +237,7 @@ public class MainViewModel extends AndroidViewModel {
}
public Completable setItemReadItLater(int itemId) {
return db.itemDao().setReadItLater(itemId);
return database.itemDao().setReadItLater(itemId);
}
//endregion

View File

@ -1,48 +1,44 @@
package com.readrops.app.viewmodels;
import android.app.Application;
import androidx.annotation.NonNull;
import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.ViewModel;
import com.readrops.app.repositories.ARepository;
import com.readrops.db.Database;
import com.readrops.db.entities.Feed;
import com.readrops.db.entities.Folder;
import com.readrops.db.entities.account.Account;
import com.readrops.db.pojo.FeedWithFolder;
import com.readrops.db.pojo.FolderWithFeedCount;
import com.readrops.app.repositories.ARepository;
import org.koin.core.parameter.DefinitionParametersKt;
import org.koin.java.KoinJavaComponent;
import java.util.List;
import io.reactivex.Completable;
import io.reactivex.Single;
public class ManageFeedsFoldersViewModel extends AndroidViewModel {
public class ManageFeedsFoldersViewModel extends ViewModel {
private Database db;
private final Database database;
private LiveData<List<FeedWithFolder>> feedsWithFolder;
private LiveData<List<Folder>> folders;
private ARepository repository;
private Account account;
public ManageFeedsFoldersViewModel(@NonNull Application application) {
super(application);
db = Database.getInstance(application);
public ManageFeedsFoldersViewModel(@NonNull Database database) {
this.database = database;
}
private void setup() {
try {
repository = ARepository.repositoryFactory(account, getApplication());
repository = KoinJavaComponent.get(ARepository.class, null,
() -> DefinitionParametersKt.parametersOf(account));
feedsWithFolder = db.feedDao().getAllFeedsWithFolder(account.getId());
folders = db.folderDao().getAllFolders(account.getId());
} catch (Exception e) {
e.printStackTrace();
}
feedsWithFolder = database.feedDao().getAllFeedsWithFolder(account.getId());
folders = database.folderDao().getAllFolders(account.getId());
}
public LiveData<List<FeedWithFolder>> getFeedsWithFolder() {
@ -67,7 +63,7 @@ public class ManageFeedsFoldersViewModel extends AndroidViewModel {
}
public LiveData<List<FolderWithFeedCount>> getFoldersWithFeedCount() {
return db.folderDao().getFoldersWithFeedCount(account.getId());
return database.folderDao().getFoldersWithFeedCount(account.getId());
}
public Single<Long> addFolder(Folder folder) {
@ -87,6 +83,6 @@ public class ManageFeedsFoldersViewModel extends AndroidViewModel {
}
public Single<Integer> getFeedCountByAccount() {
return db.feedDao().getFeedCount(account.getId());
return database.feedDao().getFeedCount(account.getId());
}
}

View File

@ -1,16 +1,14 @@
package com.readrops.app.viewmodels
import android.app.Application
import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.LiveData
import androidx.lifecycle.ViewModel
import com.readrops.db.Database
import com.readrops.db.entities.Feed
import com.readrops.db.entities.account.Account
import io.reactivex.Completable
class NotificationPermissionViewModel(application: Application) : AndroidViewModel(application) {
class NotificationPermissionViewModel(val database: Database) : ViewModel() {
val database: Database = Database.getInstance(application)
var account: Account? = null
fun getAccount(accountId: Int): LiveData<Account> = database.accountDao().selectAsync(accountId)