mirror of
https://github.com/AntennaPod/AntennaPod.git
synced 2025-02-02 11:46:55 +01:00
Fixed sharing ViewModel with multiple feeds
This commit is contained in:
parent
31c746684b
commit
940e03bcc7
@ -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"
|
||||
|
@ -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() {
|
||||
|
@ -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()) {
|
||||
|
@ -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();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
@ -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"
|
||||
|
Loading…
x
Reference in New Issue
Block a user