diff options
author | ByteHamster <info@bytehamster.com> | 2019-09-30 19:28:51 +0200 |
---|---|---|
committer | ByteHamster <info@bytehamster.com> | 2019-09-30 19:28:51 +0200 |
commit | 940e03bcc732b3624475607fc71281cdb772975c (patch) | |
tree | 4f0eca68ea7cba765e509fae2e6842746aa93640 | |
parent | 31c746684bbdb44c6b737a52bf5c8debf05625d6 (diff) | |
download | AntennaPod-940e03bcc732b3624475607fc71281cdb772975c.zip |
Fixed sharing ViewModel with multiple feeds
-rw-r--r-- | app/build.gradle | 4 | ||||
-rw-r--r-- | app/src/main/java/de/danoeh/antennapod/fragment/FeedInfoFragment.java | 37 | ||||
-rw-r--r-- | app/src/main/java/de/danoeh/antennapod/fragment/FeedSettingsFragment.java | 35 | ||||
-rw-r--r-- | app/src/main/java/de/danoeh/antennapod/viewmodel/FeedLoaderViewModel.java | 30 | ||||
-rw-r--r-- | build.gradle | 1 |
5 files changed, 50 insertions, 57 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(); - } - }); - } -} diff --git a/build.gradle b/build.gradle index 87a335dcc..5edabc9d2 100644 --- a/build.gradle +++ b/build.gradle @@ -45,7 +45,6 @@ project.ext { targetSdkVersion = 28 supportVersion = "27.1.1" - lifecycle_version = "1.1.1" workManagerVersion = "1.0.1" awaitilityVersion = "3.1.2" commonsioVersion = "2.5" |