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"
|
implementation "com.android.support:recyclerview-v7:$supportVersion"
|
||||||
compileOnly 'com.google.android.wearable:wearable:2.2.0'
|
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 "org.apache.commons:commons-lang3:$commonslangVersion"
|
||||||
implementation "commons-io:commons-io:$commonsioVersion"
|
implementation "commons-io:commons-io:$commonsioVersion"
|
||||||
implementation "org.jsoup:jsoup:$jsoupVersion"
|
implementation "org.jsoup:jsoup:$jsoupVersion"
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package de.danoeh.antennapod.fragment;
|
package de.danoeh.antennapod.fragment;
|
||||||
|
|
||||||
import android.arch.lifecycle.ViewModelProviders;
|
|
||||||
import android.content.ClipData;
|
import android.content.ClipData;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
@ -21,18 +20,11 @@ import android.view.ViewGroup;
|
|||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import com.bumptech.glide.Glide;
|
import com.bumptech.glide.Glide;
|
||||||
import com.bumptech.glide.request.RequestOptions;
|
import com.bumptech.glide.request.RequestOptions;
|
||||||
import com.joanzapata.iconify.Iconify;
|
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.R;
|
||||||
|
import de.danoeh.antennapod.activity.MainActivity;
|
||||||
import de.danoeh.antennapod.core.dialog.DownloadRequestErrorDialogCreator;
|
import de.danoeh.antennapod.core.dialog.DownloadRequestErrorDialogCreator;
|
||||||
import de.danoeh.antennapod.core.feed.Feed;
|
import de.danoeh.antennapod.core.feed.Feed;
|
||||||
import de.danoeh.antennapod.core.glide.ApGlideSettings;
|
import de.danoeh.antennapod.core.glide.ApGlideSettings;
|
||||||
@ -48,6 +40,9 @@ import io.reactivex.MaybeOnSubscribe;
|
|||||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||||
import io.reactivex.disposables.Disposable;
|
import io.reactivex.disposables.Disposable;
|
||||||
import io.reactivex.schedulers.Schedulers;
|
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.
|
* 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 EXTRA_FEED_ID = "de.danoeh.antennapod.extra.feedId";
|
||||||
private static final String TAG = "FeedInfoActivity";
|
private static final String TAG = "FeedInfoActivity";
|
||||||
private Feed feed;
|
|
||||||
|
|
||||||
|
private Feed feed;
|
||||||
|
private Disposable disposable;
|
||||||
private ImageView imgvCover;
|
private ImageView imgvCover;
|
||||||
private TextView txtvTitle;
|
private TextView txtvTitle;
|
||||||
private TextView txtvDescription;
|
private TextView txtvDescription;
|
||||||
@ -69,8 +65,6 @@ public class FeedInfoFragment extends Fragment {
|
|||||||
private TextView txtvAuthorHeader;
|
private TextView txtvAuthorHeader;
|
||||||
private ImageView imgvBackground;
|
private ImageView imgvBackground;
|
||||||
|
|
||||||
private Disposable disposable;
|
|
||||||
|
|
||||||
public static FeedInfoFragment newInstance(Feed feed) {
|
public static FeedInfoFragment newInstance(Feed feed) {
|
||||||
FeedInfoFragment fragment = new FeedInfoFragment();
|
FeedInfoFragment fragment = new FeedInfoFragment();
|
||||||
Bundle arguments = new Bundle();
|
Bundle arguments = new Bundle();
|
||||||
@ -131,12 +125,21 @@ public class FeedInfoFragment extends Fragment {
|
|||||||
@Override
|
@Override
|
||||||
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
|
||||||
long feedId = getArguments().getLong(EXTRA_FEED_ID);
|
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 -> {
|
.subscribe(result -> {
|
||||||
feed = result;
|
feed = result;
|
||||||
showFeed();
|
showFeed();
|
||||||
startPostponedEnterTransition();
|
}, error -> Log.d(TAG, Log.getStackTraceString(error)),
|
||||||
}).dispose();
|
this::startPostponedEnterTransition);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void showFeed() {
|
private void showFeed() {
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
package de.danoeh.antennapod.fragment;
|
package de.danoeh.antennapod.fragment;
|
||||||
|
|
||||||
import android.arch.lifecycle.ViewModelProviders;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v14.preference.SwitchPreference;
|
import android.support.v14.preference.SwitchPreference;
|
||||||
import android.support.v7.preference.ListPreference;
|
import android.support.v7.preference.ListPreference;
|
||||||
import android.support.v7.preference.PreferenceFragmentCompat;
|
import android.support.v7.preference.PreferenceFragmentCompat;
|
||||||
|
import android.util.Log;
|
||||||
import de.danoeh.antennapod.R;
|
import de.danoeh.antennapod.R;
|
||||||
import de.danoeh.antennapod.activity.MainActivity;
|
import de.danoeh.antennapod.activity.MainActivity;
|
||||||
import de.danoeh.antennapod.core.dialog.ConfirmationDialog;
|
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.FeedFilter;
|
||||||
import de.danoeh.antennapod.core.feed.FeedPreferences;
|
import de.danoeh.antennapod.core.feed.FeedPreferences;
|
||||||
import de.danoeh.antennapod.core.preferences.UserPreferences;
|
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.core.storage.DBWriter;
|
||||||
import de.danoeh.antennapod.dialog.AuthenticationDialog;
|
import de.danoeh.antennapod.dialog.AuthenticationDialog;
|
||||||
import de.danoeh.antennapod.dialog.EpisodeFilterDialog;
|
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 {
|
public class FeedSettingsFragment extends PreferenceFragmentCompat {
|
||||||
private static final CharSequence PREF_EPISODE_FILTER = "episodeFilter";
|
private static final CharSequence PREF_EPISODE_FILTER = "episodeFilter";
|
||||||
private static final String EXTRA_FEED_ID = "de.danoeh.antennapod.extra.feedId";
|
private static final String EXTRA_FEED_ID = "de.danoeh.antennapod.extra.feedId";
|
||||||
|
private static final String TAG = "FeedSettingsFragment";
|
||||||
|
|
||||||
private Feed feed;
|
private Feed feed;
|
||||||
|
private Disposable disposable;
|
||||||
private FeedPreferences feedPreferences;
|
private FeedPreferences feedPreferences;
|
||||||
|
|
||||||
public static FeedSettingsFragment newInstance(Feed feed) {
|
public static FeedSettingsFragment newInstance(Feed feed) {
|
||||||
@ -39,7 +47,16 @@ public class FeedSettingsFragment extends PreferenceFragmentCompat {
|
|||||||
|
|
||||||
postponeEnterTransition();
|
postponeEnterTransition();
|
||||||
long feedId = getArguments().getLong(EXTRA_FEED_ID);
|
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 -> {
|
.subscribe(result -> {
|
||||||
feed = result;
|
feed = result;
|
||||||
feedPreferences = feed.getPreferences();
|
feedPreferences = feed.getPreferences();
|
||||||
@ -52,8 +69,8 @@ public class FeedSettingsFragment extends PreferenceFragmentCompat {
|
|||||||
|
|
||||||
updateAutoDeleteSummary();
|
updateAutoDeleteSummary();
|
||||||
updateAutoDownloadEnabled();
|
updateAutoDownloadEnabled();
|
||||||
startPostponedEnterTransition();
|
}, error -> Log.d(TAG, Log.getStackTraceString(error)),
|
||||||
}).dispose();
|
this::startPostponedEnterTransition);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -62,6 +79,14 @@ public class FeedSettingsFragment extends PreferenceFragmentCompat {
|
|||||||
((MainActivity) getActivity()).getSupportActionBar().setTitle(R.string.feed_settings_label);
|
((MainActivity) getActivity()).getSupportActionBar().setTitle(R.string.feed_settings_label);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDestroy() {
|
||||||
|
super.onDestroy();
|
||||||
|
if (disposable != null) {
|
||||||
|
disposable.dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void setupEpisodeFilterPreference() {
|
private void setupEpisodeFilterPreference() {
|
||||||
findPreference(PREF_EPISODE_FILTER).setOnPreferenceClickListener(preference -> {
|
findPreference(PREF_EPISODE_FILTER).setOnPreferenceClickListener(preference -> {
|
||||||
new EpisodeFilterDialog(getContext(), feedPreferences.getFilter()) {
|
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
|
targetSdkVersion = 28
|
||||||
|
|
||||||
supportVersion = "27.1.1"
|
supportVersion = "27.1.1"
|
||||||
lifecycle_version = "1.1.1"
|
|
||||||
workManagerVersion = "1.0.1"
|
workManagerVersion = "1.0.1"
|
||||||
awaitilityVersion = "3.1.2"
|
awaitilityVersion = "3.1.2"
|
||||||
commonsioVersion = "2.5"
|
commonsioVersion = "2.5"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user