Add "New Episodes Action" preference (#6095)

This commit is contained in:
Erik Johnson 2023-02-22 14:34:43 -06:00 committed by GitHub
parent 5c79bc7c45
commit 9fed944392
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
18 changed files with 185 additions and 62 deletions

View File

@ -129,7 +129,8 @@ public class PlaybackServiceMediaPlayerTest {
private Playable writeTestPlayable(String downloadUrl, String fileUrl) {
Feed f = new Feed(0, null, "f", "l", "d", null, null, null, null, "i", null, null, "l", false);
FeedPreferences prefs = new FeedPreferences(f.getId(), false, FeedPreferences.AutoDeleteAction.NO, VolumeAdaptionSetting.OFF, null, null);
FeedPreferences prefs = new FeedPreferences(f.getId(), false, FeedPreferences.AutoDeleteAction.NEVER,
VolumeAdaptionSetting.OFF, FeedPreferences.NewEpisodesAction.NOTHING, null, null);
f.setPreferences(prefs);
f.setItems(new ArrayList<>());
FeedItem i = new FeedItem(0, "t", "i", "l", new Date(), FeedItem.UNPLAYED, f);

View File

@ -105,6 +105,7 @@ public class FeedSettingsFragment extends Fragment {
private static final CharSequence PREF_AUTHENTICATION = "authentication";
private static final CharSequence PREF_AUTO_DELETE = "autoDelete";
private static final CharSequence PREF_CATEGORY_AUTO_DOWNLOAD = "autoDownloadCategory";
private static final CharSequence PREF_NEW_EPISODES_ACTION = "feedNewEpisodesAction";
private static final String PREF_FEED_PLAYBACK_SPEED = "feedPlaybackSpeed";
private static final String PREF_AUTO_SKIP = "feedAutoSkip";
private static final String PREF_TAGS = "tags";
@ -156,6 +157,7 @@ public class FeedSettingsFragment extends Fragment {
setupKeepUpdatedPreference();
setupAutoDeletePreference();
setupVolumeReductionPreferences();
setupNewEpisodesAction();
setupAuthentificationPreference();
setupEpisodeFilterPreference();
setupPlaybackSpeedPreference();
@ -166,6 +168,7 @@ public class FeedSettingsFragment extends Fragment {
updateAutoDeleteSummary();
updateVolumeReductionValue();
updateAutoDownloadEnabled();
updateNewEpisodesAction();
if (feed.isLocalFeed()) {
findPreference(PREF_AUTHENTICATION).setVisible(false);
@ -283,11 +286,12 @@ public class FeedSettingsFragment extends Fragment {
feedPreferences.setAutoDeleteAction(FeedPreferences.AutoDeleteAction.GLOBAL);
break;
case "always":
feedPreferences.setAutoDeleteAction(FeedPreferences.AutoDeleteAction.YES);
feedPreferences.setAutoDeleteAction(FeedPreferences.AutoDeleteAction.ALWAYS);
break;
case "never":
feedPreferences.setAutoDeleteAction(FeedPreferences.AutoDeleteAction.NO);
feedPreferences.setAutoDeleteAction(FeedPreferences.AutoDeleteAction.NEVER);
break;
default:
}
DBWriter.setFeedPreferences(feedPreferences);
updateAutoDeleteSummary();
@ -300,14 +304,14 @@ public class FeedSettingsFragment extends Fragment {
switch (feedPreferences.getAutoDeleteAction()) {
case GLOBAL:
autoDeletePreference.setSummary(R.string.feed_auto_download_global);
autoDeletePreference.setSummary(R.string.global_default);
autoDeletePreference.setValue("global");
break;
case YES:
case ALWAYS:
autoDeletePreference.setSummary(R.string.feed_auto_download_always);
autoDeletePreference.setValue("always");
break;
case NO:
case NEVER:
autoDeletePreference.setSummary(R.string.feed_auto_download_never);
autoDeletePreference.setValue("never");
break;
@ -327,6 +331,7 @@ public class FeedSettingsFragment extends Fragment {
case "heavy":
feedPreferences.setVolumeAdaptionSetting(VolumeAdaptionSetting.HEAVY_REDUCTION);
break;
default:
}
DBWriter.setFeedPreferences(feedPreferences);
updateVolumeReductionValue();
@ -352,6 +357,34 @@ public class FeedSettingsFragment extends Fragment {
}
}
private void setupNewEpisodesAction() {
findPreference(PREF_NEW_EPISODES_ACTION).setOnPreferenceChangeListener((preference, newValue) -> {
int code = Integer.parseInt((String) newValue);
feedPreferences.setNewEpisodesAction(FeedPreferences.NewEpisodesAction.fromCode(code));
DBWriter.setFeedPreferences(feedPreferences);
updateNewEpisodesAction();
return false;
});
}
private void updateNewEpisodesAction() {
ListPreference newEpisodesAction = findPreference(PREF_NEW_EPISODES_ACTION);
newEpisodesAction.setValue("" + feedPreferences.getNewEpisodesAction().code);
switch (feedPreferences.getNewEpisodesAction()) {
case GLOBAL:
newEpisodesAction.setSummary(R.string.global_default);
break;
case ADD_TO_INBOX:
newEpisodesAction.setSummary(R.string.feed_new_episodes_action_add_to_inbox);
break;
case NOTHING:
newEpisodesAction.setSummary(R.string.feed_new_episodes_action_nothing);
break;
default:
}
}
private void setupKeepUpdatedPreference() {
SwitchPreferenceCompat pref = findPreference("keepUpdated");

View File

@ -89,28 +89,12 @@ public class FeedMultiSelectActionHandler {
private void autoDeleteEpisodesPrefHandler() {
PreferenceListDialog preferenceListDialog = new PreferenceListDialog(activity,
"Auto delete episodes");
activity.getString(R.string.auto_delete_label));
String[] items = activity.getResources().getStringArray(R.array.spnAutoDeleteItems);
String[] values = activity.getResources().getStringArray(R.array.spnAutoDeleteValues);
preferenceListDialog.openDialog(items);
preferenceListDialog.setOnPreferenceChangedListener(which -> {
FeedPreferences.AutoDeleteAction autoDeleteAction = null;
switch (values[which]) {
case "global":
autoDeleteAction = FeedPreferences.AutoDeleteAction.GLOBAL;
break;
case "always":
autoDeleteAction = FeedPreferences.AutoDeleteAction.YES;
break;
case "never":
autoDeleteAction = FeedPreferences.AutoDeleteAction.NO;
break;
default:
}
FeedPreferences.AutoDeleteAction finalAutoDeleteAction = autoDeleteAction;
saveFeedPreferences(feedPreferences -> {
feedPreferences.setAutoDeleteAction(finalAutoDeleteAction);
});
FeedPreferences.AutoDeleteAction autoDeleteAction = FeedPreferences.AutoDeleteAction.fromCode(which);
saveFeedPreferences(feedPreferences -> feedPreferences.setAutoDeleteAction(autoDeleteAction));
});
}

View File

@ -10,7 +10,7 @@
android:id="@+id/useGlobalCheckbox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/feed_auto_download_global"
android:text="@string/global_default"
android:layout_marginBottom="8dp" />
<LinearLayout

View File

@ -45,7 +45,7 @@
android:entryValues="@array/spnAutoDeleteValues"
android:icon="@drawable/ic_delete"
android:key="autoDelete"
android:summary="@string/feed_auto_download_global"
android:summary="@string/global_default"
android:title="@string/auto_delete_label" />
<de.danoeh.antennapod.preferences.MaterialListPreference
@ -57,6 +57,14 @@
android:summary="@string/feed_volume_reduction_summary"
android:title="@string/feed_volume_reduction" />
<de.danoeh.antennapod.preferences.MaterialListPreference
android:entries="@array/feedNewEpisodesActionItems"
android:entryValues="@array/feedNewEpisodesActionValues"
android:icon="@drawable/ic_feed"
android:key="feedNewEpisodesAction"
android:summary="@string/global_default"
android:title="@string/pref_new_episodes_action_title" />
<PreferenceCategory
android:key="autoDownloadCategory"
android:title="@string/auto_download_settings_label">

View File

@ -13,6 +13,13 @@
android:key="prefAutoDownloadSettings"
android:title="@string/pref_automatic_download_title"
search:ignore="true" />
<de.danoeh.antennapod.preferences.MaterialListPreference
android:entryValues="@array/globalNewEpisodesActionValues"
android:entries="@array/globalNewEpisodesActionItems"
android:key="prefNewEpisodesAction"
android:title="@string/pref_new_episodes_action_title"
android:summary="@string/pref_new_episodes_action_sum"
android:defaultValue="1"/>
</PreferenceCategory>
<PreferenceCategory android:title="@string/download_pref_details">

View File

@ -124,7 +124,7 @@ public class LocalFeedUpdater {
feed.setImageUrl(getImageUrl(allFiles, folderUri));
feed.getPreferences().setAutoDownload(false);
feed.getPreferences().setAutoDeleteAction(FeedPreferences.AutoDeleteAction.NO);
feed.getPreferences().setAutoDeleteAction(FeedPreferences.AutoDeleteAction.NEVER);
feed.setDescription(context.getString(R.string.local_feed_description));
feed.setAuthor(context.getString(R.string.local_folder));

View File

@ -43,7 +43,8 @@ public class FeedParserTask implements Callable<FeedHandlerResult> {
feed.setId(request.getFeedfileId());
feed.setDownloaded(true);
feed.setPreferences(new FeedPreferences(0, true, FeedPreferences.AutoDeleteAction.GLOBAL,
VolumeAdaptionSetting.OFF, request.getUsername(), request.getPassword()));
VolumeAdaptionSetting.OFF, FeedPreferences.NewEpisodesAction.GLOBAL, request.getUsername(),
request.getPassword()));
feed.setPageNr(request.getArguments().getInt(DownloadRequest.REQUEST_ARG_PAGE_NR, 0));
DownloadError reason = null;

View File

@ -1073,7 +1073,7 @@ public class PlaybackService extends MediaBrowserServiceCompat {
// Delete episode if enabled
FeedPreferences.AutoDeleteAction action =
item.getFeed().getPreferences().getCurrentAutoDelete();
boolean shouldAutoDelete = action == FeedPreferences.AutoDeleteAction.YES
boolean shouldAutoDelete = action == FeedPreferences.AutoDeleteAction.ALWAYS
|| (action == FeedPreferences.AutoDeleteAction.GLOBAL && UserPreferences.isAutoDelete());
if (shouldAutoDelete && (!item.isTagged(FeedItem.TAG_FAVORITE)
|| !UserPreferences.shouldFavoriteKeepEpisode())) {

View File

@ -42,6 +42,7 @@ import de.danoeh.antennapod.core.util.comparator.FeedItemPubdateComparator;
import de.danoeh.antennapod.model.feed.Feed;
import de.danoeh.antennapod.model.feed.FeedItem;
import de.danoeh.antennapod.model.feed.FeedMedia;
import de.danoeh.antennapod.model.feed.FeedPreferences;
import de.danoeh.antennapod.net.sync.model.EpisodeAction;
/**
@ -298,13 +299,6 @@ public final class DBTasks {
Log.d(TAG, "Found no existing Feed with title "
+ newFeed.getTitle() + ". Adding as new one.");
// Add a new Feed
// all new feeds will have the most recent item marked as unplayed
FeedItem mostRecent = newFeed.getMostRecentItem();
if (mostRecent != null) {
mostRecent.setNew();
}
resultFeed = newFeed;
} else {
Log.d(TAG, "Feed with title " + newFeed.getTitle()
@ -388,14 +382,15 @@ public final class DBTasks {
savedFeed.getItems().add(idx, item);
}
// only mark the item new if it was published after or at the same time
// as the most recent item
// (if the most recent date is null then we can assume there are no items
// and this is the first, hence 'new')
// New items that do not have a pubDate set are always marked as new
if (item.getPubDate() == null || priorMostRecentDate == null
|| priorMostRecentDate.before(item.getPubDate())
|| priorMostRecentDate.equals(item.getPubDate())) {
FeedPreferences.NewEpisodesAction action = savedFeed.getPreferences().getNewEpisodesAction();
if (action == FeedPreferences.NewEpisodesAction.GLOBAL) {
action = UserPreferences.getNewEpisodesAction();
}
if (action == FeedPreferences.NewEpisodesAction.ADD_TO_INBOX
&& (item.getPubDate() == null
|| priorMostRecentDate == null
|| priorMostRecentDate.before(item.getPubDate())
|| priorMostRecentDate.equals(item.getPubDate()))) {
Log.d(TAG, "Marking item published on " + item.getPubDate()
+ " new, prior most recent date = " + priorMostRecentDate);
item.setNew();

View File

@ -2,7 +2,7 @@
<resources>
<string-array name="spnAutoDeleteItems">
<item>@string/feed_auto_download_global</item>
<item>@string/global_default</item>
<item>@string/feed_auto_download_always</item>
<item>@string/feed_auto_download_never</item>
</string-array>
@ -25,6 +25,28 @@
<item>heavy</item>
</string-array>
<string-array name="globalNewEpisodesActionItems">
<item>@string/feed_new_episodes_action_add_to_inbox</item>
<item>@string/feed_new_episodes_action_nothing</item>
</string-array>
<string-array name="globalNewEpisodesActionValues">
<item>1</item>
<item>2</item>
</string-array>
<string-array name="feedNewEpisodesActionItems">
<item>@string/global_default</item>
<item>@string/feed_new_episodes_action_add_to_inbox</item>
<item>@string/feed_new_episodes_action_nothing</item>
</string-array>
<string-array name="feedNewEpisodesActionValues">
<item>0</item>
<item>1</item>
<item>2</item>
</string-array>
<string-array name="smart_mark_as_played_values">
<item>0</item>
<item>15</item>

View File

@ -173,7 +173,8 @@ public class Feed extends FeedFile {
*/
public Feed(String url, String lastUpdate, String title, String username, String password) {
this(url, lastUpdate, title);
preferences = new FeedPreferences(0, true, FeedPreferences.AutoDeleteAction.GLOBAL, VolumeAdaptionSetting.OFF, username, password);
preferences = new FeedPreferences(0, true, FeedPreferences.AutoDeleteAction.GLOBAL, VolumeAdaptionSetting.OFF,
FeedPreferences.NewEpisodesAction.GLOBAL, username, password);
}
/**

View File

@ -17,9 +17,45 @@ public class FeedPreferences implements Serializable {
public static final String TAG_SEPARATOR = "\u001e";
public enum AutoDeleteAction {
GLOBAL,
YES,
NO
GLOBAL(0),
ALWAYS(1),
NEVER(2);
public final int code;
AutoDeleteAction(int code) {
this.code = code;
}
public static AutoDeleteAction fromCode(int code) {
for (AutoDeleteAction action : values()) {
if (code == action.code) {
return action;
}
}
return NEVER;
}
}
public enum NewEpisodesAction {
GLOBAL(0),
ADD_TO_INBOX(1),
NOTHING(2);
public final int code;
NewEpisodesAction(int code) {
this.code = code;
}
public static NewEpisodesAction fromCode(int code) {
for (NewEpisodesAction action : values()) {
if (code == action.code) {
return action;
}
}
return ADD_TO_INBOX;
}
}
@NonNull
@ -29,6 +65,7 @@ public class FeedPreferences implements Serializable {
private boolean keepUpdated;
private AutoDeleteAction autoDeleteAction;
private VolumeAdaptionSetting volumeAdaptionSetting;
private NewEpisodesAction newEpisodesAction;
private String username;
private String password;
private float feedPlaybackSpeed;
@ -38,15 +75,17 @@ public class FeedPreferences implements Serializable {
private final Set<String> tags = new HashSet<>();
public FeedPreferences(long feedID, boolean autoDownload, AutoDeleteAction autoDeleteAction,
VolumeAdaptionSetting volumeAdaptionSetting, String username, String password) {
this(feedID, autoDownload, true, autoDeleteAction, volumeAdaptionSetting,
username, password, new FeedFilter(), SPEED_USE_GLOBAL, 0, 0, false, new HashSet<>());
VolumeAdaptionSetting volumeAdaptionSetting, NewEpisodesAction newEpisodesAction,
String username, String password) {
this(feedID, autoDownload, true, autoDeleteAction, volumeAdaptionSetting, username, password,
new FeedFilter(), SPEED_USE_GLOBAL, 0, 0, false, newEpisodesAction, new HashSet<>());
}
public FeedPreferences(long feedID, boolean autoDownload, boolean keepUpdated,
AutoDeleteAction autoDeleteAction, VolumeAdaptionSetting volumeAdaptionSetting,
String username, String password, @NonNull FeedFilter filter, float feedPlaybackSpeed,
int feedSkipIntro, int feedSkipEnding, boolean showEpisodeNotification,
String username, String password, @NonNull FeedFilter filter,
float feedPlaybackSpeed, int feedSkipIntro, int feedSkipEnding,
boolean showEpisodeNotification, NewEpisodesAction newEpisodesAction,
Set<String> tags) {
this.feedID = feedID;
this.autoDownload = autoDownload;
@ -60,6 +99,7 @@ public class FeedPreferences implements Serializable {
this.feedSkipIntro = feedSkipIntro;
this.feedSkipEnding = feedSkipEnding;
this.showEpisodeNotification = showEpisodeNotification;
this.newEpisodesAction = newEpisodesAction;
this.tags.addAll(tags);
}
@ -140,6 +180,10 @@ public class FeedPreferences implements Serializable {
return volumeAdaptionSetting;
}
public NewEpisodesAction getNewEpisodesAction() {
return newEpisodesAction;
}
public void setAutoDeleteAction(AutoDeleteAction autoDeleteAction) {
this.autoDeleteAction = autoDeleteAction;
}
@ -148,6 +192,10 @@ public class FeedPreferences implements Serializable {
this.volumeAdaptionSetting = volumeAdaptionSetting;
}
public void setNewEpisodesAction(NewEpisodesAction newEpisodesAction) {
this.newEpisodesAction = newEpisodesAction;
}
public AutoDeleteAction getCurrentAutoDelete() {
return autoDeleteAction;
}

View File

@ -330,6 +330,10 @@ class DBUpgrader {
db.execSQL("ALTER TABLE " + PodDBAdapter.TABLE_NAME_FEED_ITEMS
+ " ADD COLUMN " + PodDBAdapter.KEY_PODCASTINDEX_CHAPTER_URL + " TEXT");
}
if (oldVersion < 3010000) {
db.execSQL("ALTER TABLE " + PodDBAdapter.TABLE_NAME_FEEDS
+ " ADD COLUMN " + PodDBAdapter.KEY_NEW_EPISODES_ACTION + " INTEGER DEFAULT 0");
}
}
}

View File

@ -54,7 +54,7 @@ public class PodDBAdapter {
private static final String TAG = "PodDBAdapter";
public static final String DATABASE_NAME = "Antennapod.db";
public static final int VERSION = 2060000;
public static final int VERSION = 3010000;
/**
* Maximum number of arguments for IN-operator.
@ -120,6 +120,7 @@ public class PodDBAdapter {
public static final String KEY_FEED_SKIP_ENDING = "feed_skip_ending";
public static final String KEY_FEED_TAGS = "tags";
public static final String KEY_EPISODE_NOTIFICATION = "episode_notification";
public static final String KEY_NEW_EPISODES_ACTION = "new_episodes_action";
public static final String KEY_PODCASTINDEX_CHAPTER_URL = "podcastindex_chapter_url";
// Table names
@ -161,7 +162,8 @@ public class PodDBAdapter {
+ KEY_FEED_TAGS + " TEXT,"
+ KEY_FEED_SKIP_INTRO + " INTEGER DEFAULT 0,"
+ KEY_FEED_SKIP_ENDING + " INTEGER DEFAULT 0,"
+ KEY_EPISODE_NOTIFICATION + " INTEGER DEFAULT 0)";
+ KEY_EPISODE_NOTIFICATION + " INTEGER DEFAULT 0,"
+ KEY_NEW_EPISODES_ACTION + " INTEGER DEFAULT 0)";
private static final String CREATE_TABLE_FEED_ITEMS = "CREATE TABLE "
+ TABLE_NAME_FEED_ITEMS + " (" + TABLE_PRIMARY_KEY
@ -311,7 +313,8 @@ public class PodDBAdapter {
+ TABLE_NAME_FEEDS + "." + KEY_FEED_TAGS + ", "
+ TABLE_NAME_FEEDS + "." + KEY_FEED_SKIP_INTRO + ", "
+ TABLE_NAME_FEEDS + "." + KEY_FEED_SKIP_ENDING + ", "
+ TABLE_NAME_FEEDS + "." + KEY_EPISODE_NOTIFICATION;
+ TABLE_NAME_FEEDS + "." + KEY_EPISODE_NOTIFICATION + ", "
+ TABLE_NAME_FEEDS + "." + KEY_NEW_EPISODES_ACTION;
private static final String JOIN_FEED_ITEM_AND_MEDIA = " LEFT JOIN " + TABLE_NAME_FEED_MEDIA
+ " ON " + TABLE_NAME_FEED_ITEMS + "." + KEY_ID + "=" + TABLE_NAME_FEED_MEDIA + "." + KEY_FEEDITEM + " ";
@ -448,7 +451,7 @@ public class PodDBAdapter {
ContentValues values = new ContentValues();
values.put(KEY_AUTO_DOWNLOAD_ENABLED, prefs.getAutoDownload());
values.put(KEY_KEEP_UPDATED, prefs.getKeepUpdated());
values.put(KEY_AUTO_DELETE_ACTION, prefs.getAutoDeleteAction().ordinal());
values.put(KEY_AUTO_DELETE_ACTION, prefs.getAutoDeleteAction().code);
values.put(KEY_FEED_VOLUME_ADAPTION, prefs.getVolumeAdaptionSetting().toInteger());
values.put(KEY_USERNAME, prefs.getUsername());
values.put(KEY_PASSWORD, prefs.getPassword());
@ -460,6 +463,7 @@ public class PodDBAdapter {
values.put(KEY_FEED_SKIP_INTRO, prefs.getFeedSkipIntro());
values.put(KEY_FEED_SKIP_ENDING, prefs.getFeedSkipEnding());
values.put(KEY_EPISODE_NOTIFICATION, prefs.getShowEpisodeNotification());
values.put(KEY_NEW_EPISODES_ACTION, prefs.getNewEpisodesAction().code);
db.update(TABLE_NAME_FEEDS, values, KEY_ID + "=?", new String[]{String.valueOf(prefs.getFeedID())});
}

View File

@ -34,14 +34,14 @@ public abstract class FeedPreferencesCursorMapper {
int indexAutoSkipIntro = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_FEED_SKIP_INTRO);
int indexAutoSkipEnding = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_FEED_SKIP_ENDING);
int indexEpisodeNotification = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_EPISODE_NOTIFICATION);
int indexNewEpisodesAction = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_NEW_EPISODES_ACTION);
int indexTags = cursor.getColumnIndexOrThrow(PodDBAdapter.KEY_FEED_TAGS);
long feedId = cursor.getLong(indexId);
boolean autoDownload = cursor.getInt(indexAutoDownload) > 0;
boolean autoRefresh = cursor.getInt(indexAutoRefresh) > 0;
int autoDeleteActionIndex = cursor.getInt(indexAutoDeleteAction);
FeedPreferences.AutoDeleteAction autoDeleteAction =
FeedPreferences.AutoDeleteAction.values()[autoDeleteActionIndex];
FeedPreferences.AutoDeleteAction.fromCode(cursor.getInt(indexAutoDeleteAction));
int volumeAdaptionValue = cursor.getInt(indexVolumeAdaption);
VolumeAdaptionSetting volumeAdaptionSetting = VolumeAdaptionSetting.fromInteger(volumeAdaptionValue);
String username = cursor.getString(indexUsername);
@ -52,6 +52,8 @@ public abstract class FeedPreferencesCursorMapper {
float feedPlaybackSpeed = cursor.getFloat(indexFeedPlaybackSpeed);
int feedAutoSkipIntro = cursor.getInt(indexAutoSkipIntro);
int feedAutoSkipEnding = cursor.getInt(indexAutoSkipEnding);
FeedPreferences.NewEpisodesAction feedNewEpisodesAction =
FeedPreferences.NewEpisodesAction.fromCode(cursor.getInt(indexNewEpisodesAction));
boolean showNotification = cursor.getInt(indexEpisodeNotification) > 0;
String tagsString = cursor.getString(indexTags);
if (TextUtils.isEmpty(tagsString)) {
@ -69,6 +71,7 @@ public abstract class FeedPreferencesCursorMapper {
feedAutoSkipIntro,
feedAutoSkipEnding,
showNotification,
feedNewEpisodesAction,
new HashSet<>(Arrays.asList(tagsString.split(FeedPreferences.TAG_SEPARATOR))));
}
}

View File

@ -13,6 +13,7 @@ import androidx.annotation.VisibleForTesting;
import androidx.core.app.NotificationCompat;
import androidx.preference.PreferenceManager;
import de.danoeh.antennapod.model.feed.FeedPreferences;
import org.json.JSONArray;
import org.json.JSONException;
@ -67,6 +68,7 @@ public class UserPreferences {
public static final String PREF_QUEUE_KEEP_SORTED = "prefQueueKeepSorted";
public static final String PREF_QUEUE_KEEP_SORTED_ORDER = "prefQueueKeepSortedOrder";
public static final String PREF_NEW_EPISODES_ACTION = "prefNewEpisodesAction";
private static final String PREF_DOWNLOADS_SORTED_ORDER = "prefDownloadSortedOrder";
// Playback
@ -944,6 +946,12 @@ public class UserPreferences {
.apply();
}
public static FeedPreferences.NewEpisodesAction getNewEpisodesAction() {
String str = prefs.getString(PREF_NEW_EPISODES_ACTION,
"" + FeedPreferences.NewEpisodesAction.ADD_TO_INBOX.code);
return FeedPreferences.NewEpisodesAction.fromCode(Integer.parseInt(str));
}
/**
* Returns the sort order for the downloads.
*/

View File

@ -102,6 +102,7 @@
<string name="yes">Yes</string>
<string name="no">No</string>
<string name="reset">Reset</string>
<string name="global_default">Global default</string>
<string name="url_label">URL</string>
<string name="support_funding_label">Support</string>
<string name="support_podcast">Support this Podcast</string>
@ -124,9 +125,10 @@
<string name="feed_volume_reduction_light">Light</string>
<string name="feed_volume_reduction_heavy">Heavy</string>
<string name="parallel_downloads">%1$d parallel downloads</string>
<string name="feed_auto_download_global">Global default</string>
<string name="feed_auto_download_always">Always</string>
<string name="feed_auto_download_never">Never</string>
<string name="feed_new_episodes_action_add_to_inbox">Add to Inbox</string>
<string name="feed_new_episodes_action_nothing">Nothing</string>
<string name="send_label">Send&#8230;</string>
<string name="episode_cleanup_never">Never</string>
<string name="episode_cleanup_except_favorite_removal">When not favorited</string>
@ -529,6 +531,8 @@
<string name="pref_contribute">Contribute</string>
<string name="pref_show_subscription_title">Show Subscription Title</string>
<string name="pref_show_subscription_title_summary">Display the subscription title below the cover image.</string>
<string name="pref_new_episodes_action_title">New Episodes Action</string>
<string name="pref_new_episodes_action_sum">Action to take for new episodes</string>
<!-- About screen -->
<string name="about_pref">About</string>