summaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
authorByteHamster <info@bytehamster.com>2019-09-30 19:28:51 +0200
committerByteHamster <info@bytehamster.com>2019-09-30 19:28:51 +0200
commit940e03bcc732b3624475607fc71281cdb772975c (patch)
tree4f0eca68ea7cba765e509fae2e6842746aa93640 /app
parent31c746684bbdb44c6b737a52bf5c8debf05625d6 (diff)
downloadAntennaPod-940e03bcc732b3624475607fc71281cdb772975c.zip
Fixed sharing ViewModel with multiple feeds
Diffstat (limited to 'app')
-rw-r--r--app/build.gradle4
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/FeedInfoFragment.java37
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/FeedSettingsFragment.java35
-rw-r--r--app/src/main/java/de/danoeh/antennapod/viewmodel/FeedLoaderViewModel.java30
4 files changed, 50 insertions, 56 deletions
diff --git a/app/build.gradle b/app/build.gradle
index 3996d7ba5..0fdfd153e 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -139,10 +139,6 @@ dependencies {
implementation "com.android.support:recyclerview-v7:$supportVersion"
compileOnly 'com.google.android.wearable:wearable:2.2.0'
- // ViewModel and LiveData
- implementation "android.arch.lifecycle:extensions:$lifecycle_version"
- annotationProcessor "android.arch.lifecycle:compiler:$lifecycle_version"
-
implementation "org.apache.commons:commons-lang3:$commonslangVersion"
implementation "commons-io:commons-io:$commonsioVersion"
implementation "org.jsoup:jsoup:$jsoupVersion"
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/FeedInfoFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/FeedInfoFragment.java
index b47559124..a1df6c428 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/FeedInfoFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/FeedInfoFragment.java
@@ -1,6 +1,5 @@
package de.danoeh.antennapod.fragment;
-import android.arch.lifecycle.ViewModelProviders;
import android.content.ClipData;
import android.content.Context;
import android.content.Intent;
@@ -21,18 +20,11 @@ import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
-
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.RequestOptions;
import com.joanzapata.iconify.Iconify;
-
-import de.danoeh.antennapod.activity.MainActivity;
-import de.danoeh.antennapod.viewmodel.FeedLoaderViewModel;
-import org.apache.commons.lang3.StringUtils;
-import org.jsoup.Jsoup;
-import org.jsoup.nodes.Document;
-
import de.danoeh.antennapod.R;
+import de.danoeh.antennapod.activity.MainActivity;
import de.danoeh.antennapod.core.dialog.DownloadRequestErrorDialogCreator;
import de.danoeh.antennapod.core.feed.Feed;
import de.danoeh.antennapod.core.glide.ApGlideSettings;
@@ -48,6 +40,9 @@ import io.reactivex.MaybeOnSubscribe;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
+import org.apache.commons.lang3.StringUtils;
+import org.jsoup.Jsoup;
+import org.jsoup.nodes.Document;
/**
* Displays information about a feed.
@@ -56,8 +51,9 @@ public class FeedInfoFragment extends Fragment {
private static final String EXTRA_FEED_ID = "de.danoeh.antennapod.extra.feedId";
private static final String TAG = "FeedInfoActivity";
- private Feed feed;
+ private Feed feed;
+ private Disposable disposable;
private ImageView imgvCover;
private TextView txtvTitle;
private TextView txtvDescription;
@@ -69,8 +65,6 @@ public class FeedInfoFragment extends Fragment {
private TextView txtvAuthorHeader;
private ImageView imgvBackground;
- private Disposable disposable;
-
public static FeedInfoFragment newInstance(Feed feed) {
FeedInfoFragment fragment = new FeedInfoFragment();
Bundle arguments = new Bundle();
@@ -131,12 +125,21 @@ public class FeedInfoFragment extends Fragment {
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
long feedId = getArguments().getLong(EXTRA_FEED_ID);
- ViewModelProviders.of(getActivity()).get(FeedLoaderViewModel.class).getFeed(feedId)
+ disposable = Maybe.create((MaybeOnSubscribe<Feed>) emitter -> {
+ Feed feed = DBReader.getFeed(feedId);
+ if (feed != null) {
+ emitter.onSuccess(feed);
+ } else {
+ emitter.onComplete();
+ }
+ })
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
.subscribe(result -> {
- feed = result;
- showFeed();
- startPostponedEnterTransition();
- }).dispose();
+ feed = result;
+ showFeed();
+ }, error -> Log.d(TAG, Log.getStackTraceString(error)),
+ this::startPostponedEnterTransition);
}
private void showFeed() {
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/FeedSettingsFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/FeedSettingsFragment.java
index dd45c9baa..4549203f8 100644
--- a/app/src/main/java/de/danoeh/antennapod/fragment/FeedSettingsFragment.java
+++ b/app/src/main/java/de/danoeh/antennapod/fragment/FeedSettingsFragment.java
@@ -1,12 +1,12 @@
package de.danoeh.antennapod.fragment;
-import android.arch.lifecycle.ViewModelProviders;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v14.preference.SwitchPreference;
import android.support.v7.preference.ListPreference;
import android.support.v7.preference.PreferenceFragmentCompat;
+import android.util.Log;
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.activity.MainActivity;
import de.danoeh.antennapod.core.dialog.ConfirmationDialog;
@@ -14,15 +14,23 @@ import de.danoeh.antennapod.core.feed.Feed;
import de.danoeh.antennapod.core.feed.FeedFilter;
import de.danoeh.antennapod.core.feed.FeedPreferences;
import de.danoeh.antennapod.core.preferences.UserPreferences;
+import de.danoeh.antennapod.core.storage.DBReader;
import de.danoeh.antennapod.core.storage.DBWriter;
import de.danoeh.antennapod.dialog.AuthenticationDialog;
import de.danoeh.antennapod.dialog.EpisodeFilterDialog;
-import de.danoeh.antennapod.viewmodel.FeedLoaderViewModel;
+import io.reactivex.Maybe;
+import io.reactivex.MaybeOnSubscribe;
+import io.reactivex.android.schedulers.AndroidSchedulers;
+import io.reactivex.disposables.Disposable;
+import io.reactivex.schedulers.Schedulers;
public class FeedSettingsFragment extends PreferenceFragmentCompat {
private static final CharSequence PREF_EPISODE_FILTER = "episodeFilter";
private static final String EXTRA_FEED_ID = "de.danoeh.antennapod.extra.feedId";
+ private static final String TAG = "FeedSettingsFragment";
+
private Feed feed;
+ private Disposable disposable;
private FeedPreferences feedPreferences;
public static FeedSettingsFragment newInstance(Feed feed) {
@@ -39,7 +47,16 @@ public class FeedSettingsFragment extends PreferenceFragmentCompat {
postponeEnterTransition();
long feedId = getArguments().getLong(EXTRA_FEED_ID);
- ViewModelProviders.of(getActivity()).get(FeedLoaderViewModel.class).getFeed(feedId)
+ disposable = Maybe.create((MaybeOnSubscribe<Feed>) emitter -> {
+ Feed feed = DBReader.getFeed(feedId);
+ if (feed != null) {
+ emitter.onSuccess(feed);
+ } else {
+ emitter.onComplete();
+ }
+ })
+ .subscribeOn(Schedulers.io())
+ .observeOn(AndroidSchedulers.mainThread())
.subscribe(result -> {
feed = result;
feedPreferences = feed.getPreferences();
@@ -52,8 +69,8 @@ public class FeedSettingsFragment extends PreferenceFragmentCompat {
updateAutoDeleteSummary();
updateAutoDownloadEnabled();
- startPostponedEnterTransition();
- }).dispose();
+ }, error -> Log.d(TAG, Log.getStackTraceString(error)),
+ this::startPostponedEnterTransition);
}
@Override
@@ -62,6 +79,14 @@ public class FeedSettingsFragment extends PreferenceFragmentCompat {
((MainActivity) getActivity()).getSupportActionBar().setTitle(R.string.feed_settings_label);
}
+ @Override
+ public void onDestroy() {
+ super.onDestroy();
+ if (disposable != null) {
+ disposable.dispose();
+ }
+ }
+
private void setupEpisodeFilterPreference() {
findPreference(PREF_EPISODE_FILTER).setOnPreferenceClickListener(preference -> {
new EpisodeFilterDialog(getContext(), feedPreferences.getFilter()) {
diff --git a/app/src/main/java/de/danoeh/antennapod/viewmodel/FeedLoaderViewModel.java b/app/src/main/java/de/danoeh/antennapod/viewmodel/FeedLoaderViewModel.java
deleted file mode 100644
index bba14fe2d..000000000
--- a/app/src/main/java/de/danoeh/antennapod/viewmodel/FeedLoaderViewModel.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package de.danoeh.antennapod.viewmodel;
-
-import android.arch.lifecycle.ViewModel;
-import de.danoeh.antennapod.core.feed.Feed;
-import de.danoeh.antennapod.core.storage.DBReader;
-import io.reactivex.Maybe;
-
-public class FeedLoaderViewModel extends ViewModel {
- private Feed feed;
-
- public Maybe<Feed> getFeed(long feedId) {
- if (feed == null) {
- return loadFeed(feedId);
- } else {
- return Maybe.just(feed);
- }
- }
-
- private Maybe<Feed> loadFeed(long feedId) {
- return Maybe.create(emitter -> {
- Feed feed = DBReader.getFeed(feedId);
- if (feed != null) {
- this.feed = feed;
- emitter.onSuccess(feed);
- } else {
- emitter.onComplete();
- }
- });
- }
-}