mirror of
https://github.com/readrops/Readrops.git
synced 2025-02-07 15:38:38 +01:00
Inject viewModels in activities and fragments
This commit is contained in:
parent
49c5ba06b3
commit
950c8506ad
@ -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())
|
||||
}
|
||||
|
||||
}
|
@ -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())
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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)
|
||||
|
@ -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));
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
@ -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())
|
||||
|
@ -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);
|
||||
|
@ -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 -> {
|
||||
|
@ -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()
|
||||
|
@ -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() {
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
@ -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 {
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user